青训营X豆包MarsCode 技术训练营基础语法| 豆包MarsCode AI 刷题

50 阅读5分钟

**
一、基本if语句**

  1. 单分支if语句

    • 语法格式:

      • if条件表达式{ // 条件为真时执行的代码块 }
    • 示例:

      • num := 10 if num > 5 { fmt.Println("num大于5") }
  2. 多分支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循环

  1. 最常见的for循环格式

    • 语法:

      • for初始化语句;条件表达式;后置语句{ // 循环体 }
    • 例如:

      • for i := 0; i < 5; i++ { fmt.Println(i) }
    • 这里i := 0是初始化语句,定义了循环变量i并初始化为0;i < 5是条件表达式,当这个条件为真时循环继续;i++是后置语句,每次循环结束后执行,通常用于更新循环变量。

  2. 省略部分的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循环

  1. 用于遍历数组、切片、字符串、映射(字典)等数据结构。

    • 遍历数组或切片:

      • 例如,对于切片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) }
    • 遍历映射(字典):

      • 例如,对于映射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 表达式 {
 case1:
     // 当表达式的值等于值1时执行的代码
 case2:
     // 当表达式的值等于值2时执行的代码
 ...
 default:
     // 当表达式的值不等于任何一个case的值时执行的代码
 }
  1. 表达式

    • 可以是任何类型(例如整数、字符串等)。
    • 在Go语言中,switch后面的表达式在开始执行switch语句时只计算一次。
  2. case

    • 每个case后面跟着一个值(常量、变量或者表达式),这个值的类型必须与switch后面表达式的类型相同。
    • 如果switch表达式的值与某个case的值相等,那么就会执行该case后面的代码块。
    • 与其他语言不同的是,Go语言中的case不需要使用break语句来跳出switch,因为Go语言中的case默认是独占的,执行完一个case后就会自动跳出switch
  3. 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

初始化数组

数组可以在声明时初始化,也可以在声明后逐个为元素赋值。以下是几种初始化数组的方式:

  1. 声明时初始化

     var numbers = [5]int{1, 2, 3, 4, 5}
    
  2. 使用简短声明语法

     numbers := [5]int{1, 2, 3, 4, 5}
    
  3. 根据初始化值推断数组长度

     numbers := [...]int{1, 2, 3, 4, 5}
    
  4. 指定下标初始化

     numbers := [5]int{1:2, 3:4}
    

访问数组元素

数组元素可以通过索引访问,索引从0开始。例如,访问数组numbers的第一个元素:

 fmt.Println(numbers[0])

遍历数组

可以使用for循环或range关键字遍历数组。以下是两种遍历数组的方式:

  1. 使用for循环

     for i := 0; i < len(numbers); i++ {
         fmt.Println(numbers[i])
     }
    
  2. 使用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)
 }