登录
首页 >  Golang >  Go问答

接口和指针/值接收器

来源:stackoverflow

时间:2024-03-01 16:42:21 255浏览 收藏

从现在开始,努力学习吧!本文《接口和指针/值接收器》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

如果我使用指针接收器,下面的代码在 a=v 处有异常,因为它是在指针 v 上定义的,这是有道理的。

package main
import (
    "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=va=&v 都有效,背后的原因是什么?


解决方案


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

以上就是《接口和指针/值接收器》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>