go 有没有类似于python的list

在 Go 语言中,没有直接与 Python 的 `list` 完全对应的数据结构,但最接近的是 **切片(slice)**。切片是 Go 中用于存储和操作一系列元素的动态数组,类似于 Python 的 `list`。

### 切片的基本操作

1. **创建切片**:

   // 创建一个空的切片
   var mySlice []int

   // 使用 make 创建切片
   mySlice := make([]int, 0)  // 初始长度为 0
   mySlice := make([]int, 5)  // 初始长度为 5

   // 直接初始化切片
   mySlice := []int{1, 2, 3, 4, 5}
   

2. **添加元素**:

   mySlice = append(mySlice, 6)  // 添加一个元素
   mySlice = append(mySlice, 7, 8, 9)  // 添加多个元素
   

3. **访问元素**:

   fmt.Println(mySlice[0])  // 访问第一个元素
   

4. **修改元素**:

   mySlice[0] = 10  // 修改第一个元素
   

5. **切片操作**:

   subSlice := mySlice[1:3]  // 获取从索引 1 到 2 的子切片
   

6. **获取长度和容量**:

   length := len(mySlice)  // 获取切片长度
   capacity := cap(mySlice)  // 获取切片容量
   

7. **遍历切片**:

   for index, value := range mySlice {
       fmt.Println(index, value)
   }
   

### 与 Python `list` 的区别

– **类型固定**:Go 的切片只能存储相同类型的元素,而 Python 的 `list` 可以存储不同类型的元素。
– **动态扩展**:Go 的切片通过 `append` 动态扩展,类似于 Python 的 `list`,但 Go 的切片有容量(capacity)的概念。
– **性能**:Go 的切片在性能上通常优于 Python 的 `list`,因为 Go 是编译型语言,而 Python 是解释型语言。

### 示例代码

package main

import "fmt"

func main() {
    // 创建一个切片
    mySlice := []int{1, 2, 3, 4, 5}

    // 添加元素
    mySlice = append(mySlice, 6)

    // 访问元素
    fmt.Println(mySlice[0])  // 输出: 1

    // 修改元素
    mySlice[0] = 10
    fmt.Println(mySlice)  // 输出: [10 2 3 4 5 6]

    // 切片操作
    subSlice := mySlice[1:3]
    fmt.Println(subSlice)  // 输出: [2 3]

    // 遍历切片
    for index, value := range mySlice {
        fmt.Println(index, value)
    }
}

通过这些操作,你可以在 Go 中使用切片来实现类似于 Python `list` 的功能。

Posted in Go