go - 类型别名在 Go 中如何工作?

标签 go types

<分区>

我的代码中有一个类型包装器:

package my_package
import "github.com/gin-gonic/gin"
type Server *gin.Engine

在我的包中使用它效果很好,例如:

func NewServer() Server {
    s:= Server(gin.Default())
    // I can call *gin.Engine functions on my s here without problems
    return s
}

在我的测试套件(位于另一个包中)中,我导入我的包并获取服务器类型。但是,当我尝试调用一些“继承的”函数时,它不起作用。

server_test.go:68: server.ServeHTTP undefined (type my_package.Server has no field or method ServeHTTP)

这是怎么回事?

编辑

我找到的解决方案与下面@jiang-yd 的回答有关: 将类型更改为嵌入结构

type Server struct {
    *gin.Engine
}

并改变“类型转换”

s := Server{gin.Default()}

最佳答案

在官方文档中,有两种类型,静态类型和底层类型。 Server 是您的静态类型,*gin.Engine 是基础类型。 golang中大部分地方都是静态类型,所以Server*.gin.Engine是两种类型。检查 golang spec

好吧,这对您的问题没有帮助。在你的情况下,你需要 embedding golang 的结构,它可以帮助您将所有方法从一个结构继承到另一个结构。

关于go - 类型别名在 Go 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403041/

相关文章:

go - 通过另一个结构字段的类型声明结构字段的类型

java - 使用 Golang 中的类路径和库路径运行 Java 命令

GO语言如何改变 map 指针内部对象的值

reactjs - 如何修复 Typescript 中的 "Type ' { }' is missing in the following properties..."错误?

c# - "Object Expression"是否像 F# 一样存在于 C# 中?

scala - 执行 lambda 演算每条边的独特可能性的代码

go - 解析 RSA 公钥时出错

mongodb - golang : *mongo.数据库没有字段或方法CreateCollection

tcp - net.TCPConn 允许在 FIN 数据包后写入

javascript - Typescript TS2339 类型上不存在属性 - 类声明