Go之对象拷贝

这里interface{}就相当于c#,java中的object,

        boy := util.Boy{util.Person{"Eric", 19, "boy"}, "1"}
	

	girl := util.Girl{util.Person{"Jessica", 19, "girl"}, "2"}    

 所以可以这样做 

	var boyClone interface{} = boy
	fmt.Println(boy)
	fmt.Printf("%p", &boy)
	fmt.Println(boyClone)
	fmt.Printf("%p", &boyClone)

  输出结果如下

看上去像是深拷贝~地址都不一样了

{{Eric 19 boy} 1}
0xc082006240
{{Eric 19 boy} 1}
0xc08200a340

如果实现浅拷贝可以用指针~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想在数组中删除匹配名称的对象,可以这样做: 1. 使用一个临时切片来存储所有不匹配名称的对象,最后将这个临时切片赋值回原来的数组。 2. 使用内置的 `copy` 函数来拷贝不匹配名称的对象到一个新的数组中,最后将新数组赋值回原来的数组。 下面是一个示例: ``` package main import "fmt" type Object struct { Name string } func main() { objects := []Object{ {Name: "object1"}, {Name: "object2"}, {Name: "object3"}, {Name: "object4"}, {Name: "object5"}, } objects = removeObjectByName(objects, "object3") fmt.Println(objects) } func removeObjectByName(objects []Object, name string) []Object { // 方法1: 使用临时切片 var newObjects []Object for _, obj := range objects { if obj.Name != name { newObjects = append(newObjects, obj) } } return newObjects // 方法2: 使用内置的 copy 函数 // var i int // for _, obj := range objects { // if obj.Name != name { // objects[i] = obj // i++ // } // } // return objects[:i] } ``` ### 回答2: 在Golang中,要有效率地删除数组中的匹配名称的对象,可以按照以下方式进行: 1. 使用一个循环遍历数组的每一个元素。 2. 在循环中,可以使用一个条件语句来判断当前元素是否匹配名称。 3. 如果匹配,则将当前元素从数组中删除。为了实现这一点,可以使用append函数与切片操作。具体地,可以使用切片操作[:i]和[i+1:]来将前后两部分数组重新连接起来,从而删除当前元素。 4. 需要注意的是,每次删除元素后,数组的长度会发生改变,因此需要在删除元素之后将下标i减一来避免漏掉下一个元素。 5. 循环结束后,数组中所有匹配名称的对象都已被删除。 下面是一段示例代码: ```go func deleteObjectByName(objects []Object, name string) []Object { for i := 0; i < len(objects); i++ { if objects[i].Name == name { objects = append(objects[:i], objects[i+1:]...) i-- // 避免漏掉下一个元素 } } return objects } ``` 假设存在一个名为Object的结构体,其中包含一个Name字段,表示对象的名称。函数`deleteObjectByName`接受一个包含Object类型元素的数组以及一个要匹配的名称作为输入,返回删除了所有匹配名称的对象后的数组。 需要注意的是,此方法在数组元素很多的情况下效率可能会比较低,因为每次删除元素都需要重新创建一个新的数组,并复制剩余的元素。为了进一步优化,可以考虑使用链表或其他数据结构来存储对象,以便更高效地删除元素。 ### 回答3: 在Golang中,要有效且高效地删除数组中匹配名称的对象,可以按照以下步骤进行操作: 1. 创建一个新的空数组,用于存放不匹配名称的对象。 2. 遍历原数组,对每个对象进行判断。 3. 如果对象的名称与匹配条件不符,则将该对象添加到新数组中。 4. 遍历完成后,新数组中仅包含不匹配名称的对象。 5. 如果需要,可以将新数组赋值给原数组,从而实现删除操作。 下面是一个示例代码: ```go func deleteMatchedObjects(objects []Object, name string) []Object { var newObjects []Object for _, obj := range objects { if obj.Name != name { newObjects = append(newObjects, obj) } } return newObjects } ``` 在上面的代码中,我们传入一个包含对象的数组和需要匹配的名称参数。然后,使用一个循环遍历原数组中的每个对象。如果对象的名称与匹配条件不符,则将该对象添加到新数组中。最后,返回新数组作为结果。 这种方法的时间复杂度是O(n),其中n是原数组的长度。它是一种高效的方式来删除数组中匹配名称的对象

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值