Go语言 如何在没有变量的结构中调用方法

laik7k3q  于 2023-09-28  发布在  Go
关注(0)|答案(3)|浏览(106)

是否可以在没有变量的情况下从具有此结构类型的结构调用方法?

//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语言有其他方法为struct添加数据?
或者我选择了错误的方式去做。:)

ar5n3qh5

ar5n3qh51#

你可以使用一个struct literal或者一个nil指针。

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

1bqhqjot2#

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

qlzsbp2j

qlzsbp2j3#

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

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

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

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

(the如果你已经在models包中,第二种形式可以工作)

相关问题