为了账号安全,请及时绑定邮箱和手机立即绑定

接口与指针/值接收器

接口与指针/值接收器

Go
30秒到达战场 2022-07-04 16:58:58
如果我使用指针接收器,以下代码有异常,a=v因为它是在指针 v 上定义的,这是有道理的。package mainimport (    "fmt"    "math")type Abser interface {    Abs(x int) float64 //all types needs to implement this interface}type Vertex struct {    X float64}func (v *Vertex) Abs(x int) float64 {    return math.Abs(float64(x))}func main() {    /*define the interface and assign to it*/    var a Abser    v := Vertex{-3}    a = &v    fmt.Println(a.Abs(-3))    a = v    fmt.Println(a.Abs(-3))}但是,如果我将 Abs 的功能更改为func (v Vertex) Abs(x int) float64 {    return math.Abs(float64(x))}两者都a=v有效a=&v,这背后的原因是什么?
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

像这样理解它,因为我没有合适的资源来引用答案;当接口在值上实现时,Go 很乐意将指针结构的副本作为值传递,您可以通过打印变量的地址来检查这一点;这是因为这个操作被认为是安全的并且不能改变原始值;



查看完整回答
反对 回复 2022-07-04
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信