Go语言学习笔记之变量与常量

变量

变量声明

Go语言中,使用关键字var来声明变量

var v1 int
var v2 string
var v3 []int
var v4 [10]int
var v5 struct {
    f int
}

var v6 *int
var v7 map[string]int // map,key为string类型,value为int类型
vav v8 func(a int) int

var关键字可以吧若干个需要声明的变量放置在一起。

var (
    v1 int
    v2 string
)

var i, j int   // 可以将相同类型放到一行声明,类似C语言风格
变量初始化

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

var v1 int = 10
var v2 = 10 // 编译器可以自动推导出v2的类型
v3 := 10    // 编译器可以自动推导出v3的类型

var v4, v5 int = 10, 20 // 同类型多重初始化

注意:出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误。

var i int
i := 2 // 编译错误
变量赋值
var v1 int
v1 = 10

多重赋值

var v1 int
var v2 string
i, j = 10, "hello go"
匿名变量

我们经常在调用函数时为了获取一个值,却因为该函数返回多个值而不得不定义一堆没用的变量。使用下划线_方式来定义匿名变量

func GetName() (firstName, lastName, nickName string) {
    return "hello", "world", "go"
}

_, _, nick := GetName()

常量

字面常量
-12 
3.1415
true    // 布尔类型的常量
"hello" // 字符串类型常量
常量定义

通过const关键字定义,常量值不能修改。

const PI float64 = 3.1415

Go的常量定义可以限定常量类型,但不是必需的。如果没有指定类型,那么他与字面常量一样是无类型的。

const A, B, C = 10, 20, "hello"

常量定义的右值也可以是一个在编译期运算的常量表达式,

const mask = 1 << 3

由于常量的赋值是一个编译期行为,所以右值不能出现任何需要运行期才能得出结果的表达式,

const HOME = os.Getenv("HOME") // 会导致编译错 误const initializer os.Getenv("HOME") is not a constant
预定义常量

预定义常量有:truefalseiota

iota比较特殊,可以被认为一个可被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1

const (        // iota 被重置为0
    v1 = iota  // v1 = 0
    v2 = iota  // v2 = 1
    v3 = iota  // v3 = 2
)
枚举

Go语言中,枚举可以用const后跟一对圆括号的方式定义一组常量来定义枚举值。

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

在Go语言中,大写字母开头的常量在包外可见,其中numberOfDays为包内私有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值