go编译器报告使用指针时声明但未使用的变量

5us2dqdw  于 2023-02-06  发布在  Go
关注(0)|答案(1)|浏览(131)

我有一段代码,我不明白为什么go编译器报告一个变量被声明了,但是没有被使用:

package main
import "fmt"
func main() {
    var StringSlice []*string
    
    MyStr0 := "Zero"
    StringSlice = append(StringSlice, &MyStr0)
    MyStr1 := "One"
    StringSlice = append(StringSlice, &MyStr1)
    MyStr2 := "Two"
    StringSlice = append(StringSlice, &MyStr2)

    var StrPtr *string
    for i, Value := range StringSlice {
        fmt.Println(Value)
        if i == 1 {
            StrPtr = Value
        }
    } // END for

注解掉Printf语句后,go编译器声明./prog.go:15:6:StrPtr已声明但未使用-参见go-playground中的示例:https://go.dev/play/p/J3p4NDR6fBm当Printf被注解掉时,一切都很好,甚至在StrPtr中存储了正确的字符串指针...提前非常感谢您的帮助!

kiz8lqtg

kiz8lqtg1#

问题是你没有使用StrPtr。你重新分配了它,但是它从来没有被读取过。如果你把它添加到Printf语句中,错误就会消失。

package main
import "fmt"
func main() {
    var StringSlice []*string

    MyStr0 := "Zero"
    StringSlice = append(StringSlice, &MyStr0)
    MyStr1 := "One"
    StringSlice = append(StringSlice, &MyStr1)
    MyStr2 := "Two"
    StringSlice = append(StringSlice, &MyStr2)

    var StrPtr *string
    for i, Value := range StringSlice {
        fmt.Println(Value)
        if i == 1 {
            StrPtr = Value
            fmt.Println(StrPtr) // <--- add this
        }
    } // END for
}

相关问题