在go中,如何生成全局变量
每当我运行这个程序时,它都会说,inputX和inputY是不可识别的。如何使该程序使用所有函数都可以访问的变量?我所要做的就是按inputX设置输入,然后打印出结果我只是把我的评论作为答案。。。我建议您不要这样做,但是您可以在包范围内声明变量。它看起来像这样在go中,如何生成全局变量,go,Go,每当我运行这个程序时,它都会说,inputX和inputY是不可识别的。如何使该程序使用所有函数都可以访问的变量?我所要做的就是按inputX设置输入,然后打印出结果我只是把我的评论作为答案。。。我建议您不要这样做,但是您可以在包范围内声明变量。它看起来像这样 package main import ( "fmt" "bufio" "os" ) func main() { fmt.Print("LOADED!\n") fmt.Print("inser
package main
import (
"fmt"
"bufio"
"os"
)
func main() {
fmt.Print("LOADED!\n")
fmt.Print("insert y value here: ")
inputY := bufio.NewScanner(os.Stdin)
inputY.Scan()
inputXfunc()
}
func inputXfunc() {
fmt.Print("insert x value here: ")
inputX := bufio.NewScanner(os.Stdin)
inputX.Scan()
slope()
}
func slope() {
fmt.Println(inputX.Text())
}
但是,更好的选择是更改方法定义以接受参数,并根据需要将值传递给它们。我希望如此
package main
import (
"fmt"
"bufio"
"os"
)
var inputX io.Scanner
func main() {
fmt.Print("LOADED!\n")
fmt.Print("insert y value here: ")
inputY := bufio.NewScanner(os.Stdin)
inputY.Scan()
inputXfunc()
}
func inputXfunc() {
fmt.Print("insert x value here: ")
inputX = bufio.NewScanner(os.Stdin) // get rid of assignment initilize short hand here
inputX.Scan()
slope()
}
func slope() {
fmt.Println(inputX.Text())
}
您可以创建一个
init()
函数,并在main.go
中使用它,方法是使用像godotenv
这样的包来设置操作系统的环境变量:
global.go
文件
func slope(inputX bufio.Scanner) {
fmt.Println(inputX.Text())
}
slope(myInputWhichIsOfTypeIOScanner)
main.go
文件
package global
import (
"log"
"os"
"strconv"
"github.com/joho/godotenv"
)
var (
SERVER_HOST string
SERVER_PORT int
)
func InitConfig() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
SERVER_HOST = os.Getenv("SERVER_HOST")
SERVER_PORT, _ = strconv.Atoi(os.Getenv("SERVER_PORT"))
}
您仍然需要在其他包中导入“G”包才能使用变量,但我认为在Go(或任何其他语言)中处理全局变量的最佳方法是使用环境变量。真正的全局变量在Go中不存在,您不应该在这里使用它们。您需要的是
func slope(inputX io.Scanner)
然后在inputXfunc()中调用它
您应该将inputX
传递给它。如果您想要一个可以被上面程序中的所有方法访问的变量,而不必将其传递给任何方法,那么只需在任何方法之外的main上面声明它,它将是“包作用域”,在这种情况下是全局的,因为您在packagemain
上有io.Scanner在我的代码中不工作。它在“io”上给出了一个未定义的错误。您必须添加导入“io”才能使用io。Scanneralready尝试导入“io”无效。此代码对我根本不起作用。我正在寻找一种将输入从一段代码传递到另一个函数的方法。当然,在go中有一种方法可以做到这一点。@liam是的,它在第二个示例中概述了,如果您理解它并将其应用到您的程序中,它会很好地工作。有一个错误,我用了io.Scanner
而不是bufio.Scanner
,但这只是一个例子。在将其应用于您的程序时,应该清楚的是,您没有导入io
包,bufio
是您称之为NewScanner
的东西。
package main
import(
G "path/to/config"
)
func init() {
G.InitConfig()
}
func main() {
G.Init()
}