Go语言中文网 为您找到相关结果 11

golang slice分割和append copy还是引用

1. slice1:= slice[0:2] 引用,非复制,所以任何对slice1或slice的修改都会影响对方 data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} data1 := data[0:2] data1[0] = 99 fmt.Println(data1) fmt.Println(data) [99 2] [99 2 3 4 5 6 7 8 9 0] 2.append append 比较特殊 声明: 源slice= src 添加slice = app 结果slice=tar 1)如果len(src) + len(app) <= cap(src) src和tar 是指向同一数据引用 ,即修改src或tar,会影响对方 2)否则 tar 是copy...阅读全文

博文 2014-10-04 19:27:07 咖啡伴侣

Go slice的容量和长度

package main import ( "fmt" ) func main() { a := []int{1,2,3,4} fmt.Println("a:",len(a), cap(a), a) b := [10]int{1,2,3,4} fmt.Println("b:",len(b), cap(b), b) c := make([]int, 4, 10) fmt.Println("c:",len(c), cap(c),c) d := b[:5] fmt.Println("d:",len(d), cap(d),d) e := append(d,5) //append后d的容量不变 e[0] = 100//没超出底层数组的容量,因此e和d都指向同一个数组,修改e会影响d fmt.Print...阅读全文

博文 2015-01-08 17:00:01 烈冰

golang slice Append

s2 := append(s1, *) 切片s1上记录的切片信息复制给s2,1.如果s1指向的底层array长度不够,append的过程会发生如下操作:内存中不仅新开辟一块区域存储append后的切片信息,而且需要新开辟一块区域存储底层array(复制原来的array至这块新array中),最后再append新数据进新array中,这样,s2指向新array。2.如果s1指向的底层array长度够,s2和s1指向同一个array,append的结果是内存中新开辟一个区域存储新切片信息。开辟一块区域存储底层array 使用下面的策略:1.如果 增加的 len < s的cap 则 新s的cap*22.如果 增加的 len > s的cap 则 新s的cap = 老cap + 增加数据的 le...阅读全文

博文 2014-10-04 19:27:29 咖啡伴侣

go 速学 - 06 - 数组

目录 数组 创建数组 数组的比较 数组与指针 指向数组的指针 数组指针 New 多维数组 摘要 创建数组(指定长度,不指定长度,指定索引),数组指针与指向数组的指针,new 数组 创建数组 直接指定长度 var score [3]int //[0 0 0] 指定长度并初始化 score1 := [2]int{3, 4} //[3 4] 利用索引初始化 score2 := [10]int{3: 4, 9: 1} //[0 0 0 4 0 0 0 0 0 1] 不直接指定长度 score3 := [...]int{1, 2, 3, 4, 5} //[1 2 3 4 5] 数组的比较 Go 中数组为值类型,可以直接使用 == 比较 数组与指针 指向数组的指针 var pscore *[5]int ...阅读全文

博文 2015-05-06 13:00:00 mrseasons

怎么样通过反射reflect向slice追加元素或让这个slice指向另外一个slice

本人接触go不久,遇到一个问题,还请解惑,通过网上搜索很多对反射的描述都是针对struct的,没怎么看到有针对slice的,希望能得到答案,谢谢 ``` go type User struct { Id int Name string } func ChangeSlice(s interface{}) { user1 := User{ Id: 1, Name: "张三", } newSlice := make([]User, 0) newSlice = append(newSlice, user1) // 这样写是不对的,这里不知道该怎么写了 s = &newS...阅读全文

golang参数传递

1 map和slice本身是值传递。但是如果修改他们指向的内容,会影响到函数外。 2 对map和slice的复制,他们底层指向和操作的还是同一对象。 package main import ( "fmt" ) func test2(m map[string]int) { m["aaa"] = 10 } func test4(m map[string]int) { m = make(map[string]int) } func test3(a []int) { a = append(a, 10) } func test_mod_slice_content(a []int) { a[0] = 10000 } func test() { a := make(map[string]int) fmt....阅读全文

博文 2017-09-03 09:03:20 xxbbdd

golang实现单链表

package main import ( "sync" "fmt" ) func main() { node := Instance() node.Name = "张三" node1 := &Node{Name: "李四"} node2 := &Node{Name: "赵武"} node3 := &Node{Name: "李刘"} InsertNode(node, node1) InsertNode(node, node2) InsertNode(node, node3) ListNode(node) } type Node struct { Name string NodePtr *Node } var node *Node var once sync.Once func Instanc...阅读全文

博文 2019-07-11 11:32:42 清晨的麦田