不能在函数外赋值的问题?

taatcc · 2018-02-28 23:01:51 · 1640 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-02-28 23:01:51 的主题,其中的信息可能已经有所发展或是发生改变。

package main
var a int
a=2    //给变量a赋值时,居然报错了,是何故?
func main(){
  println(a)
}


另外1个申明的问题

package main
func main(){
  var a    //不能这样申明,与javascript不一样,申明时一定要申明类型吗?
  a=2
  println(a)
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1640 次点击  
加入收藏 微博
18 回复  |  直到 2018-03-02 14:37:27
Thomas_Z
Thomas_Z · #1 · 7年之前

第一个报错是因为println吧=fmt包里的函数。 第二个确实不能如此 var a=2这样可以。

Thomas_Z
Thomas_Z · #2 · 7年之前
Thomas_ZThomas_Z #1 回复

第一个报错是因为println吧=fmt包里的函数。 第二个确实不能如此 var a=2这样可以。

啊 漏看了main=不像C/C++ go没main外这种全局变量吧=同为初学者 可能回答错。

taatcc
taatcc · #3 · 7年之前
Thomas_ZThomas_Z #2 回复

#1楼 @Thomas_Z 啊 漏看了main=不像C/C++ go没main外这种全局变量吧=同为初学者 可能回答错。

我也是此猜测。那全局变量怎么弄呢?

tk103331
tk103331 · #4 · 7年之前

golang是强类型的,声明变量必须有类型,或者使用类型推导。

全局变量可以使用 var a int = 1

Thomas_Z
Thomas_Z · #5 · 7年之前
taatcctaatcc #3 回复

#2楼 @Thomas_Z 我也是此猜测。那全局变量怎么弄呢?

package main import "fmt" var a int = 2 func main(){ fmt.Println(a) }

这样,不用一定声明类型吧,a:=2

taatcc
taatcc · #6 · 7年之前
tk103331tk103331 #4 回复

golang是强类型的,声明变量必须有类型,或者使用类型推导。 全局变量可以使用 var a int = 1

果然,这是个要注意的地方。有点小坑,原来强类型语言,就算用var申明变量,也得指定类型

taatcc
taatcc · #7 · 7年之前
Thomas_ZThomas_Z #5 回复

#3楼 @taatcc package main import "fmt" var a int = 2 func main(){ fmt.Println(a) } 这样,不用一定声明类型吧,a:=2

也就是要用全局变量的话,得先初始化,不能var a int;a=2这种方式了

Thomas_Z
Thomas_Z · #8 · 7年之前

猜测如此,函数外var声明,函数内可以a=2赋值~go果然各种语言大杂烩hhhh

taatcc
taatcc · #9 · 7年之前
Thomas_ZThomas_Z #5 回复

#3楼 @taatcc package main import "fmt" var a int = 2 func main(){ fmt.Println(a) } 这样,不用一定声明类型吧,a:=2

package main a := 2 func main(){ println(a) } 直接在main外面用a := 2,怎么报错:non-declaration statement outside function body,a := 2不就相当于var a=2吗,在main外面用var a=2就没报错,不解了

Thomas_Z
Thomas_Z · #10 · 7年之前

同不解,只是知道不能这样QAQ或许包外不能用类型推导?

Thomas_Z
Thomas_Z · #11 · 7年之前
Thomas_ZThomas_Z #10 回复

同不解,只是知道不能这样QAQ或许包外不能用类型推导?

啊 函数外=。=又打错了

taatcc
taatcc · #12 · 7年之前
Thomas_ZThomas_Z #10 回复

同不解,只是知道不能这样QAQ或许包外不能用类型推导?

是啊,main外用自动推导就不行,这不合理啊。难道用var自动推导比用:=自动推导更好用?

Twilightsixteen
Twilightsixteen · #13 · 7年之前

全局的话貌似是 var( a = 2 ) 同为新手,一起学习

taatcc
taatcc · #14 · 7年之前

全局的话貌似是 var( a = 2 ) 同为新手,一起学习

var( a = 2 ),这写法也是没见过,不能这样。

taatcc
taatcc · #15 · 7年之前

全局的话貌似是 var( a = 2 ) 同为新手,一起学习

打错,还能这样。var()是用于定义多个变量时用的快捷方法吧

Twilightsixteen
Twilightsixteen · #16 · 7年之前
taatcctaatcc #15 回复

#13楼 @Twilightsixteen 打错,还能这样。var()是用于定义多个变量时用的快捷方法吧

我之前看教程的时候说全局有两种嘛,一种是 var 变量名 变量类型; 还有一种就是上述的那种

jthmath
jthmath · #17 · 7年之前

第一个问题:
你要明白,定义变量赋值语句是两回事,赋值语句不能放在外面
第二个问题:
go是静态类型语言,变量定义的时候必须指定类型(自动推断也算指定类型)

taatcc
taatcc · #18 · 7年之前
jthmathjthmath #17 回复

第一个问题: 你要明白,`定义变量`和`赋值语句`是两回事,赋值语句不能放在外面 第二个问题: go是静态类型语言,变量定义的时候必须指定类型(自动推断也算指定类型)

领教了,我把C语言的思维带到go中来了。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传