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() }
程序运行后,控制台输出如下:
首先,我们定义了一个结构体 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) }
程序运行后,控制台输出如下:
首先,我们定义了一个结构体 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, ...{ }