Go 语言基础语法Part2 | 豆包MarsCode AI刷题

16 阅读2分钟

本文介绍以下GO语言的用法: map range func point struct error string

1. map

map 是一种键值对的数据结构,类似于其他语言的哈希表或字典。

  • 定义和初始化

    var m map[string]int          // 声明一个 map
    m = make(map[string]int)       // 使用 make 初始化
    
  • 直接初始化

    m := map[string]int{"a": 1, "b": 2}
    
  • 增删改查

    m["c"] = 3                     // 添加或修改键值
    delete(m, "b")                 // 删除键
    value, exists := m["a"]        // 检查键是否存在
    

2. range

range 用于遍历数组、切片、map 和字符串。

  • 遍历切片

    s := []int{1, 2, 3}
    for i, v := range s {
        fmt.Println(i, v)         // i 为索引,v 为值
    }
    
  • 遍历 map

    m := map[string]int{"a": 1, "b": 2}
    for k, v := range m {
        fmt.Println(k, v)         // k 为键,v 为值
    }
    
  • 遍历字符串

    str := "hello"
    for i, c := range str {
        fmt.Printf("Index: %d, Char: %c\n", i, c)
    }
    

3. func

Go 语言中的函数使用关键字 func 定义。

  • 基本定义

    func add(a int, b int) int {
        return a + b
    }
    
  • 多返回值

    func swap(x, y string) (string, string) {
        return y, x
    }
    
  • 匿名函数和闭包

    func main() {
        add := func(a, b int) int { return a + b }
        fmt.Println(add(2, 3))
    }
    

4. 指针 pointer

Go 支持指针,但不支持指针运算。指针用于传递内存地址,从而避免传值。

  • 定义指针

    var p *int
    i := 42
    p = &i                     // `&` 获取变量地址
    fmt.Println(*p)            // `*` 获取指针指向的值
    
  • 修改值

    func modify(p *int) {
        *p = 10
    }
    

5. struct

struct 是自定义数据类型,用于组织不同类型的字段。

  • 定义结构体

    type Person struct {
        Name string
        Age  int
    }
    
  • 创建和使用结构体

    p := Person{Name: "Alice", Age: 30}
    fmt.Println(p.Name)
    
  • 匿名字段和嵌套结构体

    type Employee struct {
        Person
        ID int
    }
    e := Employee{Person: Person{Name: "Bob", Age: 25}, ID: 101}
    fmt.Println(e.Name)
    

6. error

Go 通过返回 error 值来进行错误处理,error 是一个接口。

  • 定义错误

    import "errors"func divide(a, b int) (int, error) {
        if b == 0 {
            return 0, errors.New("division by zero")
        }
        return a / b, nil
    }
    
  • 检查错误

    result, err := divide(4, 0)
    if err != nil {
        fmt.Println("Error:", err)
    }
    

7. string

Go 语言中的字符串是不可变的 Unicode 字符序列。

  • 定义字符串

    var s1 string = "hello"
    s2 := "world"
    
  • 字符串拼接

    s := s1 + " " + s2
    
  • 获取字符串长度和字符

    len := len(s1)                  // 字节长度
    char := s1[1]                   // 访问第 2 个字符的字节(字符以字节存储)
    
  • 遍历字符串

    for i, c := range s1 {
        fmt.Printf("Index: %d, Char: %c\n", i, c)
    }