栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当参数不是go中的指针时,使用反射通过引用更新值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当参数不是go中的指针时,使用反射通过引用更新值

不,如果不传递指向切片的指针,则不可能在函数中附加切片。这与反射无关,但与变量如何传递到函数有关。这是相同的代码,但修改为不使用反射:

package mainimport (        "log")type Person struct {        Name string}func AddWithPtr(slicep interface{}) {        sp := slicep.(*[]Person)        // This modifies p1 itself, since *sp IS p1        *sp = append(*sp, Person{"Sam"})}func Add(slice interface{}) {        // s is now a copy of p2        s := slice.([]Person)        sp := &s        // This modifies a copy of p2 (i.e. s), not p2 itself        *sp = append(*sp, Person{"Sam"})}func main() {        p1 := []Person{}        // This passes a reference to p1        AddWithPtr(&p1)        log.Println("Add with pointer:   ", p1)        p2 := []Person{}        // This passes a copy of p2        Add(p2)        log.Println("Add without pointer:", p2)}

(上面,当它说“切片”的复制时,这并不意味着基础数据的副本-只是切片)

传递切片时,该函数有效地获得一个新切片,该切片引用与原始数据相同的数据。在函数中附加到切片将增加新切片的长度,但不会更改传入的原始切片的长度。这就是为什么原始切片保持不变的原因。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号