近期项目需要用到go语言来开发,已经一两年没写过了,这次打算把go学的深一些,分享一些学到的高级用法,希望大家批评指正。
iota
在Go语言中,iota是一个预定义的常量生成器,主要用于生成一系列以递增方式定义的常量值。iota只能在常量的表达式中使用,并且每次出现时,它的值会根据上下文递增。
下面是iota的几种使用总结:
1.递增的常量
iota初始是从0开始递增,例如下面例子,定义了A、B、C三个常量,由iota初始化A为0,紧接着的B、C每次递增1。
package main
import "fmt"
const (
A = iota // 0
B // 1
C // 2
)
func main() {
fmt.Println(A, B, C) // 输出: 0 1 2
}
2.递增的表达式
可以按照表达式来自定义递增的规则,例如下面例子,A在初始化时,按照1 << iota的表达式来进行递增,即每次常量乘以2来递增。
package main
import "fmt"
const (
A = 1 << iota // 1
B // 2
C // 4
)
func main() {
fmt.Println(A, B, C) // 输出: 1 2 4
}
3.搭配枚举
iota常常被用于枚举类型的定义中,简化常量的赋值。
package main
import "fmt"
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
func main() {
fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
// 输出: 0 1 2 3 4 5 6
}
4.跳过
使用空白标识符 _
跳过iota中的某些值。
package main
import "fmt"
const (
A = iota + 1 // 1
_ // 跳过 B
C // 3
)
func main() {
fmt.Println(A, C) // 输出: 1 3
}
5.iota只能在const中使用
package main
import "fmt"
func main{
fmt.Println(iota)//编译错误
}
6.const会重置iota的值
package main
import "fmt"
const(
A = iota //0
B //1
C //2
)
const (
D = iota //0
)
func main(){
fmt.Println(A,B,C,D)
}
7.在同一行中的使用
package main
import "fmt"
const(
A,B = 1 + iota,2 + iota //1,2
C,D //2,3
E,F //3,4
)
func main(){
fmt.Println(A,B,C,D,E,F)//1,2,2,3,3,4
}
8.中间插入其他值
package main
import "fmt"
const(
A = iota //0
B = 100
C = iota//2
D //3
)
func main(){
fmt.Println(A,B,C,D)//0 100 2 3
}