【发布时间】:2016-07-22 15:04:28
【问题描述】:
我有以下代码:
type room struct {
width float32
length float32
}
type house struct{
s := make([]string, 3)
name string
roomSzSlice := make([]room, 3)
}
func main() {
}
当我尝试构建和运行它时,我收到以下错误:
c:\go\src\test\main.go:10: syntax error: unexpected :=
c:\go\src\test\main.go:11: non-declaration statement outside function body
c:\go\src\test\main.go:12: non-declaration statement outside function body
c:\go\src\test\main.go:13: syntax error: unexpected }
我做错了什么?
谢谢!
【问题讨论】:
-
只需像其他字段一样声明它。在这种情况下为“s []string”;该错误非常清楚地告诉您出了什么问题。
-
谢谢,但是如果我像你说的那样声明,切片声明和数组声明有什么区别?
-
一件事是数组的 type 的一部分是它的长度,所以 3 个元素的数组与 4 个元素的数组的类型不同,所以如果您声明一个数组,例如 var n [3]int,然后您有一个由 3 个整数组成的数组,切片与您编写的上下文相同:var []int,但没有给出长度。我想说的是不要担心数组;实际上,它们几乎在所有情况下都不是直接对我们有用。
-
make 确实允许您指定切片的长度和容量,但它们都可以更改。当你使用 make Go 创建一个未命名的数组并返回它的一个切片,这是你直接访问该数组的唯一方法。如果你超出了数组,那么 Go 可以为你创建一个新的、更大的数组,你的切片现在将指向它。
-
@Snowman 原谅我,但我不能同意数组没有直接用途的说法,更不用说在几乎所有情况下。对于任何基于固定大小的 IO,数组是唯一的方法。说到固定大小,我也想到了循环缓冲区。