ویرگول
ورودثبت نام
رضا مرسلی
رضا مرسلیبرنامه نویس
رضا مرسلی
رضا مرسلی
خواندن ۱ دقیقه·۶ سال پیش

از DefaultServeMux استفاده نکنیم


توی بعضی از آموزش‌ها دیدم که برای راه اندازی یه وب‌سرور ساده در گولنگ روش زیر رو پیشنهاد می‌دهند.

package main import ( &quotfmt&quot &quotlog&quot &quotnet/http&quot ) func main() { http.HandleFunc(&quot/hello&quot, func(w http.ResponseWriter, r *http.Request){ fmt.Fprintf(w, &quotHello world!&quot) }) fmt.Printf(&quotStarting server at port 8080\n&quot) log.Fatal(http.ListenAndServe(&quot:8080&quot, nil)) }

اگر با گولنگ وب‌سرور ساده‌ای نوشته‌اید، احتمالا تابه‌حال DefaultServeMux به گوشتان خورده.

در واقع ServeMux یک روتر است که وظیفه ارتباط درخواست با url از پیش تعیین شده و اجرای `handler` مورد نظر را دارد. http.HandleFunc و http.Handle برای ثبت handler در DeafultServeMux استفاده میشود. مشکل این است که DeafultServeMux یک متغیر گلوبال است.

var DefaultServeMux = new(ServeMux)

اگر پکیج‌های خارجی رو وارد و استفاده میکنین، اون‌ها هم این امکان رو دارند که در DefaultHandlerMux بتوانند handler خودشون رو ثبت کنن!

package malicious import ( &quotfmt&quot &quotnet/http&quot &quotos&quot ) func init() { http.HandleFunc(&quot/env&quot, printEnvHandler) } func printEnvHandler(w http.ResponseWriter, r *http.Request) { for _, env := range os.Environ() { fmt.Fprintf(w, &quot%s\n&quot, env) } }

برای جلوگیری کافیه ServeMux رو خودتون تعریف کنین.

mux := http.NewServeMux() mux.HandleFunc(&quot/hello&quot, helloHandler) http.ListenAndServe(&quot:8080&quot, mux)


golangگولنگserverوب سروربرنامه نویسی
۶
۲
رضا مرسلی
رضا مرسلی
برنامه نویس
فینگ
فینگ
یک ارائه دهنده ابری مدرن که در سریع ترین زمان ممکن سرویس شما را مستقر می کند. شما کد یا برنامه خود را بنویسید، فینگ آن را ساخته و اجرا می‌کند. در فینگ شما می توانید هر چیزی را مستقر کنید، از static سایت ها و cron jobs ها گرفته تا پایگاه‌های داده .
شاید از این پست‌ها خوشتان بیاید