我想从我的api发送一个响应,所有响应都有一个统一的结构
type formattedResponse struct {
Status string
Data []dataStruct
}
type dataStruct struct {
Name string
Phone string
}
我希望数据能够成为不同的结构,而不仅仅是单个数据结构。我可以说我没有正确使用这种模式。完成这种事情的正确方法是什么?有没有办法让结构字段能够成为具有相同键的任何类型?
@始祖鸟你可以做的是将返回的数据属性定义为接口。请参见下面的示例,
type Data interface {
LogData() string
}
type formattedResponse struct {
Status string
Data []Data
}
type userData struct {
Name string
Phone string
}
func (u userData) LogData() string {
fmt.Sprintln("This is some shared function")
}
理想情况下,您会想出一个比LogData
更有用的函数,它可以被所有返回的类型共享,但希望您能理解这个想法。只要另一个结构在接口中具有相同的函数,它就会实现它,因此作为返回切片的一部分感到满意
我希望这有道理!
我想这就是你需要的 - 你想对不同的字段类型使用相同的“基”结构:
package main
type formattedResponse struct {
Status string
Data interface{}
}
type dataStruct1 struct {
Name string
Phone string
}
type dataStruct2 struct {
Office string
Location string
}
func main() {
// using formattedResponse with dataStruct1
fr1 := formattedResponse{
Status: "ok",
}
if fr1.Data == nil {
fr1.Data = make([]dataStruct1, 0)
}
fr1.Data = append(fr1.Data.([]dataStruct1), dataStruct1{Name: "n1", Phone: "12345"})
// using formattedResponse with dataStruct2
fr2 := formattedResponse{
Status: "ok",
}
if fr2.Data == nil {
fr2.Data = make([]dataStruct2, 0)
}
fr2.Data = append(fr2.Data.([]dataStruct2), dataStruct2{Office: "o2", Location: "Paris"})
}
问题内容: 我是Go语言的初学者。我可能认为多年以来其他语言都太传统了,但这就是我想在Go中做的事情。假设以下用例 我有接口I。此接口具有功能start()和stop() 有许多实现接口的结构。结构A,结构B,结构C 当应用程序启动时,我想在结构A,B和C上调用start() 同样,当应用程序终止时,我想在A,B,C结构上调用stop()。 我不想在代码中的任何地方硬编码结构A,B和C来调用启动/
问题内容: 当我运行下面的代码片段时,它会引发错误 a.test未定义(类型interface {}是没有方法的接口) 看来类型开关没有生效。 如果我将其更改为 没关系 问题答案: 这是规范(强调我的)定义的正常行为: TypeSwitchGuard可以包含一个简短的变量声明。使用该格式时,将在每个子句中隐式块的开头声明变量。 在大小写正好列出一种类型的子句中,变量具有该类型。 否则,变量具有Ty
typescript 中一个字段是多个类型中的一种,这个字段的类型改如何定义呢?使用联合类型报错; payload 可能是上面三种的一种,这个改如何定义呢?上面写法报错
我有一个带参数的函数。此参数必须是两种接口之一。所以我这样写: 但我收到了以下错误。 以下是接口: 因特拉加: 内溶: 我不知道有什么问题。假设函数的参数可以有两种不同的结构。我不知道为什么Tslink会标记它。 提前感谢您的帮助。
问题内容: 我有一个比较大的结构,直到现在我仍在使用结构文字语法实例化,例如: 我刚刚在结构中添加了一个未导出的字段,现在Go在抱怨:。 即使结构上现在有未导出的字段,有什么办法可以继续使用文字语法? 问题答案: 如果您在文字中使用 键值 ,则只能使用复合文字来创建在另一个包中定义的结构类型的 值 ,因为这样就不需要为所有字段提供初始值,因此可以省去未导出的字段(仅声明包可以设置/更改)。 如果在
问题内容: 我想反序列化JSON(使用Jackson 1.9.11和RestTemplate 1.0.1),其中一个字段可能具有更多类型含义,例如: 要么 一个或另一种情况对于一个特定类型的设置器(String od custom Response类)都可以正常工作,但是当我将实体bean重写的设置器放入能够处理这两种情况时,将引发异常: 我当时在考虑三种解决方案,但没有任何一种可行: 仅使用St