2016-03-27 26 views
8

içinde kullanmalı mıyım? Yeni bir ServeMux oluşturup http.Server'a kaydettirmem mi yoksa http.HandleFunc ve http.Handler numaralarını doğrudan mi çağırmalıyım?ServeMux veya http golang

Bir ServeMux ile olan yolun daha iyi olduğunu düşünüyorum, çünkü http.HandleFunc, Go'nun kötü uygulaması olarak kabul edilen HTTP paketinin genel durumuyla bariz bir şekilde karışıyor. Ancak, birçok öğreticiler, hatta resmi olanlar, sık sık http.HandleFunc rota kullanılıyor görüyoruz.

Bu beni meraklandırıyor: Bir ServeMux varken neden bir http.HandleFunc kullanmalıyım? ServeMux'un bazı avantajlara sahip olduğunu biliyorum (örneğin, her zaman öneki tekrarlamadan onu yerleştirebilirsiniz), ama özellikle HandleFunc, ServeMux dahili olarak kullanıldığından neden çoğullayıcı üzerinden http.HandleFunc'u seçmem gerektiğini merak ediyorum.

Düzenleme: yorumlarda söz verildiği gibi, Golang-dev numaralı ek (ve yararsız IMO işlevlerini) kullanımdan kaldırmayı istedim ve hayır dediler (iyi, kişi hayır dedi). Here is the link.

+0

(vardır burayı sorulan bu yüzden: Ben de önce) – elithrar

+0

elithrar geldi çünkü bu iyi bir soru ve gelecekte başkaları için faydalı bir biri olduğunu söylemek istedim. Google'da hiçbir şey bulamadım. Imo, 'http.HandleFunc' ve' http.Handle', sonra kullanımdan kaldırılmalıdır. Server' sadece 2 fazla satır ekler ve belirsizlik daha belirgin bir şekilde "kötü yol" olduğunu, özellikle de her zaman kötü 'a Mux' kullanma ve. – Matt3o12

+0

GO1 uyumluluk söz çıkarılmasına imkân vermemektedir, bu yüzden (çok uzak gibi olduğu - yaş) "2.0" kadar onlarla 'sıkışmış' ediyoruz. – elithrar

cevap

4

Doğru yoldasınız: Kendi belirttiğiniz nedenlerden dolayı kendi ServeMux modelinizi oluşturmayı tercih etmelisiniz.

DefaultServeMux kullanımı, net/http/pprof kullanıldığında profil uç noktalarının ortaya çıkma riskini de taşır, çünkü bunlar DefaultServeMux'a eklenmiştir.

http.Handle|HandleFunc kolaylık yöntemleri ve aşağı örnek kodda klişe tutmak için belki yararlı ama ServeMux oluşturarak size sarmak olanağı verir, birbirinin içinde yuva bunu bir yapıcı ihracat onu, vb