登录
首页 >  Golang >  Go问答

Go 中不能使用指向接口类型的指针吗?

来源:stackoverflow

时间:2024-04-23 08:24:34 207浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Go 中不能使用指向接口类型的指针吗?》,聊聊,我们一起来看看吧!

问题内容

我用di编写的代码如下。有2个代码。一个用于 use case,另一个是 controller,依赖于该 use case

  • 用例
package usecase

import "fmt"

type interface interface {
    echo() string
}

type usecase struct {}

func (u *usecase) echo() string {
    return fmt.sprintf("this is usecase!")
}
  • 控制器
package controller

import (
    "my-project/usecase"
)

type controller struct {
    usecase *usecase.interface
}

func newcontroller(usecase *usecase.interface) *controller {
    return &controller{
        usecase: usecase,
    }
}

func (s *controller) hello() {
    result := s.usecase.echo()
    println(result)
}

但是,在控制器中显示了以下错误消息。

未解析的参考“echo”

控制器结构体controller中字段usecase的类型为*usecase.interface。 (指针) 原因是实现该接口的usecaseecho()方法是一个指针接收者。

我不能像下面这样使用指向接口的指针?

type Controller struct {
    usecase *usecase.Interface
}

解决方案


将代码更改为:

type controller struct {
    usecase usecase.interface
}

func newcontroller(usecase usecase.interface) *controller {
    return &controller{
        usecase: usecase,
    }
}

func (s *controller) hello() {
    result := s.usecase.echo()
    println(result)
}

几乎没有任何理由使用指向接口的指针。唯一需要指向接口的指针的时候是需要设置接口值(该值作为函数参数传递)时。即:

var x SomeInterface
SetX(&x)

今天关于《Go 中不能使用指向接口类型的指针吗?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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