برنامه نویس
از DefaultServeMux استفاده نکنیم
توی بعضی از آموزشها دیدم که برای راه اندازی یه وبسرور ساده در گولنگ روش زیر رو پیشنهاد میدهند.
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request){
fmt.Fprintf(w, "Hello world!")
})
fmt.Printf("Starting server at port 8080\n")
log.Fatal(http.ListenAndServe(":8080", nil))
}
اگر با گولنگ وبسرور سادهای نوشتهاید، احتمالا تابهحال DefaultServeMux به گوشتان خورده.
در واقع ServeMux یک روتر است که وظیفه ارتباط درخواست با url از پیش تعیین شده و اجرای `handler` مورد نظر را دارد. http.HandleFunc و http.Handle برای ثبت handler در DeafultServeMux استفاده میشود. مشکل این است که DeafultServeMux یک متغیر گلوبال است.
var DefaultServeMux = new(ServeMux)
اگر پکیجهای خارجی رو وارد و استفاده میکنین، اونها هم این امکان رو دارند که در DefaultHandlerMux بتوانند handler خودشون رو ثبت کنن!
package malicious
import (
"fmt"
"net/http"
"os"
)
func init() {
http.HandleFunc("/env", printEnvHandler)
}
func printEnvHandler(w http.ResponseWriter, r *http.Request) {
for _, env := range os.Environ() {
fmt.Fprintf(w, "%s\n", env)
}
}
برای جلوگیری کافیه ServeMux رو خودتون تعریف کنین.
mux := http.NewServeMux()
mux.HandleFunc("/hello", helloHandler)
http.ListenAndServe(":8080", mux)
مطلبی دیگر از این انتشارات
آشنایی با Gitea
مطلبی دیگر از این انتشارات
معرفی زبان Go
مطلبی دیگر از این انتشارات
انتشار Node 18 و امکانات جدید!