doumaoao0182 2015-10-28 22:58
浏览 9
已采纳

类型别名在Go中如何工作? [重复]

This question already has an answer here:

I have a type wrapper in my code:

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

It works perfectly fine to use it within my package like:

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

In my test suite (which resides in another package) I import my package and get the Server type. However, when I try to call some "inherited" functions on it doesn't work.

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

What's going on?

EDIT

The solution I found is related to @jiang-yd answer below: Change the type to a embedding struct

type Server struct {
    *gin.Engine
}

and change the "cast"

s := Server{gin.Default()}
</div>
  • 写回答

1条回答 默认 最新

  • duanlei8119 2015-10-29 05:18
    关注

    in official document, there are two kinds of type, static type and underlying type. Server is your static type and *gin.Engine is the underlying type. most place in golang just use static type, so Server and *.gin.Engine are two types. check the golang spec

    well it not help you in your problem. in your situation, you need embedding struct of golang, which help you inherit all method from one struct to another.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 使用Java milo连接Kepserver服务端报错?
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了
  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成
  • ¥15 HC32L176调试了一个通过TIMER5+DMA驱动WS2812B
  • ¥15 cocos的js代码调用wx.createUseInfoButton问题!
  • ¥15 关于自相关函数法和周期图法实现对随机信号的功率谱估计的matlab程序运行的问题,请各位专家解答!