第8课 Go的方法method

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lhdalhd1996/article/details/52122802

方法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的包内部添加
//方法可以访问同一个包的私有字段

猜你喜欢

转载自blog.csdn.net/lhdalhd1996/article/details/52122802