Golang,来自struct的调用方法

时间:2015-01-24 19:48:08

标签: go

是否可以使用此结构类型从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有其他方法为struct添加一些数据?

或许我选择了错误的方法来做到这一点? :)

3 个答案:

答案 0 :(得分:5)

您可以使用struct literal或nil指针。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

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

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