在Go语言中,非接口的任意类型T都能够调用其指针类型T的方法,反之亦然。这是因为Go语言在方法调用时会自动处理指针和值的转换,无论是通过T的值还是T的指针,都可以方便地调用对方的方法。这种特性简化了代码的编写,减少了手动取址和解引用的需求。

package main

import "fmt"

type Human struct {
}

func (h *Human) sayHello() {
	fmt.Println("sayHello")
}
func (h Human) sayHello2() {
	fmt.Println("sayHello2")
}

func main() {
	var h Human = Human{}
	h.sayHello()
	h.sayHello2()

	h2 := new(Human)
	h2.sayHello()
	h2.sayHello2()
}