定义类型
Go经常使用struct作为基础类型来定义类型,但是它们也能基于int、string、bool或者其他任何类型。
- Go语言简单地不支持重载。
定义方法
方法定义与函数定义很像。事实上,它们只有一点不同:你需要增加一个额外的参数,一个接收器参数,它在函数名称之前的括号中。
方法调用
为了调用你定义的方法,键入你要在其上调用方法的值、一个点和要调用的方法的名称,跟着一对括号。这里你调用的方法的值被称为方法接收器。
方法调用和方法定义的相似性能帮助你记住语法:当你调用一个方法时,接收器要被列为第一个,并且当你定义一个方法的时候,接收器参数也被列为第一个。
方法定义中的接收器参数的名称并不重要,但它的类型很重要;你定义的方法与此类型的值都关联。
package main import ( "fmt" ) type mystr string func (name mystr) hi() { fmt.Print("hello "+name) } func main() { str:=mystr("world") str.hi() }
- 方法(几乎)就像一个函数
- 可以在方法名称后面的括号中定义额外的参数。参数变量与接收器参数一样,可以被方法块所访问。当你调用方法时,你将需要为每个参数提供值。
- 与其他函数一样,你可以为方法声明一个或者多个返回值,返回值将在函数被调用时返回:
- 方法名称以大写字母开头,则认为是导出的,如果它的名称以小写字母开头,则认为是不导出的。如果你想要在当前包之外使用你的方法,确保它的名字以大写字母开头。
指针类型的接收器参数
函数参数接收的是函数调用时值的拷贝,而不是原始的值,当函数退出后任何更新都会失效。为了让double函数正常工作,我们传递了一个我们想要更新的值的指针,然后更新这个指针指向的值。
接收器参数与普通参数没有不同。但是就像其他任何参数,接收器参数接收一个接收器的拷贝值。如果你使用方法来修改接收器,你修改的是拷贝,而不是原始值。
当你用一个非指针的变量调用一个需要指针的接收器的方法的时候,Go会自动为你将非指针类型转换为指针类型。同样指针类型也会自动转换为非指针类型,如果你调用一个要求值类型的接收器,Go会自动帮你获取指针指向的值,然后传递给方法。
package main import ( "fmt" ) type mystr string func (name *mystr) hi() { fmt.Print("\nhello "+*name) *name="yi" } func main() { str:=mystr("world") str.hi() str.hi() }
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!


