Доброго времени суток.
Являюсь полным дном в отношении разработки, как таковой, но на старости лет захотелось что-то резко поменять в жизни. С теорией программирования мало-мальски знаком (последний раз продолжительная "практика" написания кода была около 15 лет назад, в институте на "плюсах"). Мой выбор пал на Go, как на язык с низким порогом вхождения.
С типизацией познакомился на основании информации из стандартного тура, параллельно читал gobyexamples и профильные темы на стэковерфлоу. Начал читать Саммерфилда, но понял, что рановато мне до него :) После решил проголосовать рублем за видеокурсы, и приобрел "Web Development w/ Google’s Go (golang)" на udemy.
В рамках одного из заданий было предложено,
цитирую:
Take the previous program and change it so that:
func main uses http.Handle instead of http.HandleFunc
Contstraint: Do not change anything outside of func main
Код мною выполненного задания выглядит так (не думаю, что мой файл с шаблоном здесь принципиален):
package main
import (
"fmt"
"html/template"
"io"
"log"
"net/http"
"os"
)
func root(res http.ResponseWriter, req *http.Request) {
io.WriteString(res, "<H1>You are on the top</H1>")
}
func dog(res http.ResponseWriter, req *http.Request) {
io.WriteString(res, "<H1>Bow-wow!</H1>")
}
func me(res http.ResponseWriter, req *http.Request) {
tpl, err := template.ParseFiles("tpl.gohtml")
if err != nil {
log.Fatalln(err)
}
tpl.Execute(res, "<H1>My name is Slim Shadey!</H1>")
}
func main() {
dir, _ := os.Getwd()
fmt.Println(dir)
mux := http.NewServeMux()
mux.Handle("/", http.HandlerFunc(root))
mux.Handle("/dog/", http.HandlerFunc(dog))
mux.HandleFunc("/me/", me) //намеренно использовал этот метод, чтобы попытаться понять разницу...
http.ListenAndServe(":8080", mux)
}
Правильно, ли я понимаю:
1. Handle в качестве аргументов ожидает URI и обработчик (можно так называть Handler в русском языке?)
2. HandleFunc в качестве аргументов ожидает URI и функцию с сигнатурой вида func(ResponseWriter, *Request) {}
3. HandlerFunc возвращает handler для функции с сигнатурой вида func(ResponseWriter, *Request) {}
?
4. Есть ли плюсы в использовании Handle перед HandleFunc с учетом того, что синтаксис последней, в целом, выглядит несколько проще? :)