0%

Go基础之基本语法

if 条件语句

示例:

1
2
3
4
5
6
7
8
9
func bounded(v int) int {
if v > 100{
return 100
}else if v < 0 {
return 0
} else {
return v
}
}

if的条件不需要使用括号
Golang中通过{}来标记代码块,而在python中使用代码缩进来标记代码块。

if条件语句可以像其他语言的for循环写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 普通写法
const filename = "abc.txt"
contents,err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println(err)
}else{
fmt.Println("%s\n", contents)
}

// 类似for写法
const filename = "abc.txt"
if contents,err := ioutil.ReadFile(filename);err != nil{ // 将原先的赋值语句合并到if中
fmt.Println(err)
}else{
fmt.Println("%s\n", contents)
}

需要注意的是,类似for写法也有弊端,就是此时合并在if中的赋值过程中创建的变量是不可以在if语句之外被使用的

  • if的条件可以赋值

  • if的条件里赋值的变量作用域就在这个if语句中

switch语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func eval(a, b int, op string) int {  // 有返回值的函数,要求需要指定函数的类型
var result int
switch op{
case "+":
result = a + b
case "-":
result = a - b
case "*":
result = a * b
case "/":
result = a / b
default:
panic("unsupported operator:" + op) // panic()函数的作用,打印括号内的内容(即报错)并终止程序
}
return result
}

switch会自动break,除非使用fallthrough

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func grade(score int) string {
g := ""
switch { // switch之后可以不添加语句也可以执行
case score <0 || score > 100:
panic(fmt.Sprintf("Wrong score: %d", score))
case score < 60:
g = "F"
case score < 80:
g = "C"
case score < 90:
g = "B"
case score <= 100:
g = "A"
}
fmt.Println("hello") // 一旦panic()函数执行,就会中断程序的进行,此处的语句也就不会执行
return g
}

switch后可以没有语句

循环语句for

1
2
3
4
sum := 0
for i := 1 ; i<= 100; i++{
sum += i
}

for 循环的初始条件中创建变量的时候,只能使用推导写法:创建变量,且和if条件判断一样,在条件中创建的变量只能在其内部使用,无法在循环之外使用。

for 的条件里不需要添加括号

for条件里可以省略初始条件,结束条件,递增表达式

1
2
3
4
5
6
7
8
9
// 整数转二进制
func convertToBin(n int) string {
result := ""
for ; n > 0; n /= 2 {
lsb := n % 2
result = strconv.Itoa(lsb) + result // strconv.Itoa()作用将参数变成字符串类型
}
return result
}

若是for循环中没有初始条件和递增条件,只有结束条件,则可以连分号都不用写---- 实际上就是别的语言的while循环

1
2
3
4
5
6
7
func printFileContents(reader io.Reader) {
scanner := bufio.NewScanner(reader)

for scanner.Scan() {
fmt.Println(scanner.Text())
}
}

设置可以连结束条件也没有,此时就是死循环

1
2
3
4
5
func forever() {
for {
fmt.Println("abc")
}
}

Go语言中将死循环设计的如此便捷,有一部分原因是因为我们在Go语言中要经常使用死循环

基本语法要点回顾

  • for,if 后面的条件没有括号和冒号,写在大括号内
  • if条件里也可定义变量
  • 没有while
  • switch不需要break,也可以直接switch多个条件,不需要在switch后指定对象,case后可以接条件