2.GO语言变量声明

变量声明

go中声明变量有诸多方式,个人感觉花里胡哨的,接下来就来看看吧。

Go中的数据类型

提到变量就不得不先提到Go中的数据类型,几种常用的数据类型几乎在每个编程语言中都会有,但他们还是有一些区别的。

Go中数据类型分为数值类型、浮点类型、字符、字符串、布尔、指针、数组、切片以及map几大类,详细介绍及用法在后面的文章中会一一提到。

几种声明变量的方法

首先在项目下新建一个包,idea中对于go语言new的选项中并没有package,我们直接new一个目录就好了。接着新建一个go文件,这里就叫main.go吧。

接着先将pacakge后的包名改为main,为什么要改这里先不说:

package main

接着声明一个名为main的函数,可以理解为java中声明一个main方法:

func main(){}

接下来就是声明变量的几种方法了。

var 变量名 变量类型

此种声明方式我愿称为是最正经的声明方式,但写惯了java看上去还是有些别扭,因为它将数据类型放在了变量名后:

var variable int

在idea中声明变量你会发现,变量名下爆红了,看他的报错提示可以得知,Go语言中变量一旦声明就必须要使用,否则就会报错。这种声明方式下我们并没有对它进行赋值,而在Go中数值类型的默认值为0。

var 变量名=值

是的,你没看错,这是go语言,但这种声明方式是不是想到了js中声明一个变量,此种方式声明变量和js一样,系统会进行类型推断,通过变量的值自行确定它的类型。

var variable2=100

变量名:=值

这种声明方式就比较另类了,也称为简短声明,但它有约束条件,只能在函数内部声明

variable3:="风间天道"

var 变量1,变量2,变量3,变量4=值1,值2,值3,值4

这种方式适用于同时声明多个变量:

var variable4,variable5,variable6,variable7=1,"风间天道",3.14,false

接下来我们将他们全部输出:

fmt.Println(variable1)
fmt.Println("声明多个变量:",variable1,variable2,variable3,variable4,variable5,variable6,variable7)

结果:

声明多个变量: 0 风间天道 100 1 fengjian 3.14 false

接下来提一个变量方面小小的区别:

在使用java时,如果我们要将两个变量的值互换,那么需要借助第三个临时变量完成。而在Go中则可以直接完成:

//交换两数的值
var i=100
var j=200
fmt.println("i和j交换位置前:",i,j)
i,j=j,i
fmt.println("i和j交换位置后:",i,j)

运行:

i和j交换位置前: 100 200
i和j交换位置后: 200 100

可以发现两数的值的确是改变了,而且可以发现,又和js一样,每行语句结尾是可以不用写;的。

使用下划线忽略变量

有时候我们声明了多个变量,但在某些变量又没有必要在某个需求中使用,那么我们就可以使用_作为占位符来替换这个不需要使用的变量,它也就不会被使用到:

_,x=22,100

大小写对于变量和函数的影响

使用过java语言的同学都知道,java中的变量和方法有权限的概念,比如被public修饰的变量和方法能够被其他包中的成员访问到,而在Go中,通过变量和方法的首字母大小写也可以实现类似的功能:

//首字母大写的变量和属性能够被其他包读取,反之只能被本包中的文件读取
Variable8:=100

常量

常量可以理解为是不可变的变量,一经声明无法修改。而常量的运算在编译期间就已完成。Go中通过const关键字来声明常量,其声明方式和声明变量相同,并且常量可以只声明但不使用而不会报错。

const const1 float64=3.1415926
const consst2,const3=100,"风间天道"

而在Go中,有三个常量true、false、iota,是预先就定义好的:

fmt.println(true,false)

这里重点说一下iota:

iota是用作常量的计数器,只能在常量中使用。接下来用例子一一解释他的几个特点。

iota的值可变

const{
  iota1=iota
  iota2=iota
  iota3=iota
}
const iota4=iota
fmt.Printf("iota1=%d,iota2=%d,iota3=%d,iota4=%d\n",iota1,iota2,iota3,iota4)

结果:

iota1=0,iota2=1,iota3=2,iota4=0

可以看出,iota的值会发生改变,而从严格意义上说,可以描述成:

  • iota紧跟在const第一行时,值为0
  • 往后每出现一行,iota值自增1
  • 当再次遇见const时,iota重置为0

再次举例:

const{
  iota5=iota
  iota6
  iota7	
}
fmt.Printf("iota5=%d,iota6=%d,iota7=%d\n",iota5,iota6,iota7)

结果:

iota5=0,iota6=1,iota7=2

从上面的例子可以看出,iota的自增只与常量const中的行数有关,不一定要每一行都出现iota

这个例子也是如此:

const(
		iota11=iota 
		iota12="fengjian"
		iota13=iota 
	)
fmt.Printf("iota11=%d,iota12=%v,iota13=%d\n",iota11,iota12,iota13)

运行:

iota11=0,iota12=fengjian,iota13=2

iota并没有出现在每一行,但它依旧会计数

再看下一个例子:

const{
  iota8,iota9,ioat10=iota,iota,iota
}
fmt.Printf("iota8=%d,iota9=%d,iota10=%d\n",iota8,iota9,iota10)

结果:

iota8=0,iota9=0,iota10=0

由于三个iota都在const后的第一行,所以iota的值并不发生改变,都为0

这里可以借用iota的特点,实现类似java中枚举的功能:

const{
  Sunday=iota
  Monday
  Tuesday
  Wednesday
  Thursday
  Friday
  Saturday
}
fmt.Println(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday)

运行结果:

 0 1 2 3 4 5 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值