猿问

Go中函数体外的非声明语句

我正在为提供 JSON 或 XML 格式数据的 API 构建 Go 库。


这个 API 要求我session_id每 15 分钟左右请求一次,并在调用中使用它。例如:


foo.com/api/[my-application-id]/getuserprofilejson/[username]/[session-id]

foo.com/api/[my-application-id]/getuserprofilexml/[username]/[session-id]

在我的 Go 库中,我试图在main()func之外创建一个变量,并打算为每个 API 调用 ping 一个值。如果该值为 nil 或为空,则请求一个新的会话 ID 等等。


package apitest


import (

    "fmt"

)


test := "This is a test."


func main() {

    fmt.Println(test)

    test = "Another value"

    fmt.Println(test)


}

声明全局可访问变量但不一定是常量的惯用 Go 方法是什么?


我的test变量需要:


可以从它自己的包中的任何地方访问。

多变


RISEBY
浏览 256回答 3
3回答

凤凰求蛊

你需要var test = "This is a test":= 仅适用于函数,小写的 't' 仅对包可见(未导出)。更彻底的解释test1.gopackage mainimport "fmt"// the variable takes the type of the initializervar test = "testing"// you could do: // var test string = "testing"// but that is not idiomatic GO// Both types of instantiation shown above are supported in// and outside of functions and function receiversfunc main() {    // Inside a function you can declare the type and then assign the value    var newVal string    newVal = "Something Else"    // just infer the type    str := "Type can be inferred"    // To change the value of package level variables    fmt.Println(test)    changeTest(newVal)    fmt.Println(test)    changeTest(str)    fmt.Println(test)}test2.gopackage mainfunc changeTest(newTest string) {    test = newTest}输出testingSomething ElseType can be inferred或者,对于更复杂的包初始化或设置包所需的任何状态,GO 提供了一个 init 函数。package mainimport (    "fmt")var test map[string]intfunc init() {    test = make(map[string]int)    test["foo"] = 0    test["bar"] = 1}func main() {    fmt.Println(test) // prints map[foo:0 bar:1]}init 将在 main 运行之前被调用。

一只斗牛犬

如果您不小心使用“ Func ”或“ function ”或“ Function ”代替“ func ”,您还将获得:函数体之外的非声明语句发布此信息是因为我最初在搜索时来到这里以找出问题所在。
随时随地看视频慕课网APP

相关分类

Go
我要回答