go的变量redeclare的问题,golang的一个小坑

liangDream · · 3151 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

go的变量声明有几种方式:

1 通过关键字 var 进行声明

   例如:var i int   然后进行赋值操作 i = 5

2 最简单的,通过符号 := 进行声明和赋值

   例如: i:=5 golang会默认它的类型

下面看一段代码,我们先声明一个变量a,然后再重新声明变量a,b,在这个函数中,变量a被声明了2次,成为a的重声明(redeclare),执行结果为23

package main

import (

  "fmt"

)

func main(){

    a:=1

    a,b:=2,3

    fmt.Println(a,b)

}

精彩的部分来了,请看第二段代码

package main

import (

  "fmt"

)

type A struct{

 i int

}

func main(){

    testA:=&A{}

    testA.i=1

    testA.i,b:=2,3

    fmt.Println(testA.i,b)

}

我们定义了一个简单的结构体A,A中的成员变量为i,我们在testA.i,b:=2,3对成员变量进行了新的声明和赋值,执行会报错。

原因:这个问题Google上是有过讨论的

 Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block with the same type, and at least one of the non-blank variables is new. As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original.
从go的spec看,redeclare是一个赋值,不是创建个新变量,为什么对于成员变量不可以,只能暂时理解成设计问题吧 
 
这里是一个小坑,玩golang的请注意

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

本文来自:博客园

感谢作者:liangDream

查看原文:go的变量redeclare的问题,golang的一个小坑

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

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