第8课 Go的方法method

本文深入探讨了Go语言中方法的概念及其实现方式,包括receiver的作用、如何为不同类型的值或指针定义方法、方法调用的特点及注意事项等。此外,还介绍了方法与结构体之间的交互细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法method
- Go中没有class,但依旧有method
- 通过显示说明receiver来实现与某个类型的结合
- 只能为同一个包中的类型定义方法
- Receiver可以是类型的值或者指针
- 不存在方法重载
- 可以使用值或指针来调用方法,编译器会自动完成转换
-从某种意义上来将,方法是函数的语法糖,因为receiver其实就是方法所接受的第一个参数(Methood alue vs,Method Expression)
- 如果外部结构和嵌入结构存在同名方法,则有限调用外部结构的方法
- 类型别名不会拥有底层类型所附带的方法
- 方法可以调用结构中的非公开字段

package main

import "fmt"

type A struct {
    Name string
}
type B struct {
    Name string
}

func main() {
    a := A{}
    a.print()
    fmt.Println(a) //Name被修改了
    fmt.Println("-------")
    b := B{}
    b.print()
    fmt.Println(b) //Name没有被修改
    fmt.Println("-------")
}
func (a *A) print() {
    a.Name = "a"
    fmt.Println(*a)
} //注意看这个的接收者,引用类型
func (b B) print() {
    b.Name = "b"
    fmt.Println(b)
} //注意看这个的接收者,拷贝类型
package main

import "fmt"

type TZ int //我只是把int的基本属性带过来了,并没有带过来方法

func main() {
    var a TZ
    a.Print()     //methord value
    (*TZ).Print() //methord expression
}

func (a *TZ) Print() {
    fmt.Println("TZ")
} //可以看到我们竟然给int添加了方法
//事实上,不会将int的方法通过类型别名带过来。
//还有一点,我们对int类型直接添加方法必须在int的包内部添加
//方法可以访问同一个包的私有字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值