我来自Java,你总是这样做:
Http http = new Http(...);
http.ListenAndServe();
所以所有信息都存储在本地变量" http"。
中它与众不同。大多数信息都直接存储在另一个包中,并且#34;。
你这样做:
import "net/http"
...
http.ListenAndServe(...)
所以你不必明确(你可以)实例化服务器结构。只需从包中调用一个函数,就可以从那里创建所有结构。 (因此,与Java相比,它就像静态函数一样,具有静态成员变量来存储所有信息?)
这就是你如何(每次)去做?
来自Java,这有点难以理解。
特别是何时使用此方法,何时使用工厂模式(如:NewHttpServer(...)
)以及何时从另一个包显式创建结构(如:var http http.Server = http.Server{...}
)
一切皆有可能,但是什么是惯用的golang代码?
是否有任何好的文档/教程可以解释它?
答案 0 :(得分:1)
我不知道是否有一条强硬的规则来回答你的问题。当其中一个条件成立时,我通常使用工厂方法:
答案 1 :(得分:0)
我真的建议您阅读net/http
的{{3}}。该软件包功能丰富,可让您按照自己的意愿行事。
http.ListenAndServe
的行为是隐式使用称为DefaultServeMux
的服务多路复用器,您可以使用http.Handle
注册处理程序。所以你不能像这样明确地处理服务器或多路复用器。
这听起来像你想要的(更像Java的解决方案)是实例化服务器
s := &http.Server{
Addr: ":8080",
Handler: myHandler, // takes a path and a http.HandlerFunc
ReadTimeout: 10 * time.Second, // optional config
WriteTimeout: 10 * time.Second, // ...
MaxHeaderBytes: 1 << 20,
}
并致电ListenAndServe
:
log.Fatal(s.ListenAndServe())
这两种方式都是完全惯用的,我看到它们经常使用。
但严重的是,不要相信我的话。去看看文档,他们有很多例子:)