Golang,下面是做什么的[]

pan*_*aya 0 arrays go composite-literals

我是 golang 的新手,有一个基本问题。我从网上的一个例子中提取了以下代码

func (d Direction) String() string {
    return [...]string{"North", "East", "South", "West"}[d]
}
Run Code Online (Sandbox Code Playgroud)

我很困惑[d]方法体中的作用是什么?

icz*_*cza 5

[d]只是一个索引表达式,它索引创建的数组,该数组前面有一个复合文字

这个:

[...]string{"North", "East", "South", "West"}
Run Code Online (Sandbox Code Playgroud)

是一个数组复合字面量,它string使用列出的元素创建一个元素类型的数组,并[d]为该数组建立后续索引。该方法返回这个 4 大小数组的d第 th 个元素。

请注意,...我们希望编译器自动确定数组大小的意思是:

该符号...指定数组长度等于最大元素索引加一。

Go 中的数组不要与slice 混淆。有关数组和切片的详细介绍,请阅读官方博客文章:

Go 博客:Go Slices:用法和内部结构

Go 博客:数组、切片(和字符串):“追加”的机制