以下代码导致编译错误:

main.go:8:9:p已声明且未使用

package main

func main() {
    pointers := make([]*int, 5)

    a := 1 // create an int

    for _, p := range pointers {
        p = &a
    }
}

写入p不算是使用它吗?

最佳答案

P仅作用于循环块,并且在每次循环时都会获得pointers slice元素的副本。但这可以工作:

package main

import "fmt"

func main() {
    pointers := make([]*int, 5)

    a := 1 // create an int

    for i := range pointers {
        pointers[i] = &a
    }
    fmt.Println(pointers)
}

Playground

10-07 17:01