不知道爲什麼你有downvoted ...第二個選項不能編譯,因爲裏面的其他功能myVar的是不存在。每個變量都有一個範圍。該變量只能在其範圍內訪問。
(如果您想了解更多關於去有多種不同的範圍,我建議以下鏈接https://www.golang-book.com/books/web/01-02 - 向下滾動到範圍它也有一個很好的可視化解釋。)
爲了讓事情更清楚一點,我想補充一些例子:
OPTION 1 - 傳遞指針值
這就是你所得到的。但請確保取消引用您的指針以獲取實際的字符串。你的版本正在打印指針本身(mem-address)。看到我的變化(* s而不僅僅是s)!
func main() {
myVar := "hello world"
other(&myVar)
}
func other(s *string) {
println(*s)
}
選項2 - 傳遞變量值
這可能是你的意思你的選項2.
package main
func main() {
myVar := "hello world"
other(myVar)
}
func other(myVar string) {
println(myVar)
}
OPTION 3 - 讓myVar的全球
也許這是你想要在第二個選項中做的事情。 myVar在這裏是全球性的(或者像golang lingo,myVar有包 -level作用域),因此可以在其他函數中訪問。
var myVar = "hello world"
func main() {
other()
}
func other() {
println(myVar)
}
至於你的問題無論您應該值或指針傳遞給變量:
一般來說,你通過指針,如果你的函數需要能夠編輯值。另外,當變量本身非常大,並且花費時間/資源來傳遞值時,您可以傳遞更有效的指針。
你可以嘗試一下[play.golang.org](http://play.golang.org/p/AQi-KLMhS7) – Mark
你的選擇是不常見的。只要通過價值。並請:以Go的旅程。 – Volker