**
一、基本if语句**
-
单分支
if语句-
语法格式:
if条件表达式{ // 条件为真时执行的代码块 }
-
示例:
num := 10 if num > 5 { fmt.Println("num大于5") }
-
-
多分支
if - else语句-
语法格式:
if条件表达式1{ // 条件1为真时执行的代码块 } else if条件表达式2{ // 条件1为假且条件2为真时执行的代码块 } else { // 条件1和条件2都为假时执行的代码块 }
-
示例:
score := 70 if score >= 90 { fmt.Println("优秀") } else if score >= 60 { fmt.Println("及格") } else { fmt.Println("不及格") }
-
在Go语言中,主要有两种循环结构:for循环。
一、基本for循环
-
最常见的
for循环格式-
语法:
for初始化语句;条件表达式;后置语句{ // 循环体 }
-
例如:
for i := 0; i < 5; i++ { fmt.Println(i) }
-
这里
i := 0是初始化语句,定义了循环变量i并初始化为0;i < 5是条件表达式,当这个条件为真时循环继续;i++是后置语句,每次循环结束后执行,通常用于更新循环变量。
-
-
省略部分的
for循环-
可以省略初始化语句、条件表达式、后置语句中的一个或多个。
-
省略初始化语句:
- 当循环变量已经在循环外部定义时,可以省略初始化语句。例如:
i := 0 for ; i < 5; i++ { fmt.Println(i) }
-
省略条件表达式:
- 如果省略条件表达式,那么循环会一直执行,需要在循环体内部通过
break语句来跳出循环。例如: for i := 0; ; i++ { if i >= 5 { break } fmt.Println(i) }
- 如果省略条件表达式,那么循环会一直执行,需要在循环体内部通过
-
省略后置语句:
- 例如:
for i := 0; i < 5; { fmt.Println(i) i++ }
-
二、for - range循环
-
用于遍历数组、切片、字符串、映射(字典)等数据结构。
-
遍历数组或切片:
- 例如,对于切片
s := []int{1, 2, 3}: for index, value := range s { fmt.Printf("索引: %d, 值: %d\n", index, value) }
- 例如,对于切片
-
遍历字符串:
- 字符串在Go语言中是字节序列,
for - range循环遍历字符串时会以rune(Unicode码点)为单位。例如,对于字符串str := "你好": for index, char := range str { fmt.Printf("索引: %d, 字符: %c\n", index, char) }
- 字符串在Go语言中是字节序列,
-
遍历映射(字典):
- 例如,对于映射
m := map[string]int{"key1": 1,"key2": 2}: for key, value := range m { fmt.Printf("键: %s, 值: %d\n", key, value) }
- 例如,对于映射
-
三、for - range循环
在Go语言中,switch是一个条件语句,它可以根据不同的条件执行不同的代码块。以下是switch语句的基本语法:
switch 表达式 {
case 值1:
// 当表达式的值等于值1时执行的代码
case 值2:
// 当表达式的值等于值2时执行的代码
...
default:
// 当表达式的值不等于任何一个case的值时执行的代码
}
-
表达式
:
- 可以是任何类型(例如整数、字符串等)。
- 在Go语言中,
switch后面的表达式在开始执行switch语句时只计算一次。
-
case
:
- 每个
case后面跟着一个值(常量、变量或者表达式),这个值的类型必须与switch后面表达式的类型相同。 - 如果
switch表达式的值与某个case的值相等,那么就会执行该case后面的代码块。 - 与其他语言不同的是,Go语言中的
case不需要使用break语句来跳出switch,因为Go语言中的case默认是独占的,执行完一个case后就会自动跳出switch。
- 每个
-
default
:
default子句是可选的。- 如果
switch表达式的值与所有case的值都不相等,那么就会执行default后面的代码块。
例如:
package main
import "fmt"
func main() {
num := 2
switch num {
case 1:
fmt.Println("The number is 1")
case 2:
fmt.Println("The number is 2")
default:
fmt.Println("The number is not 1 or 2")
}
}
在这个例子中,由于num的值为2,所以会执行case 2后面的代码块,输出The number is 2。
在Go语言中,数组是一种固定长度的数据结构,用于存储相同类型的元素。以下是Go语言数组的基础语法:
四、数组
Go语言中声明数组需要指定元素类型和数组长度,语法格式如下:
var arrayName [size]dataType
其中,arrayName是数组的名称,size是数组的大小,dataType是数组中元素的数据类型。例如,定义一个长度为5的整数数组:
var numbers [5]int
初始化数组
数组可以在声明时初始化,也可以在声明后逐个为元素赋值。以下是几种初始化数组的方式:
-
声明时初始化:
var numbers = [5]int{1, 2, 3, 4, 5} -
使用简短声明语法:
numbers := [5]int{1, 2, 3, 4, 5} -
根据初始化值推断数组长度:
numbers := [...]int{1, 2, 3, 4, 5} -
指定下标初始化:
numbers := [5]int{1:2, 3:4}
访问数组元素
数组元素可以通过索引访问,索引从0开始。例如,访问数组numbers的第一个元素:
fmt.Println(numbers[0])
遍历数组
可以使用for循环或range关键字遍历数组。以下是两种遍历数组的方式:
-
使用for循环:
for i := 0; i < len(numbers); i++ { fmt.Println(numbers[i]) } -
使用range关键字:
for index, value := range numbers { fmt.Printf("Index %d has value: %d\n", index, value) }
多维数组
Go语言支持多维数组,例如二维数组可以表示矩阵。以下是声明和初始化二维数组的示例:
var matrix [3][3]int
matrix[0] = [3]int{1, 2, 3}
matrix[1] = [3]int{4, 5, 6}
matrix[2] = [3]int{7, 8, 9}
或者使用简短声明语法:
matrix := [3][3]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
数组作为函数参数
数组可以作为函数的参数传递,但在Go语言中,数组是值类型,这意味着函数会接收数组的副本。如果需要修改原始数组,需要传递数组的指针。
func modifyArray(arr *[5]int) {
(*arr)[0] = 100
}
func main() {
numbers := [5]int{1, 2, 3, 4, 5}
modifyArray(&numbers)
fmt.Println(numbers)
}