gpt4 book ai didi

go - 如果没有类似 IDE 的特性,我们怎么知道包级变量是在哪里定义的?

转载 作者:行者123 更新时间:2023-12-01 22:45:39 25 4
gpt4 key购买 nike

在 Go 中,“顶级”变量具有包级范围,文件在范围方面没有任何意义。没有像 python、javascript(es6) 等那样的“模块”概念(嗯,有“go 模块”,但在这些语言中它更像是“包”,我认为这里不相关。)

如果是这样,我们如何知道在没有 IDE/编辑器帮助的情况下定义变量的位置?我觉得这就像我在管理大量的全局变量。例如:

// foo.go
package main

var foo = "foo"
// bar.go
package main

var bar = "bar"
// main.go
package main

import "fmt"

func main() {
fmt.Println(foo, bar)
}

在这里,我们怎么知道 foobar来自,以防我不能使用今天的丰富编辑器功能,如果项目有一个庞大的代码库?我其实觉得已经很难跟上 foobar即使在这种情况下。

最佳答案

您使用的是没有 GUI 的终端吗?如果您无法访问 IDE,我所能想到的就是使用 Linux 命令,如 grep。在包文件夹内的大量文件中搜索 var <variableName>条款。

如果你有一个名为 test 的包有 100 个文件,你想知道 boo顶级包变量是,然后执行:

grep -nw /path/to/test/*.go -e '^var boo'

解释:
  • -n输出行号
  • -w代表整个单词
  • -e适用于模式

  • 使用 /*.go而不是 -r标记以确保它仅在 .go 中搜索顶级目录中的文件,(不在子包内搜索)。

    警告:这假定所有文件都正确格式化为 gofmt例如,所有包变量都没有缩进。如果变量不小心被空格/制表符缩进,那么你可以省略 ^在模式中,但这可能会找到 var boo函数内部的局部变量也是如此。

    如果一个包有太多包级变量并且包很大,那么它可能是一个问题。顶级变量就像全局变量,除非您知道该怎么做,否则最好避免使用。

    顺便说一句,做 go build -v或使用 -v 运行其他工具将输出额外的信息,如构建的包。这可能会帮助您进行搜索。

    关于go - 如果没有类似 IDE 的特性,我们怎么知道包级变量是在哪里定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60338630/

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