gpt4 book ai didi

去全局变量不反射(reflect)正确的值

转载 作者:数据小太阳 更新时间:2023-10-29 03:43:51 26 4
gpt4 key购买 nike

我有以下代码

package main

import (
"fmt"
"flag"
)

var outputOnly bool


func something() string {
if outputOnly {
fmt.Println("outputting only")
} else {
fmt.Println("executing commands")
}
return "blah"
}

func main() {

vmoutputonlyPtr := flag.Bool("outputonly",false,"If set it will only output the commands it would execute, naturally without the correct parameter values set.")
flag.Parse()
outputOnly := *vmoutputonlyPtr
if outputOnly {
fmt.Println("outputonly commands will not execute")
}

var blah string
blah = something()
fmt.Println("blah is " + blah)
}

但是输出是这样的:

$ ./se -outputonly                       
outputonly commands will not execute
executing commands

即。看起来函数 something() 知道全局变量,但没有反射(reflect)它的真实值。这是我第一次尝试golang。我做错了什么?

最佳答案

问题是 main 中的这一行。

outputOnly := *vmoutputonlyPtr 

:= 在左边声明一个新变量outputOnly,表达式类型右侧,*vmoutputonlyPtr 并将表达式分配给它。它相当于...

var outputOnly bool = *vmoutputonlyPtr

这个新的 outputOnly "shadows"您的全局 outputOnly 在其范围内。所以mainoutputOnly := *vmoutputonlyPtr之后的所有代码都引用了main本地的这个outputOnly。而 something() 指的是全局 outputOnly

See Redeclaration and Reassignment in Effective Go有关 Go 中变量阴影的更多信息。

如果要分配给现有变量,只需使用 =

outputOnly = *vmoutputonlyPtr 

关于去全局变量不反射(reflect)正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48014243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com