Go中的方法
基本介绍
golang中的方法是作用在指定的数据类型上的(和数据类型绑定的),因此自定义类型都可以用方法,而不仅仅是struct。
方法的声明和调用
type A struct{ Num int } func(a A) test(){ fmt.Println(a.Num) }
- func(a A) test(){}表示A结构体有一个方法,方法名字为test
- (a A)体现test方法和A类型绑定的。
type Person struct { Name int } //Test方法是结构体Person的方法 func (p Person) Test() { fmt.Println("test()", p.Name) } func main() { //定义一个person实例 var p model.Person p.Test() //test() 0 }
- Test方式和Person类型绑定。
- Test方法只能通过Person类型的变量来调用,而不能直接调用,也不能使用其他类型变量来调用。
- func(p Person)Test(){}中的p表示哪个Person变量调用,这个p就是一个副本,这个和函数的传参非常相似。
- p这个相当于一个变量名,可以随意修改。
方法的调用和传参机制的原理:
方法的调用和传参机制和函数基本一样,不一样的地方是方法调用时,会将调用方法的变量,当做实参也传递给方法。
举例:
- 在通过一个变量去调用方法时,其调用机制和函数一样。
- 不一样的地方是变量调用方法时,改变量本身也会作为一个参数传递到方法中(如果变量是值类型则进行值拷贝,如果是引用类型,则进行地址拷贝)。
方法的声明:
func(recevier Type) methodName(参数列表) (返回值列表){ 方法体 return 返回值 }
- 参数列表:表示方法输入。
- recevier Type:表示这个方法和type这个类型进行绑定,或者说该方法作用于type类型。
- recevier Type:type可以是结构体,也可以是其他自定义类型。
- recevier: 就是type类型的一个变量。
- 返回值列表: 表示返回的值,可以是多个。
- 方法主题:表示为了实现某一功能代码块。
- return语句不是必须的。
方法的注意事项和细节:
- 结构体类型是值类型,在方法调用中,遵守值类型的传递机制,值值拷贝传递方法。
- 如果希望方法中修改结构体变量的值,可以通过结构体指针的方式来处理。
- golang中的方法作用在指定的数据类型上,因此自定义类型都可以有方法。而不仅仅是struct,比如自定义后的int,float32等都可以用方法。
- 方法的访问范围控制和函数一样,方法首字母小写,只能在本包访问,方法首字母大写,可以在本包和其他包访问。
- 如果一个类型实现了String()这个方法,那么fmt.Println默认会调用这个变量的String()进行输出。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!