Golang-方法知识点

与普通方法的区别

1、方法执行时的参数类型取决于方法定义时的类型,与调用方的类型无关。即定义时参数类型是指针类型,那么即时调用方不是指针类型,也会传递指针类型的参数。

package main

import "fmt"

type Data struct {
    x int
}

func (self Data) ValueTest() { // func ValueTest(self Data);
    fmt.Printf("Value: %p
", &self)
}

func (self *Data) PointerTest() { // func PointerTest(self *Data);
    fmt.Printf("Pointer: %p
", self)
}

func main() {
    d := Data{}
    p := &d
    fmt.Printf("Data: %p
", p)

    d.ValueTest()   // ValueTest(d)
    d.PointerTest() // PointerTest(&d)

    p.ValueTest()   // ValueTest(*p)
    p.PointerTest() // PointerTest(p)
} 
    //结果
    Data: 0xc42007c008
    Value: 0xc42007c018
    Pointer: 0xc42007c008
    Value: 0xc42007c020
    Pointer: 0xc42007c008  
原文地址:https://www.cnblogs.com/qwfy-y/p/14994285.html