2015-10-28 3 views
0

У меня есть тип обертки в моем коде:Как псевдонимы типов работают в Go?

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) 

Что происходит?

EDIT

Решение, которое я нашел связано с @ цзян-ярд ответ ниже: Изменение типа к вложению структуры

type Server struct { 
    *gin.Engine 
} 

и изменить "слепок"

s := Server{gin.Default()} 

ответ

1

В официальном документе существует два типа типа, статический тип и базовый тип. Server - ваш статический тип, а базовый тип - *gin.Engine. большинство мест в голанге просто используют статический тип, поэтому Server и *.gin.Engine - два типа. проверьте golang spec

ну это не поможет вам в вашей проблеме. в вашей ситуации вам нужно embedding struct of golang, которые помогут вам наследовать весь метод из одной структуры в другую.

+0

Спасибо. Это то, что я закончил делать. Мне просто нужно было узнать больше о типах go. – barksten

Смежные вопросы