继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

go 方法接受者 是指针类型和非指针类型的 区别

holdtom
关注TA
已关注
手记 1842
粉丝 240
获赞 991


go 方法接受者 是指针类型和非指针类型的 区别

非指针类型

package main

import "fmt"

// 定义接口

type Car interface {

    GetName() string

    Run()

}

// 定义结构体

type Tesla struct {

    Name string

}

// 实现接口的GetName()方法

func (t Tesla) GetName() string {

    t.Name = "test"

    return t.Name

}

// 实现接口的Run()方法

func (t Tesla) Run() {

    fmt.Printf("%s is running\n", t.Name)

}

func main() {

    var c Car

    var t Tesla = Tesla{"Tesla Model S"}

    c = t  // 上面是用指针*Tesla实现了接口的方法,这里要传地址

    fmt.Println(c.GetName())

    c.Run()

}

test

Tesla Model S is running

指针类型

package main

import "fmt"

// 定义接口

type Car interface {

    GetName() string

    Run()

}

// 定义结构体

type Tesla struct {

    Name string

}

// 实现接口的GetName()方法

func (t *Tesla) GetName() string {

    t.Name = "test"

    return t.Name

}

// 实现接口的Run()方法

func (t *Tesla) Run() {

    fmt.Printf("%s is running\n", t.Name)

}

func main() {

    var c Car

    var t Tesla = Tesla{"Tesla Model S"}

    c = &t  // 上面是用指针*Tesla实现了接口的方法,这里要传地址

    fmt.Println(c.GetName())

    c.Run()

}

test

test is running

结论

传递指针 可以 修改 传递的结构体的值,在其他方法中也生效。

原来一直写python,不了解指针有啥用。 用到这里明白了一点点。

©著作权归作者所有:来自51CTO博客作者295631788的原创作品,如需转载,请注明出处,否则将追究法律责任


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP