Go语言常量
*早使用变量声明时,注意编码的问题,汉字的问题可能引起
编译并不能通过。
*如果你在定义变量 a 之前使用它,则会得到编译错误 undefined: a
*如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误
*此外,单纯地给 a 赋值也是不够的,这个值必须被使用
*全局变量是允许声明但不使用。 同一类型的多个变量可以声明在同一行
* 如果你想要交换两个变量的值,则可以简单地使用 a, b = b, a,两个变量的类型必须是相同。
*空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。
_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,
但有时你并不需要使用从一个函数得到的所有返回值。并行赋值也被用于当一个函数返回多个返回值时,
比如这里的 val 和错误 err 是通过调用 Func1 函数同时得到:val, err = Func1(var1)。
常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,
否则编译不过
eg:
package main
import "unsafe"
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
func main(){
println(a, b, c)
}
注意:在不同的引入的包中使用的println的规范不同,有的不用大写p有的需要;
特殊常量iota
可以认为是一个被编译器修改的常量
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明
将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
eg:
package main import "fmt" func main() { const ( a = iota //0 b //1 c //2 d = "ha" //独立值,iota += 1 e //"ha" iota += 1 f = 100 //iota +=1 g //100 iota +=1 h = iota //7,恢复计数 i //8 ) fmt.Println(a,b,c,d,e,f,g,h,i) }
eg:
package main
import "fmt"
const (
i = 1 << iota
j = 3 << iota
k
l
)
func main() {
fmt.Println("i=", i)
fmt.Println("j=", j)
fmt.Println("k=", k)
fmt.Println("l=", l)
}
结果为:
i= 1
j= 6
k= 12
l= 24