Golang-方法知识点

与函数的区别

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

package main

import "fmt"

type Data struct {
    x int
}

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

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

func main() {
    d := Data{}
    p := &d
    fmt.Printf("Data: %p\n", 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  
posted @ 2021-07-10 17:26  三寸月光  阅读(35)  评论(0编辑  收藏  举报