从0开始学GO之变量与常量

更多参见:从0开始学GO之目录

变量

变量几乎所有编程语言最基础的组成元素。从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。

变量声明

Go语言引入了关键字 var,而类型信息放在变量名之后,变量声明语句不需要使用分号作为结束符。

	var v1 string
	var v2 [5]int // 数组
	var v3 struct {
		s1 int
		s2 string
	}
	var v4 *int // 指针
	var v5 map[string]int // map,key为string类型,value为int类型
	var v6 func(a int) int
	//一次定义多个变量
	var v7 , v8 int // 同类型

	var (
		v5 string
		v6 int
	)

变量初始化

对于声明变量时需要进行初始化的场景, var 关键字可以保留,但不再是必要的元素

	var v1 int = 10 
	var v2 = 10 // 编译器自动推导出v2的类型
	v3 := 10 // 编译器可以自动推导出v3的类型
	// 以上三种用法的效果是完全一样的
	//出现在 := 左侧的变量不应该是已经被声明过
	var i int
	i := 2 //err

变量赋值

	var v1 int
	v1 = 123
	var v2, v3, v4 int
	v2, v3, v4 = 1, 2, 3    //多重赋值

	i := 10
	j := 20
	i, j = j+1, i+1   //多重赋值

多重赋值形式上像Python

匿名变量

_(下划线)任何赋予它的值都会被丢弃:

package main
import "fmt"

func test() (int, string) {
	return 250, "go"
}

func main() {
	i := 10
	j := 20
	_, j = j+1, i+1   //多重赋值
	fmt.Println(i)
	fmt.Println(j)
	var str string
	_, str = test()
	fmt.Println(str)
}

在这里插入图片描述

常量

常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。

字面常量

所谓字面常量(literal),是指程序中硬编码的常量

-12 
3.14159265358979323846 // 浮点类型的常量
3.2+12i // 复数类型的常量
true // 布尔类型的常量
"foo" // 字符串常量

常量定义

通过const 关键字,进行定义。常量定义可以限定常量类型,但不是必需的。如果定义常量时没有指定类型,那么它与字面常量一样,是无类型常量。

	const Pi float64 = 3.14
	const zero = 0.0 // 无类型浮点常量
	const (
		size int64 = 1024
		eof        = -1 // 整型常量, 自动推导类型
	)
	const a, b, c = 3, 4, "go"
	const mask = 1 << 3

预定义常量

Go语言预定义了这些常量:true、false和iota

常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1。

	const ( // iota被重设为0
		c0 = iota // c0 == 0
		c1 = iota // c1 == 1
		c2 = iota // c2 == 2
	)
	const ( // iota被重设为0
		c3 = iota // c3 == 0
		c4  	 // c4 == 1
		c5 		 // c5 == 2
	)
	const (
		a = 1 << iota // a == 1 (iota在每个const开头被重设为0)
		b = 1 << iota // b == 2
		c = 1 << iota // c == 4
	)

枚举

枚举指一系列相关的常量。Go语言并不支持众多其他语言明确支持的enum关键字。可以通过 const + iota 进行枚举表示

	const (
		Sunday = iota
		Monday
		Tuesday
		Wednesday
		Thursday
		Friday
		Saturday
		numberOfDays // 这个常量没有导出包内私有
	)

以大写字母开头的常量在包外可见,以上numberOfDays为包内私有,其他符号则可被其他包访问。

个人能力有限,如有错误或者其他建议,敬请告知欢迎探讨,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值