Golang Go语言中请教下为啥没添加进去

发布于 1周前 作者 bupafengyu 来自 Go语言
func testMatrix(res *[][]int) {
   r := *res
   r = append(r, []int{1, 2, 3})
}

fun main(){ res := make([][]int, 0) testMatrix(&res) fmt.Println(res) }

这个 res 为啥是空的 []


Golang Go语言中请教下为啥没添加进去
7 回复

因为 append 会生成新的 slice

更多关于Golang Go语言中请教下为啥没添加进去的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


正确的做法是 *res = append(*res, []int{1, 2, 3})

这个 append 生产的新的 slice 地址不是和原来的起始地址一样的原因是吗?

你可以打印下地址看看,就知道结果了。

在Go语言中,如果你发现数据没有被正确添加(比如添加到切片、映射或某个集合中),可能有以下几种常见原因:

  1. 切片操作:如果你是在处理切片(slice),确保你使用了append函数来添加元素。切片本身是一个引用类型,但它不会自动扩容,因此直接赋值元素到切片索引可能会导致越界错误或者覆盖已有数据,而不会增加切片长度。

  2. 映射(Map)操作:对于映射,使用map[key] = value语法添加或更新键值对。如果数据“没添加进去”,可能是因为你误用了键,导致看起来像是没添加成功(实际上可能是覆盖了旧值或者键本身计算有误)。

  3. 并发问题:如果你的程序涉及并发操作,确保对共享数据结构的访问是安全的。使用互斥锁(sync.Mutex)或原子操作来避免数据竞争。

  4. 逻辑错误:检查你的逻辑流程,确保添加操作确实被执行了。有时候,条件语句(如if)可能导致添加操作被跳过。

  5. 作用域问题:确保你在正确的作用域内添加数据。例如,在一个局部作用域内创建的切片或映射,在外部是无法访问其修改后的状态的,除非你通过返回值或其他方式传递出去。

检查这些方面,通常可以帮助你定位为什么数据没有被正确添加的问题。如果问题依旧存在,请提供更具体的代码示例,以便进一步分析。

回到顶部