GO-变量&常量&类型

GO的变量

go时静态语言,所以不支持在运行时改变变量的类型。
go变量的类型是由关键字var来表示的。

var i int = 1 //定义int型变量i

在定义go的变量时,可以不显示制定变量的类型,而有编译器来推断。

var i : = 1 //定义变量i,类型由编译器推断

go支持同时定义多个变量,同时对多个变量进行赋值。

//同时定义三个变量int型变量 x,y,z
var x,y,z int

//同时定义两个变量 a 和 b,他们的值都是使用的默认值
var (
a int
b float32
)

//同时对两个变量赋值
a, b := 1, 1.0

在对变量赋值时,先计算相关值,然后从左向右依次赋值。

data, i := [3]int{0, 1, 2}, 0 //定义data为int型数组,初始化为{0,1,2};定义int型值i,初始化为0
i, data[i] : = 2, 100 //将i的值设置为2,将data[0]设置为100,这里的i还是0。注意这里的i还没有赋值为2,所以不是data[2]=100

在go语言中,支持使用下划线(_)作为占位符,抛弃不需要的返回值。

func test() (int, string) {
	return 1, "a"
}

func main() {
	_, a = test()
}

在go语言中定义的局部变量为使用的话,在代码编译时会报错;但是全局变量不会。

var s string //此处不会
func main() {
	i := 0 //此处编译时会报错
}

常量

常量由关键值 const 指定。常量必须时编译时可以预期的数值、布尔值或字符串。

const i, j int = 0, 1

//定义常量组,注意此处是直接使用的=, 而不是 :=
const (
a = 1
b = "b"
)

在函数中,未使用的局部常量不会引发编译错误。

func main() {
	const a = 10 //此处不会引发编译错误
}

常量值还可以是 len、cap、unsafe.Sizeof 等编译期可确定结果的函数返回值。

const (
a = "abc"
b = len(a)
c   = unsafe.Sizeof(b)
)

枚举

go语言的枚举多由常量组组成。在go中 iota 定义常量组中从0开始开始,按行计数的自增枚举值。

const (
a iota // a = 0
b      // b = 1
c.     // c = 2
)

常量组的定义可以使用表达式,并自行向下复制。

const (
_  iota
KB  1<<(10 * iota)  //iota的值为1
MB                  //iota值为2,MB = 1 <<(10 * 2)
GB
)

在同一组常量中,可以定义多个iota,各自增长。

const (
a, b = iota, iota
c, d = iota, iota
)

在常量组中,iota可以被打断,并显示恢复。

const (
  a = iota //a = 0
  b
  c = 'c'
  d = iota //d = 3,显示恢复了,并且b,c的行数被记录使用。
)

还可以通过自定义类型实现枚举

type Color int

const (
  RED Color = iota
  BLACK
  BLUE
)

func test(Color c) {}

func main() {
  c := BLACK
  test(c)
  
  test(1) // 编译器会自动做类型转换
  x := 1
  test(x) //编译器会报错,因为 x 为int 类型 
}

基本类型

类型长度默认值说明
bool1false
byte10uint8
rune40Unicode Code Point, int32
int, uin4 or 8032位 or 64位
int8, uin810-128~127, 0~255
int16, uint1620-32768 ~ 32767, 0 ~ 65535
int32, uint3240-21亿~ 21亿, 0 ~ 42亿
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值