你不知道的 Go 之 const

简介

常量可以说在每个代码文件中都存在,使用常量有很多好处:

  • 避免魔法字面量,即直接出现在代码中的数字,字符串等。阅读代码的时候无法一眼看出它的含义。另外可以避免使用字面量可能出现的不一致,当它们的值需要修改时,常量只需修改一处,而字面量要修改多处,容易遗漏造成不一致;

  • 相对于变量,常量可以执行编译期优化。

Go 语言也提供了常量的语法支持,与其他语言提供的常量基本一致。但是 Go 中的常量有几个有用的特性值得了解一下。

常量基础

Go 语言中使用const关键字定义常量:

package main

import "fmt"

const PI float64 = 3.1415926
const MaxAge int = 150
const Greeting string = "hello world"

func main() {
  fmt.Println(PI)
  fmt.Println(MaxAge)
  fmt.Println(Greeting)
}

多个常量定义可以合并在一起,如上面的几个常量定义可以写成下面的形式:

const (
  PI       float64 = 3.1415926
  MaxAge   int     = 150
  Greeting string  = "hello world"
)

不过通常建议将相同类型的,相关联的常量定义在一个组里面。

Go 语言中常量有一个很大的限制:只能定义基本类型的常量,即布尔类型(bool),整数(无符号uint/uint8/uint16/uint32/uint64/uintptr,有符号int/int8/int16/int32/int64),浮点数(单精度float32,双精度float64),或者底层类型是这些基本类型的类型。不能定义切片,数组,指针,结构体等这些类型的常量。例如,byte底层类型为uint8rune底层类型为int32,见 Go 源码builtin.go

// src/builtin/builtin.go
type byte = uint8
type rune = int32

故可以定义类为byterune的常量:

const b byte = 128
const r rune = 'c'

定义其他类型的变量会在编译期报错:

type User struct {
  Name string
  Age  int
}

const u User = User{} // invalid cons
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值