Go语言的方法值和方法表达式

栏目: Go · 发布时间: 7年前

内容简介:结果如下:
// code_20_struct_method_expression project main.go
package main

import (
    "fmt"
)

//方法表达式:也即“方法对象赋值给变量”
//两种使用方式:
//1)隐式调用, struct实例获取方法对象---->方法值

//2)显示调用, struct类型获取方法对象, 须要传递struct实例对象作为参数。---->方法表达式

type Person struct {
    name string
    sex  byte
    age  int
}

func (p *Person) PrintInfoPointer() {
    fmt.Printf("%p, %v\n", p, p)
}

func (p Person) PrintInfoValue() {
    fmt.Printf("%p, %v\n", &p, p)
}

func main() {
    //直接调用
    p := Person{"ck_god", 'm', 18}
    p.PrintInfoPointer()
    fmt.Println("---------------\n")

    //方法表达式
    pFunc1 := (*Person).PrintInfoPointer
    pFunc1(&p)

    pFunc2 := Person.PrintInfoValue
    pFunc2(p)
    fmt.Println("---------------\n")

    //方法值
    pFunc3 := p.PrintInfoPointer
    pFunc3()

    pFunc4 := p.PrintInfoValue
    pFunc4()
    fmt.Println("---------------\n")

    //备注:pFunc2和pFunc4的内存地址是不一样的;pFunc1和pFunc3的内存地址是一致的
}

结果如下:

0xc000050400, &{ck_god 109 18}
---------------

0xc000050400, &{ck_god 109 18}
0xc000050480, {ck_god 109 18}
---------------

0xc000050400, &{ck_god 109 18}
0xc0000504e0, {ck_god 109 18}
---------------

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程人生

编程人生

Peter Seibel / 图灵俱乐部 / 人民邮电出版社 / 2011-1-1 / 79.00元

界顶尖的程序员是怎么走上编程道路的? 他们的编程工作创造和改变了人类历史,在这一过程中都有哪些经验和教训? 他们对计算机软件行业的过去、现在和未来有什么独到的看法和见解? 他们对培养、发现、选拔、面试优秀的程序员有什么建议? 放下手头的工作,听听这些软件先驱们的故事和建议,眼界可以更开阔,思路可以更清晰,方向可以更明确,人生可以更精彩。 作者Peter Seibel采......一起来看看 《编程人生》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换