2016-04-28 12 views
5

sự khác biệt giữa điều này là gì:Sự khác biệt giữa http và mặc định servemux là gì?

func main() { 

    http.HandleFunc("/page2", Page2) 
    http.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", nil) 
} 

Và sử dụng golang phục vụ MUX

func main() { 
    mux := http.NewServeMux() 

    mux.HandleFunc("/page2", Page2) 
    mux.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", mux) 
} 

Trả lời

2

ServerMux là một loại mà thực hiện giao diện Handler, tất cả các máy chủ có một. Trong ví dụ đầu tiên của bạn, máy chủ chỉ sử dụng trình xử lý mặc định. Tôi không nghĩ rằng có sự khác biệt ở đây vì mux trả về bởi NewServeMux sẽ giống như mặc định. Nó được tạo sẵn để bạn có thể tùy chỉnh thêm việc xử lý yêu cầu.

2

Mặc định MUX được định nghĩa như sau:

var DefaultServeMux = NewServeMux() 

Vì vậy, có thực sự không có sự khác biệt lớn, trừ khi bạn muốn tùy chỉnh thêm và cần một MUX rõ ràng cho điều đó (ví dụ chuỗi chúng đối với một số lý do).

Nhưng vì mặc định đã được cấp phát nên không cần tạo một tài khoản khác mà không có lý do gì.

8

Chương trình đầu tiên sử dụng default serve mux. Nó giống với tiết chi tiết hơn:

func main() { 
    http.DefaultServeMux.HandleFunc("/page2", Page2) 
    http.DefaultServeMux.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", http.DefaultServeMux) 
} 

Có một sự khác biệt quan trọng giữa hai chương trình: Chương trình đầu tiên không có toàn quyền điều khiển các trình xử lý được sử dụng trong chương trình. Có các gói tự động đăng ký với mux phục vụ mặc định từ các hàm init() (example). Nếu chương trình nhập khẩu một trong các gói này trực tiếp hoặc gián tiếp, các trình xử lý được đăng ký bởi các trình xử lý này sẽ hoạt động trong chương trình đầu tiên.

Chương trình thứ hai có toàn quyền kiểm soát các trình xử lý được sử dụng với máy chủ. Bất kỳ trình xử lý nào được đăng ký với mux phục vụ mặc định đều bị bỏ qua.

Các vấn đề liên quan