gpt4 book ai didi

Golang 将列表对象转换为字符串

转载 作者:数据小太阳 更新时间:2023-10-29 03:26:40 51 4
gpt4 key购买 nike

我有两个结构:

type A struct {
BankCode string `json:"bankCode"`
BankName string `json:"bankName"`
}

和:

type B struct {
A
extra string `json:" extra"`
}

还有两片:
listsA []AlistsB []B我想从 listAlistB 获取 bankCodesbankcodes 只包含bankcodes。它是一个[]string

使用两个函数会很简单。

func getBankCodes(data []A) []string {
res := make([]string, len(data))
for i := 0; i < len(data); i++ {
res[i] = data[i].BankCode
}
return res
}

func getBankCodes(data []B) []string {
res := make([]string, len(data))
for i := 0; i < len(data); i++ {
res[i] = data[i].BankCode
}
return res
}

如何使用一个常用函数?

最佳答案

好吧,干净的解决方案是使用接口(interface),因为 go 不支持经典继承,所以像 []parentclass 这样的东西是行不通的。然而,接口(interface)只能描述函数而不是公共(public)字段,因此您必须(本质上)实现一个 Getter。

// GetBankCoder provides a function that gives the BankCode
type GetBankCoder interface {
getBankCode() string
}

// implement GetBankCoder for A (and indirectly for B)
func (a A) getBankCode() string {
return a.BankCode
}

并使您的 getBankCodes 在该接口(interface)类型上工作,注意函数的参数以及循环内的语句:

func getBankCodes(data []GetBankCoder) []string {  // <-- changed
res := make([]string, len(data))
for i := 0; i < len(data); i++ {
res[i] = data[i].getBankCode() // <-- changed
}
return res
}

还有其他解决方案,其中函数参数是 interface{} 类型,然后使用反射来确保您实际上可以执行 .BankCode,但我不这样做就像那些一样,因为它们也没有增加更多的清晰度。

... 但是,如果不先将它放入 []GetBankCoder var 中,然后再将其提供给函数,我就无法让 golang playground 使其正常工作。

banks := make([]GetBankCoder, 0)
banks = append(banks, A{ BankCode: "ABC", BankName: "ABC Bank"})
getBankCodes(banks)

关于Golang 将列表对象转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487543/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com