我正在构建一个提供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方式来声明一个全局可访问的变量,但不是necesarilly常量?
我的test
变量需要:
可以从它自己的包装中的任何地方访问.
变化多端
robbmj.. 69
你需要
var test = "This is a test"
:=
仅适用于函数,小写't'仅适用于包(未导出).
更多的通过explenation
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] }
在main运行之前将调用Init.