在C#或者Java里面我们都知道,一个Class是要包含成员变量和方法的,对于Go语言的Struct也一样,我们也可以给Struct定义一系列方法。 一、怎么定义一个方法? Go的方
在C#或者Java里面我们都知道,一个Class是要包含成员变量和方法的,对于Go语言的Struct也一样,我们也可以给Struct定义一系列方法。
Go的方法是在函数前面加上一个接收者,这样编译器就知道这个方法属于哪个类型了。例如:
package demo1
import (
"fmt"
)
type Student struct {
Name string
Age int
Class string
}
func (stu Student) GetUserInfo(student Student) {
fmt.Printf("学生姓名:%v 年龄: %v 班级:%v ",student.Name,student.Age,student.Class)
}
上面的代码就是定义了一个Student的结构体,然后针对这个结构体,创建了三个方法。我们可以通过【实例名.方法名】的方式来访问这个结构体内的方法。
package main
import "Function/demo1"
func main(){
student:=demo1.Student{
Name:"XiaoMing",
Age:20,
Class:"3-2",
}
student.GetUserInfo(student)
}
上面的GetUserInfo的接收者是一个Student类型,这里就会出现一个问题,如果我是设定类的操作,那么不会改变对应实例的值,它只是一个拷贝。下面的例子将说明这个问题,下面这个Set方法接收者是Student
type Student struct {
Name string
Age int
Class string
}
func (stu Student) SetStudentName(name string) {
stu.Name = name
}
main函数中使用这个类
func main(){
student:=demo2.Student{
Name:"XiaoMing",
Age:20,
Class:"3-2",
}
student.SetStudentName("LiLie")
fmt.Printf("Name: %v",student.Name )
}
结果:
Name: XiaoMing
可以看到,这里并没把Name进行修改。
如果我们使用Student指针类型作为接收者,则会修改这个值。例子如下:
func (stu *Student) SetStudentName(name string) {
stu.Name = name //这里为什么能stu直接.出Name,是Go的语法糖相当于 (*stu).Name
}
再次运营结果为:
Name: LiLie
粗暴的结论:如果你不知道怎么选择,那就使用指针。但有时候,使用值接收者会更合理,尤其是效率考虑,比如:不需要修改的小 struct、基础数据类型。以下是一些有用的指导方针:
最后再强调一下,如果你拿不定主意,那就用指针接收者。
--结束END--
本文标题: go语言中函数与方法介绍
本文链接: https://www.lsjlt.com/news/164404.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0