Go 结构中切片的初始化
我正在努力在结构(GO语言)中启动一个切片。这可能很容易,但我仍然无法解决它。我得到下面的错误Go 结构中切片的初始化,go,slice,Go,Slice,我正在努力在结构(GO语言)中启动一个切片。这可能很容易,但我仍然无法解决它。我得到下面的错误 ./prog.go:11:1: syntax error: unexpected var, expecting field name or embedded type ./prog.go:25:2: no new variables on left side of := ./prog.go:26:2: non-name g.s on left side of := 我认为s应该声明为结构的一部分,所
./prog.go:11:1: syntax error: unexpected var, expecting field name or embedded type
./prog.go:25:2: no new variables on left side of :=
./prog.go:26:2: non-name g.s on left side of :=
我认为s
应该声明为结构的一部分,所以我想知道为什么会出现这种错误。有人有什么建议吗
package main
import "fmt"
type node struct {
value int
}
type graph struct {
nodes , edges int
var s []int
}
func main() {
g:= graphCreate()
}
func input(tname string)(number int){
fmt.Println("input a number of " + tname)
fmt.Scan(&number)
return
}
func graphCreate()(g graph){
g:= graph{input("nodes"), input("edges")}
g.s := make([]int, 100)
return
}
您有一些错误:
- 当
为g
类型时,graph
已由类型g.s
定义。所以这不是一个“新变量”graph
- 不能在类型声明中使用
var
- 您已经在
函数中声明了graphCreate
(作为返回类型)g
- 当您编写文字结构时
- 您必须使用您声明的变量
package main
import "fmt"
type node struct {
value int
}
type graph struct {
nodes, edges int
s []int // <= there was var here
}
func main() {
graphCreate() // <= g wasn't used
}
func input(tname string) (number int) {
fmt.Println("input a number of " + tname)
fmt.Scan(&number)
return
}
func graphCreate() (g graph) { // <= g is declared here
g = graph{nodes:input("nodes"), edges:input("edges")} // <= name the fields
g.s = make([]int, 100) // <= g.s is already a known name
return
}
主程序包
输入“fmt”
类型节点结构{
值int
}
类型图结构{
节点,边int
s[]int//您提到的编译器错误清楚地说明了错误的原因。您应该将这两个:=
s替换为=
。意外的变量如何,期待}?谢谢。我需要走了,所以这些答案对我非常有用:)你可能不需要g.s=make([]int,100)
行。一个nil片(零值)作为一个空片工作,您可以向它追加。否则做的唯一原因是,如果您确信预先知道最终尺寸并关心最大效率,或者希望随机填充切片,而不是按顺序填充。