Types 使用参数定义函数,该参数的类型在Go中具有嵌入类型

Types 使用参数定义函数,该参数的类型在Go中具有嵌入类型,types,go,Types,Go,这是一个全新的尝试,所以可能会走错方向 假设我有一种类型: type Message struct { MessageID string typeID string } 我创建了另一种嵌入消息的类型: type TextMessage struct { Message Text string } func sendMessage(???===>msg Message<===???) error 然后我想创建一个函数,它可以采用任

这是一个全新的尝试,所以可能会走错方向

假设我有一种类型:

type Message struct {
    MessageID string
    typeID    string
}
我创建了另一种嵌入消息的类型:

type TextMessage struct {
    Message
    Text       string
}
func sendMessage(???===>msg Message<===???) error
然后我想创建一个函数,它可以采用任何类型,只要它嵌入了消息:

type TextMessage struct {
    Message
    Text       string
}
func sendMessage(???===>msg Message<===???) error

func sendMessage(???===>msg Message我会走接口路线:

type TypeIdentifier interface {
    TypeId() string
}

func sendMessage(t TypeIdentifier) {
    id := t.TypeId()
    // etc..
}

你唯一的另一个选择是在函数中键入assert一个
接口{}
。这将很快成为一个失控的博洛尼亚碗。

接口-当然。你的另一个选择是接受一个接口并在函数中键入assert。。但是如果有更安全的方法,那就太麻烦了。…通过“接受接口”上面..我的意思是
接口{}
。好吧,我试过之后还不错。我想确保我没有遗漏一些明显的模态。做出一个答案,这样我就可以接受了?@4of4:你不需要将
Golang
的每个实例都更改为
go
。这并不重要,而且两者都是可以接受的名称(如TagWiki摘录所示).一开始,函数似乎有些过分。但一旦我过了这一关,它就会很好地运行,并允许typeID像我更喜欢的那样远离视线。我发现自己越来越多地为此目的定义接口,代码(尽管更多)变得更加精调和干净。每件事都有一些特定的小用途,它会流动伊利。