Go切片的种类

45 阅读2分钟
  1. 基本类型切片

    • 在 Go 语言中,切片是一种灵活且强大的数据结构,它是对数组的一个引用片段。切片的类型由其元素类型决定。

    • 例如,[]int是整数类型的切片,[]string是字符串类型的切片,[]float64是浮点数类型的切片。这些切片类型可以用于存储和操作相应类型的数据集合。

    • 当创建一个[]int类型的切片时,它可以包含任意数量的整数元素。例如:

var intSlice []int
intSlice = append(intSlice, 1)
intSlice = append(intSlice, 2)
  • 这里intSlice[]int类型的切片,通过append函数向切片中添加了整数元素 1 和 2。

  1. 结构体切片

    • 如果定义了一个结构体类型,也可以创建该结构体类型的切片。例如:

type Person struct {
    Name string
    Age  int
}
var personSlice []Person
p1 := Person{Name: "Alice", Age: 25}
p2 := Person{Name: "Bob", Age: 30}
personSlice = append(personSlice, p1)
personSlice = append(personSlice, p2)
  • 在这个例子中,personSlice[]Person类型的切片,其中的元素是Person结构体类型。通过创建Person结构体实例并使用append函数将它们添加到切片中,可以方便地管理一组Person对象。

  1. 接口切片

    • 接口类型的切片也很有用。接口切片可以存储实现了特定接口的不同类型的值。例如:

type Shape interface {
    Area() float64
}
type Circle struct {
    Radius float64
}
func (c Circle) Area() float64 {
    return 3.14 * c.Radius * c.Radius
}
type Square struct {
    SideLength float64
}
func (s Square) Area() float64 {
    return s.SideLength * s.SideLength
}
var shapeSlice []Shape
c := Circle{Radius: 2.0}
s := Square{SideLength: 3.0}
shapeSlice = append(shapeSlice, c)
shapeSlice = append(shapeSlice, s)
  • 这里shapeSlice[]Shape接口类型的切片,它可以存储实现了Shape接口的CircleSquare类型的值。这种方式使得可以以统一的方式处理不同类型的对象,只要它们实现了相同的接口。

  1. 函数切片

    • 可以定义函数类型的切片。例如,假设有以下函数类型定义:

type MathFunc func(int) int
  • 可以创建[]MathFunc类型的切片来存储多个这样的函数。例如:

func addOne(n int) int {
    return n + 1
}
func double(n int) int {
    return n * 2
}
var funcSlice []MathFunc
funcSlice = append(funcSlice, addOne)
funcSlice = append(funcSlice, double)
  • 在这个例子中,funcSlice[]MathFunc类型的切片,它存储了addOnedouble这两个函数。可以通过遍历切片并调用其中的函数来对数据进行操作。例如:

for _, f := range funcSlice {
    result := f(3)
    println(result)
}