如何从现有结构修改对象和结构?

我有一个结构说


type person struct{

    name string

    phone string

    address string

}

我想把它转换成这个(修改电话和地址)我只有对象而不是结构。


type person2 struct {

    name  string

    phone []struct {

        value string

    }


    address []struct {

        value string

    }

}

如何根据我拥有的结构创建新结构?我只想转换选定的字段。


我研究了反射,但不知道从哪里开始/如何使用它。


一只萌萌小番薯
浏览 219回答 1
1回答

ibeautiful

前言:如果你只有类型person而没有类型person2,你要先写person2。Go 是静态类型语言,你不能只person2在运行时创建。您可以person2手动编写或go generate通过自己编写生成器代码来使用,但不会更简单。您也可以使用类似的东西map[string]interface{}来模拟动态结构,但这不会更友好也不会更快。更不用说你必须使用类型断言,因为值类型是interface{}......要创建的值person2从一个值person,你不需要思考,你可以简单的手工代码吧:func transform(p person) person2 {    return person2{        p.name,        []struct{ value string }{{p.phone}},        []struct{ value string }{{p.address}},    }}请注意,这可能看起来有点奇怪,这是因为您为person2.phoneand使用了匿名结构的切片person2.address,并且要使用复合文字初始化匿名结构,必须重复匿名结构定义。测试它:p := person{"Bob", "1234", "New York"}fmt.Println(p)p2 := transform(p)fmt.Println(p2)输出(在Go Playground上试试):{Bob 1234 New York}{Bob [{1234}] [{New York}]}笔记:请注意,您person2不必要地复杂。它可以像这样简单:type person2 struct {    name      string    phones    []string    addresses []string}然后转换是单行的:func transform(p person) person2 {    return person2{p.name, []string{p.phone}, []string{p.address}}}输出(在Go Playground上试试):{Bob 1234 New York}{Bob [1234] [New York]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go