登录
首页 >  Golang >  Go问答

将自定义对象的列表转换为字符串列表

来源:stackoverflow

时间:2024-02-29 20:54:26 138浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《将自定义对象的列表转换为字符串列表》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我有多个结构,如下所示

type Person struct {
    first string
    last  string
    age   int
}

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

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


解决方案


这是最适合我的解决方案

type person struct {
    first string
    last  string
    age   int
}

type product struct {
    productid     int                
    name          string             
    description   string             
    price         float64           
}

func maptostringslice(slice interface{}, mapfunc func(interface{}) string) []string {
    s := reflect.valueof(slice)
    if s.kind() != reflect.slice {
        panic("maptostringslice() given a non-slice type")
    }
    ret := make([]string, s.len())

    for i:=0; i

由于 go 没有泛型,“任何类型”只能表示 interface{}。你可以有这样的东西:

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

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

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
}

到这里,我们也就讲完了《将自定义对象的列表转换为字符串列表》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>