【问题标题】:What the meaning of Golang "func (t *SomeType) myFuncName(param1, param2)" syntax [duplicate]Golang "func (t *SomeType) myFuncName(param1, param2)" 语法是什么意思
【发布时间】:2018-02-04 08:14:47
【问题描述】:

我正在学习 Golang - 在教程中我经常看到这样的语法:

type SomeType struct {

      //struct entries

}

关注:

func (t *SomeType) myFuncName(param1, param2) typeToReturn {

     //function body and return

}

请解释一下指向结构 (t *SomeType) 的指针是什么——为什么需要它以及该语法的正确名称是什么——因为在官方文档中找不到解释。

【问题讨论】:

  • myFuncName 被称为方法,您可以在此处找到有关它们的信息:tour.golang.org/methods/1
  • t *SomeType 被称为方法接收者。这意味着myFuncNameSomeType 上的一个方法。请参加围棋之旅,这在@RayToal 链接的部分中进行了介绍
  • 如果您正在学习该语言,那么值得(反复)学习官方语言规范,即使它很密集并且需要一段时间。
  • Ray Toal - 谢谢!所以他们(golang 创建者)已经打乱了所有的定义——编程中的“方法”属于类——而函数属于范围。难怪很难找到信息。
  • 没有人打乱任何东西。方法不属于类。这就是某些语言使用它们的方式。

标签: go


【解决方案1】:

这是一个类型定义,后跟一个方法函数定义,带有一个已定义类型的指针接收器。见the Go Language Specification on Method Sets

所以

package main

import(
    "fmt"
)

type TD struct {
    Foo     string
}

func (td *TD) Bar() {
    td.Foo = `bar`
}

func main() {
    a := new(TD)
    a.Bar()
    fmt.Println(a.Foo)
}

打印bar

这有点类似于一些其他语言中的类定义后跟方法定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-13
    • 2012-02-15
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多