我正在提供 JSON 或 XML 格式数据 API 构建 Go 库。 - y; }" h! c! h& }7 L这个 API 要求我session_id每15 请求一次,并在调用中使用。" r% S1 z; I( F% R o2 R9 ]9 @, ?/ A
foo.com/api/[my-application-id]/getuserprofilejson/[username]/[session-id]foo.com/api/[my-application-id]/getuserprofilexml/[username]/[session-id]7 m) G# [: ], J
在我的 Go 库里,我试着在那里main()func创建一个变量,并计划为每个 API 调用 ping 一个值。如果值是 nil 或者是空的,请求新的会话 ID 等等。( ` G+ R) v6 Y
package apitestimport "fmt")test := "This is a test."func main() fmt.Println(test) test = "Another value" fmt.Println(test)}' {% Q4 K; S8 \+ c+ j$ b
声明全局可访问变量,但不一定是常用 Go 的方法是什么?, R; s; ~+ L. G
我的test变量需要:, z- R: v. m" M. q5 R& b. K 可以访问自己包里的任何地方。 % t! E& f0 B3 ~* c/ |多变 0 f( M; e8 G0 H+ k: O 解决方案: ( y G- |; i3 k9 B6 i 你需要 & o0 { [. G1 r1 s
var test = "This is a test"- x. A. C; Y/ y2 w, C
:= 只适用于函数,小写t只对包可见(未导出)。4 o. k2 c+ o2 k7 K
更彻底的解释 4 i2 x! D* `; y3 w8 Vtest1.go/ V! K! U& \8 R5 i- [! K/ O
package 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)} : l4 M' }/ w0 |0 ^/ y! v1 ]
test2.go ; E/ {" L7 a f) M$ T1 ]% D
package mainfunc changeTest(newTest string) test = newTest} ) Z. e' E2 I8 Y9 {# X
输出 $ l+ T5 D+ n' I& z9 m2 v' y& J
testingSomething ElseType can be inferred % A# c& E5 G& i$ _2 Z7 k2 d5 p
或者,对于更复杂的包初始化或设置包所需的任何状态,GO 提供了一个 init 函数。 ! b5 O$ d. K% Z4 A" K
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]} % B2 U: [9 r" A% X7 L/ x