gpt4 book ai didi

go - 将自定义类型的 slice 转换为字符串 slice

转载 作者:行者123 更新时间:2023-12-02 17:11:34 25 4
gpt4 key购买 nike

我有多个结构,如下所示

type Person struct {
first string
last string
age int
}

type Product struct {
ProductID int
Name string
Description string
Price float64
}

我想要一个函数,该函数将任意类型的 slice 作为第一个参数,将函数作为第二个参数,它将用于调用 slice 的每个元素来构造字符串 slice ,并将返回该字符串 slice 。类似 Typescript/scala 中的 map() 或 C# 中的 select()

最佳答案

由于 Go 没有泛型,因此“任何类型”只能表示接口(interface){}。你可以有这样的东西:

func ToStringSlice(arr []interface{}, convert func(interface{}) string) []string {
ret := []string{}
for _, elem := range arr {
ret = append(ret, convert(elem))
}
return ret
}

然后你基本上可以注入(inject)任何你想要的转换函数。例如

fmt.Println(ToStringSlice([]interface{}{1, 2, "foo", "bar"},
func(x interface{}) string {
return fmt.Sprint(x)
}))

由于字符串转换可能会出错,我还添加了错误检查:

// Define the function with an error return.
type Stringifier func(interface{}) (string, error)

func ToStringSlice(arr []interface{}, convert Stringifier) ([]string, error) {
ret := []string{}
for _, elem := range arr {
if s, e := convert(elem); e != nil {
return nil, e
} else {
ret = append(ret, s)
}

}
return ret, nil
}

关于go - 将自定义类型的 slice 转换为字符串 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58988672/

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