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

用户名

我有一个结构说

type person struct{
    name string
    phone string
    address string
}

我想将其转换为此(修改电话和地址),我只有对象而不是结构。

type person2 struct {
    name  string
    phone []struct {
        value string
    }

    address []struct {
        value string
    }
}

如何基于已有的结构创建新的结构?我只想转换选定的字段。

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

icza

前言:如果只有类型person而没有类型person2,则必须首先编写person2Go是静态类型的语言,您不能只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.phone使用了一个匿名结构片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]}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用反射来修改对象的结构

来自分类Dev

使用反射来修改对象的结构

来自分类Dev

如何在SWIFT 5中更改对象结构的值

来自分类Dev

在JS中更改对象的结构

来自分类Dev

Javascript递归函数更改对象结构

来自分类Dev

更改对象基于结构的条件

来自分类Dev

向现有集合添加或修改对象时,ng-repeat内部指令不会更新

来自分类Dev

如何修改 JSON 结构

来自分类Dev

根据现有结构的定义定义结构

来自分类Dev

如何在无法启动和损坏的 linux 系统上识别现有的分区结构

来自分类Dev

没有修改对象的ConcurrentModificationException

来自分类Dev

没有修改对象的ConcurrentModificationException

来自分类Dev

Rust的结构如何保存和使用对象?

来自分类Dev

如何实现修改“ JPA实体-对象结构”的参数变量?

来自分类Dev

如何修改对象中的键值?

来自分类Dev

如何使用for循环修改对象本身?

来自分类Dev

如何修改对象内的函数输出

来自分类Dev

如何将现有对象修改为新对象

来自分类Dev

如何从另一个对象修改对象的私有ArrayList属性(Java)

来自分类Dev

如何从现有数据库结构生成模型

来自分类Dev

如何从现有模式在Oracle中编写表结构?

来自分类Dev

修改对象

来自分类Dev

修改现有功能以处理尺寸/结构不同的阵列

来自分类Dev

从文件修改json对象并保留结构

来自分类Dev

C ++优先队列以查找和修改对象

来自分类Dev

从现有结构数组中查找并返回指向结构的指针

来自分类Dev

游戏对象和代码结构

来自分类Dev

带有函子修改对象的const函数

来自分类Dev

具有OfType的foreach不会修改对象属性