go - 何时显式实例化结构?

标签 go

我来自 Java,在那里你总是做这样的事情:

Http http = new Http(...);

http.ListenAndServe();

因此所有信息都存储在局部变量“http”中。

在go中是不同的。大多数信息直接存储在“另一个包中”。

你这样做:

import "net/http"
...    
http.ListenAndServe(...)

因此您不必显式(当然可以)实例化服务器结构。只需从包中调用一个函数,所有结构都会从那里创建。 (所以与Java相比,它的行为就像静态函数一样,使用静态成员变量来存储所有信息?)

那么这就是您(每次)在 go 中的做法? 来自 Java,这有点难以理解。 特别是何时使用此方法,何时使用工厂模式(如:NewHttpServer(...))以及何时从另一个包显式创建结构(如:var http http.服务器 = http.Server{...} )

一切皆有可能,但地道的 golang 代码是什么?

有什么好的文档/教程可以解释它吗?

最佳答案

我不知道是否有一个硬性规定来回答你的问题。当满足以下条件之一时,我通常使用工厂方法:

  • 我需要在使用实例之前对属性值进行一些合理性检查;
  • 我想使用意外的属性,在这种情况下,解决它们的唯一方法是在同一个包中。

关于go - 何时显式实例化结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46760209/

相关文章:

go - 重命名Sarama的kafka消费群?

go - 如何在 Golang 中使用 socket.io 广播图像?

http - 如何结合使用 defer 和 http.ListenAndServe?

go - 在 Go 中调用 exec.Cmd() 后修改参数

当源为 multipart.File 时,image.Decode 的结果为 "unknown format"

go - 在golang中一键解码多种数据类型

Google Cloud HTTP(S) 负载平衡器不会取消与后端的连接

user-interface - 在fyne中向MultiLineEntry附加一些文本

go - 是否可以将 Go Task runner 配置为使用文件扩展名 yaml?

go - 解释预分配 slice 的基准