2017-11-04 7 views
-1

私は勉強中です。小さなWebアプリケーションを開始しました。Go Langのhttp.ResponseWriterなどの繰り返しを避けてください

素晴らしい。しかし、私はすでに非常に基本的なものを持っています。

実際、Goウェブアプリケーションの優れたドキュメントソースになると思いますか?

たとえば、私は15のメソッドを "http.ResponseWriter"などをパラメータとして取得しています(これは繰り返しの意味です)。

私はそれを行うより良い方法があると思います。

しかし私は、他の言語(Python、Ruby、Perlなど)の正確な考え方でGoをプログラミングしたいとは思わない。

間違っているわけではありませんが、それは間違いではありません。

ここでは例です:

func newStudentHandler(w http.ResponseWriter, r *http.Request) { 
    p := studentPage{Title:"New Student"} 
    t, _ := template.ParseFiles("new_student.html") 
    t.Execute(w, p) 
} 

func newTeacherHandler(w http.ResponseWriter, r *http.Request) { 
    p := teacherPage{Title:"New Teacher"} 
    t, _ := template.ParseFiles("new_teacher.html") 
    t.Execute(w, p) 

} 

func newClassHandler(w http.ResponseWriter, r *http.Request) { 
    p := classPage{Title:"New Class"} 
    t, _ := template.ParseFiles("new_class.html") 
    t.Execute(w, p) 
} 

[] S ジオ

+1

「今すぐ「http.ResponseWriter」を取得する15のメソッドがありますか?私はあなたが何をしているのか分かりません。 –

+0

例を入れるために質問を編集しました。 –

答えて

0

これは、彼らが特定の署名が2つのパラメータ値を受け入れることができるようにすることを持っている必要がありますので、ハンドラは通常、移動中に書かれている方法です要求を処理できる必要があることを示します。

入力の量を減らすつもりなら、これを確実に回避できます。多分それを行う方法は多分ありますが、気になるものはこのようなものに見えます。

type H struct { 
    w http.ResponseWriter 
    r *http.Request 
} 

type HF func(H) 

func (f HF) ServeHTTP(w http.ResponseWriter, r *http.Request) { 
     f(H{w:w, r:r}) 
} 

func (h H) newStudent() { 
    p := studentPage{Title:"New Student"} 
    t, _ := template.ParseFiles("new_student.html") 
    t.Execute(h.w, p) 
} 

func (h H) newTeacher() { 
    p := teacherPage{Title:"New Teacher"} 
    t, _ := template.ParseFiles("new_teacher.html") 
    t.Execute(h.w, p) 

} 

func (h H) newClass() { 
    p := classPage{Title:"New Class"} 
    t, _ := template.ParseFiles("new_class.html") 
    t.Execute(h.w, p) 
} 

// ... 

http.Handle("/students", HF(H.newStudent)) 
http.Handle("/teachers", HF(H.newTeacher)) 
http.Handle("/classes", HF(H.newClass)) 

個人的に私はあなたのコードを読むと非を見たときに、たとえば、他の開発者が混乱するかもしれない、それを行うときには、いくつかの明快さを失う可能性があるため、標準的なものから、あなたのハンドラを変更するにはお勧めしません標準ハンドラ。

関連する問題