Go 常量、枚举与控制语句
常量
常量的定义方式与变量基本相同
const identifier [type] = value
常量也常用于定义枚举
const (mon =1
tue
wed
thr
fri // 如无特殊声明的话则后面几个变量都会默认赋为1
)
而如果想要达到自增的效果,可以使用特殊常量:iota
iota
默认从0开始,当 const
关键字出现时被重置为0,在 const
中,每多声明一行常量,都会令 iota
加一,
const (mon =iota+1
tue
wed
thr
fri // 这时后面几个变量也默认赋为了iota+1,但因iota有从0自增的效果,故后面几
// 个常量的结果分别为2、3、4、5
)
循环语句
Go中的循环语句只有for
一种
基础的for语句
for i<=3{
fmt.Println(i)
i=i+1
}
经典的 起始/条件/迭代(inital/condition/after) 型,注意中间用分号分割
for i=1;i<3;i++{
fmt.Println(i)
}
Go中在for
循环中的break
与cintinue
与C语言中用法以及作用相同,break
用于跳出循环,continue
用于跳过该语句以下的内容,直接执行下一次循环
没有判别条件的for
循环即为无限循环,只能通过break
或者return
来跳出
for {
i++
fmt.Println(i)
if i>100{
break
}
}
条件语句
if
Go语言中if
和else
的用法与c语言中相同
但要注意Go语言中没有三目运算符(ternary if),无 ?:
运算
switch
switch
语句与c语言中也类似,只不过Go中的每个case
后面不必再单独加break
,Go中的每个case
后都默认自带break
效果,
switch
的多个case
会由上到下被逐一测试,直到匹配位置,若所有 case
均不成立则执行 default
如果要执行多个case
,则可使用fallthrough
,在某个case
后放入fallthrough
语句,系统会在执行完这个case
之后,继续直接执行下一个 case
的内容,而不去判断下个case
的条件是否成立,即一次执行两个case
。
switch i {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
fallthrough
case 4:
fmt.Println("four ,or the result of fallthrough from case 3")
default :
fmt.Println("i is not 1,2,3or4")
}
这段代码中,当 i=3
时,同时执行 case3 和 case4
当i=4
时,只执行 case 4
switch
的另一重要用法是各个 case
的参数可以是格式,而不仅仅是值,因此 switch
可以用来判断格式,根据输入变量的不同格式来执行不同的参数,条件是此时的输入必须是interface
类型
例如以下是一个简单的类型判断程序,可以根据输入值不同的类型来进行不同的操作
type itf1 interface{} // 定义了interface类型itf1,interface类似于结构体概念,但能对应多种类型 // 的实现,后面再详细学习
var i itf1=1.22 // 此时定义了itf1类的变量i,并赋值为1.22,这里的i可以赋值为任意数据类型
switch i.(type) {
case int:
fmt.Println("int")
case bool:
fmt.Println("bool")
case string:
fmt.Println("string")
default:
fmt.Println("don't know the type") // 若i的类型在以上三者之外,如1.22为float32或 // float64型,则进入default
}