Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 结构中切片的初始化_Go_Slice - Fatal编程技术网

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应该声明为结构的一部分,所

我正在努力在结构(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
应该声明为结构的一部分,所以我想知道为什么会出现这种错误。有人有什么建议吗

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片(零值)作为一个空片工作,您可以
向它追加
。否则做的唯一原因是,如果您确信预先知道最终尺寸并关心最大效率,或者希望随机填充切片,而不是按顺序填充。