类型别名如何在Go中运行?

时间:2015-10-28 22:58:22

标签: 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()}

1 个答案:

答案 0 :(得分:1)

在官方文档中,有两种类型,静态类型和底层类型。 Server是您的静态类型,*gin.Engine是基础类型。 golang中的大多数地方只使用静态类型,因此Server*.gin.Engine是两种类型。检查golang spec

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