Bootstrap

Go- 常量

Go 学习笔记,学习内容

主要介绍以下内容:

  • 编译器可自动推导常量类型

  • 常量可用内置函数返回值赋值,不可用自定义函数

  • 数值型常量使用任何精度都不会溢出

  • 赋值时可使用iota变量

  • 定义的常量不使用不会报错

代码示例可以直接运行

package main

import (
	"fmt"
)

/*
函数有返回值必须声明
如下函数实现,编译报错:
too many arguments to return
    have (number)
    want ()

func getNumber(){
    return 5
}
*/

func getNumber() (num int) {
	return 5
}

func main() {
	const Pi = 3.1415
	fmt.Println(Pi)

	/*
		编译出错: a redeclared in this block
	*/
	//const a = 1
	//const a = 2

	const b1 string = "abc" // 显示指示类型
	const b2 = "abc"        // 编译器自动根据取值推导类型

	/*
		常量的值必须在编译的时候就能够确定
	*/
	const c1 = 2 / 3
	/*
		编译出错:.getNumber() used as value
		因为自定义函数均属于未知,无法用于常量的赋值,但可以使用内置函数
	*/
	//const c2 = getNumber()

	/*
	   数字型的常量没有大小和符号,使用任何精度都不会溢出
	*/
	const Ln2 = 0.693147180559945309417232121458176568075500134360255254120680009
	// 可通过反斜杠作为多行的连接符?
	const d = (1 << 100) >> 88
	const e = -1.3183872345

	const f, h = 1, 2
	const (
		Mon, Tues, Wed = 1, 2, 3
		Thur, Fri, Sat = 4, 5, 6
	)
	const (
		Boy  = 0
		Girl = 1
	)
	const (
		Red    int = iota
		ORANGE     // 1
		YELLO      // 2
	)
	fmt.Println(YELLO) // 2

	/*
	   每赋值一次 iota 取值+1,当重新遇到const时,iota 取值为0
	*/
	const (
		DOG    = iota
		CAT    = iota // 1
		KANGOO = iota // 2
	)
	fmt.Println(KANGOO) // 2

	/* 以上定义了很多常量,但是运行的时候不会报错:xxx declared but not used*/
}