• [GO]方法值和方法表达式


    package main
    
    import "fmt"
    
    type Person struct {
        name string
        sex byte
        age int
    }
    
    func (p Person) SetInfoValue ()  {
        fmt.Printf("SetInfoValue: %p, %v
    ", &p, p)
    }
    
    func (p *Person) SetInfoValuePointer ()  {
        fmt.Printf("SetInfoValuePointer: %p, %v
    ", p, p)
    }
    
    func main() {
        p := Person{"mike", 'm', 18}
        fmt.Printf("main: %p, %v
    ", &p, p)
        p.SetInfoValuePointer()//传统调用方式
        pFunc := p.SetInfoValuePointer //这个就是方法值,调用函数时,无需再传递接收者,隐藏了接收者
        pFunc() //等价于p.SetInfoPointer()
        
        vFunc := p.SetInfoValue  //这里完成内容拷贝的操作
        vFunc()
    }

    执行的结果为

    main: 0xc000044400, {mike 109 18}
    SetInfoValuePointer: 0xc000044400, &{mike 109 18}
    SetInfoValuePointer: 0xc000044400, &{mike 109 18}
    SetInfoValue: 0xc0000444a0, {mike 109 18}

     方法表达式

    package main
    
    import "fmt"
    
    type Person struct {
        name string
        sex byte
        age int
    }
    
    func (p Person) SetInfoValue ()  {
        fmt.Printf("SetInfoValue: %p, %v
    ", &p, p)
    }
    
    func (p *Person) SetInfoValuePointer ()  {
        fmt.Printf("SetInfoValuePointer: %p, %v
    ", p, p)
    }
    
    func main() {
        p := Person{"mike", 'm', 18}
      //方法值,f := p.setinfovaluepointer隐藏了接收者
      //方法表达式
    f :
    = (*Person).SetInfoValuePointer f(&p) //显示的把接收者传递过去 f2 := (Person).SetInfoValue f2(p) //显示的把接收者传递过去
    }

    执行结果

    SetInfoValuePointer: 0xc000044400, &{mike 109 18}
    SetInfoValue: 0xc000044460, {mike 109 18}

     本人表达方式不好就不总结 了,看了下面的区别相信每个人都有自己的理解 

    p := Person("mike", 'm', 18)
    pFunc := p.SetInfoValuePointer        方法值 
    pFunc ()
    ------------------------------------------
    f2 := (*Person).SetInfoValuePointer
    p := Person{"mike", 'm', 18}         方法表达式
    f2(&p)
  • 相关阅读:
    双网卡主机无法管理的故障
    hosts文件导致无法访问网站
    获取webshell的十种方法
    XSS跨站攻击
    Ubuntu 使用中的问题总结
    ubuntu linux 13.04更新
    mysql root密码重置
    防火墙工作模式简介
    SE 2014年4月30日
    SE 2014年4月29日
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9637547.html
Copyright © 2020-2023  润新知