在这里,您有一个长度为零的切片,len
和cap
函数对于值为零的切片都将返回0
切片不能扩展到超出其容量的大小。如果尝试这样做,将导致运行时恐慌,就像访问切片或数组越界一样。同样,不允许将切片重新切片下限设为负数以访问数组中更早的元素。
您可以使用make初始化切片的容量,并使用索引分配值,也可以使用append向切片添加值
两者都是有效的代码
var day []DayAndTime
day = append(day, DayAndTime{"Monday", "8.00 PM"})
或者
var day = make([]DayAndTime, 1)
day[0] = DayAndTime{"Monday", "8.00 PM"}
建议使用append
这里是一个样例代码,用于证明/解释答案
https://play.golang.org/p/ajsli-6Vqw
package main
import (
"fmt"
)
type DayAndTime struct {
days string
time string
}
func ZeroLength() {
var day = []DayAndTime{}
fmt.Println("Hello, playground", cap(day), len(day), day)
}
func AppendArray() {
var day = []DayAndTime{}
day = append(day, DayAndTime{"Monday", "8.00 PM"})
fmt.Println("Hello, playground", cap(day), len(day), day)
}
func SetIndex() {
var day = make([]DayAndTime, 1)
day[0] = DayAndTime{"Monday", "8.00 PM"}
fmt.Println("Hello, playground", cap(day), len(day), day)
}
func main() {
ZeroLength()
AppendArray()
SetIndex()
}