ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Golang 表达式 :根据调用者不同,方法分为两种表现形式: ~~~ instance.method(args...) ---> <type>.func(instance, args...) ~~~ 前者称为 method value,后者 method expression。 两者都可像普通函数那样赋值和传参,区别在于 method value 绑定实例(method value 会复制receiver),而 method expression 则须显式传参 ~~~ type User struct { id int name string } func (self *User) Test() { fmt.Printf("%p, %v\n", self, self) } func main() { u := User{1, "Tom"} u.Test() mValue := u.Test mValue() // 隐式传递 receiver mExpression := (*User).Test mExpression(&u) // 显式传递 receiver } ~~~ 在汇编层面,method value 和闭包的实现方式相同,实际返回 FuncVal 类型对象。 ~~~ FuncVal { method_address, receiver_copy } ~~~