登录
首页 >  Golang >  Go问答

Ref“不是类型” - 将类型存储在结构中

来源:Golang技术栈

时间:2023-04-14 19:28:54 143浏览 收藏

大家好,我们又见面了啊~本文《Ref“不是类型” - 将类型存储在结构中》的内容中将会涉及到golang等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我有一个像这样的文件:

package foo
type Handler struct {}

然后在另一个文件中,我有:

import (
   "handlers/foo"
   "handlers/bar"
   "handlers/baz"
)

type AllHandlers struct {
    Foo foo.Handler
    Bar bar.Handler
    Baz baz.Handler
}

然后在另一个文件中我有:

all := routes.AllHandlers{}
foo := all.Foo{}
bar := all.Bar{}
baz := all.Baz{}

但它给了我这个错误:

Foo 不是类型

我可能做错了什么。我想要做的是将所有处理程序存储在 AllHandlers 结构中,但不知道该怎么做。

我相信这个问题可以这样简化:

func (h HuruInjection) GetInjections() struct{} {
    return struct {
        Foo foo.Handler
        Bar  bar.Handler
        Baz baz.Handler
    }
}

以上将无法编译,主要是因为您返回的是类型而不是值,据我所知 - 例如,一个类而不是该类的实例。我怎样才能让它编译?

见这个例子:https ://gist.github.com/ORESoftware/894438aee1d16aa9b2cb12ba25df274e

正确答案

我解决了这个问题,诀窍是使用正确的语法。而不是这样做:

import (
   "handlers/foo"
   "handlers/bar"
   "handlers/baz"
)

type AllHandlers struct {
    Foo foo.Handler
    Bar bar.Handler
    Baz baz.Handler
}

我这样做了:

import (
   "handlers/foo"
   "handlers/bar"
   "handlers/baz"
)


type Foo = foo.Handler
type Bar = bar.Handler
type Baz = baz.Handler

然后我可以导入它,并使用 Foo、Bar、Baz 作为类型。所以我认为你不能对结构中的类型进行分组,但你可以使用上述语法导入/导出类型。

今天关于《Ref“不是类型” - 将类型存储在结构中》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

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