zoukankan      html  css  js  c++  java
  • [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)
  • 相关阅读:
    openldap
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P1567 统计天数
    Java实现 洛谷 P1567 统计天数
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9637547.html
Copyright © 2011-2022 走看看