Go语言结构体方法教程

中我们除了可以单独定义 ,同时,还可以为 添加函数。被添加方法的结构体的变量名在 Golang 中被叫做接收器。

Golang 中接收器 可以是任何类型,比如 、、、、 等类型的别名,甚至也可以是函数类型。

但是接收器不能是一个接口类型,因为接口是一个抽象定义,而方法却是具体实现,如果这样做了就会引发一个编译错误。

为结构体添加方法

语法

var (s StructType)funcName(param1 param1Type, ...)(returnVal1 returnType1, ...){ }

说明

为结构体 StructType 添加一个函数 funcName,该函数的参数为 param1,返回值为 returnVal1,参数和返回值可以有 0 个或者任意多个。

这里的 s,我们在 Golang 中叫做方法的接收器,Golang 中的方法接收器在命名时,官方建议使用接收器类型名的第一个小写字母。

案例

为结构体添加方法

定义一个结构体,并给该结构体添加方法

package main import ( "fmt" ) type Person struct { Name string Age int } //定义一个结构体,并给该结构体添加方法 func (p Person)print(){ fmt.Println("Person Name =", p.Name, "Age =", p.Age) } func main() { fmt.Println("嗨客网(www.haicoder.net)") var p = Person{ Name:"HaiCoder", Age:10, } p.print() }

程序运行后,控制台输出如下:

24_golang结构体方法.png

首先,我们定义了一个结构体 Person,该结构体有两个字段,一个 类型的 Name,一个 类型的 Age, 接着我们为该结构体添加了一个 print 方法。

该 print 方法,没有任何的 和 , 我们在该函数里直接打印结构体的两个字段的值,最后在 函数里面调用结构体函数。

为结构体添加带参数和返回值的方法

定义一个结构体,并为结构体添加带参数和返回值的方法

package main import ( "fmt" ) type Student struct { Name string Age int Score float64 } // 定义一个结构体,并为结构体添加带参数和返回值的方法 func (s Student)isPass(score float64)(isPass bool){ if s.Score >= score{ return true } return false } func main() { fmt.Println("嗨客网(www.haicoder.net)") var p = Student{ Name:"HaiCoder", Age:10, Score:99, } isPass := p.isPass(80) fmt.Println("IsPass =",isPass) }

程序运行后,控制台输出如下:

25_golang结构体方法.png

首先,我们定义了一个结构体 Student,该结构体有三个字段,同时我们为该结构体添加了一个 isPass 方法,该方法接受一个 类型的参数,返回一个 类型的返回值。

接着,我们在 main 函数里面,定义 Student 类型的结构体变量,并调用我们定义的 isPass 方法,传入参数,并使用变量 isPass 接受该方法的返回值,这里我们传入了参数 80,因为结构体的 Score 字段的值为 99,大于 80,因此返回了 true。

Go语言结构体方法总结

Go 语言中我们除了可以单独定义函数,同时,还可以为结构体添加函数。被添加方法的结构体的变量名在 Golang 中被叫做接收器。

Golang 中接收器类型可以是任何类型,比如 int、bool、string、数组、切片等类型的别名,甚至也可以是函数类型。 为结构体添加方法语法:

var (s StructType)funcName(param1 param1Type, ...)(returnVal1 returnType1, ...{ }