Golang,从结构调用方法

Golang, call method from struct

这种结构类型是否可以从不带变量的结构中调用方法?

//models.go
type MyStruct struct {
  id int
  name string
}

func (s MyStruct) GetSomeAdditionalData() string {
  return "additional data string"
}

//app.go
func main() {
  fmt.Println(models.MyStruct.GetSomeAdditionalData()) // not works

  var variable models.MyStruct
  fmt.Println(variable.GetSomeAdditionalData()) // it worked
}

或者 Go 有其他方法可以为结构添加一些数据?

或者我 select 做错了方法? :)

您可以定义一个包function(没有任何接收器)。
它不同于 method,因为方法需要接收者。

func GetSomeAdditionalData() string {
  return "additional data string"
}

你可以直接调用它,而不需要结构 MyStruct 的任何实例(因为你不需要任何 MyStruct 数据):

func main() {
  fmt.Println(models.GetSomeAdditionalData())
  fmt.Println(GetSomeAdditionalData())

(如果您已经在包 models 中,则第二种形式有效)

说你可以。 MyStruct.GetSomeAdditionalData() 被称为方法表达式,您必须为该调用提供 MyStruct 类型的第一个参数。参数可以是匿名复合文字 MyStruct.GetSomeAdditionalData(MyStruct{}). 这是工作示例 https://play.golang.org/p/Wc_DjqnpLC 。但是这一切看起来都不是很明智。

您可以使用结构文字或 nil 指针。

MyStruct{}.GetSomeAdditionalData()
(*MyStruct)(nil).GetSomeAdditionalData()