为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
RISEBY 2021-07-06 16:53:18
我正在为提供 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 apitestimport (    "fmt")test := "This is a test."func main() {    fmt.Println(test)    test = "Another value"    fmt.Println(test)}声明全局可访问变量但不一定是常量的惯用 Go 方法是什么?我的test变量需要:可以从它自己的包中的任何地方访问。多变
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

你需要


var test = "This is a test"

:= 仅适用于函数,小写的 't' 仅对包可见(未导出)。


更彻底的解释


test1.go


package main


import "fmt"


// the variable takes the type of the initializer

var 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 receivers


func 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.go


package main


func changeTest(newTest string) {

    test = newTest

}

输出


testing

Something Else

Type can be inferred

或者,对于更复杂的包初始化或设置包所需的任何状态,GO 提供了一个 init 函数。


package main


import (

    "fmt"

)


var test map[string]int


func 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 运行之前被调用。


查看完整回答
反对 回复 2021-07-12
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

如果您不小心使用“ Func ”或“ function ”或“ Function ”代替“ func ”,您还将获得:

函数体之外的非声明语句

发布此信息是因为我最初在搜索时来到这里以找出问题所在。


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 255 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信