美文网首页Golang
什么是Go的对象方法?Go method

什么是Go的对象方法?Go method

作者: 一直安静bg | 来源:发表于2019-01-25 10:31 被阅读14次

go中对象方法一般指为新类型或者,结构体定义的函数。
func (T type)MenthoName(params type) type
对象方法的调用其实相当于普通函数调用的语法糖,类似于下面的
func MenthoName(T type)
也就是把type类型的实例T作为参数,传递给了函数MenthoName。这时参数T称为receiver。

(this type)Mehods()

通过实例t调用Value时,以及通过指针p调用Value时,receiver是t和*p,即复制的是m实例本身,返回的都是m实例的副本。因此receiver是t实例的副本,他们地址不同。

(this *type)Methods()

通过实例t调用Pointer时,以及通过指针p调用Pointer时,复制的是都是&m和p,即复制的都是指向m的指针,返回的都是m实例的地址


上面那段话可能比较难以理解。因此我写了两段代码来做实验

type example struct {
    name string
    age int
}

func (this example)Value(){
    fmt.Println(this)
    fmt.Println(&this)
    fmt.Printf("this的存放内存地址=%p\n",&this)

}

func main()  {
    a := example{"liusab",12}
    p := &a
    
    a.Value()
    //-----------
    p.Value()
}

打印出来的结果如下

{liusab 12}
&{liusab 12}
this的存放内存地址=0xc00008e020

{liusab 12}
&{liusab 12}
this的存放内存地址=0xc00008e080

type example struct {
    name string
    age int
}

func (this *example)Value(){
    fmt.Println(this)
    fmt.Printf("this的存放内存地址=%p\n",this)
}

func main()  {
    a := example{"liusab",12}
    p := &a
    a.Value()
    p.Value()
}

上面的这段代码和之前的主要区别是。Value方法传入的是实例的指针,结果如下

&{liusab 12}
this的存放内存地址=0xc00000a080
&{liusab 12}
this的存放内存地址=0xc00000a080

_ 如果想在方法中修改对象的值只能用pointer receiver,对象较大时避免拷贝也要用pointer receiver。_

相关文章

  • 什么是Go的对象方法?Go method

    go中对象方法一般指为新类型或者,结构体定义的函数。func (T type)MenthoName(params ...

  • golang faq 精选

    go 是面向对象语言吗? 是也不是说是 因为 go 有 类型和方法 支持面向对象的方式编程。说不是 因为go没有...

  • go基础编程day6方法method以及接口interface

    方法method go中没有class,但依旧有method 通过显示说明receiver来实现与某个类型的组合 ...

  • 十一.Go方法method

    方法method Go中虽没有class,但依然有method 通过显示说明receiver来实现与某个类型的组合...

  • # Go 方法编程与面向对象

    上一节,我们看到 Go 函数特性及函数式编程风格。这一节,将会主要展示Go的方法特性及面向对象编程。什么是方法?当...

  • go语言method有没有继承顺序,实例探讨

    计算机编程语言,尤其是面向对象的编程语言,虽然语法不同,但其原理大都是相通的!那么go语言的method方法的继承...

  • 《日子》golang-方法method

    方法method -Go中虽没有class,但依旧有method-通过显示说明receiver来实现与某个类型的组...

  • go value receiver, pointer recei

    go 语言规范里定义的 method sets 规则 Values可调用的方法(methods receivers...

  • 21. Go 协程

    21. Go 协程 Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是...

  • go method

    函数和方法 关键字func和函数名之间的参数被称作接收者,将函数与接收者的类型绑在一起。如果一个函数有接收者,这个...

网友评论

    本文标题:什么是Go的对象方法?Go method

    本文链接:https://www.haomeiwen.com/subject/wdcmjqtx.html