[英]Appending to struct slice in Go
我有兩個結構,像這樣:
// init a struct for a single item
type Cluster struct {
Name string
Path string
}
// init a grouping struct
type Clusters struct {
Cluster []Cluster
}
我要做的是將新項目追加到集群結構中。 所以我寫了一個方法,像這樣:
func (c *Clusters) AddItem(item Cluster) []Cluster {
c.Cluster = append(c.Cluster, item)
return c.Cluster
}
應用程序的工作方式是,我遍歷一些目錄,然后附加最終目錄的名稱及其路徑。 我有一個函數,稱為:
func getClusters(searchDir string) Clusters {
fileList := make([]string, 0)
//clusterName := make([]string, 0)
//pathName := make([]string, 0)
e := filepath.Walk(searchDir, func(path string, f os.FileInfo, err error) error {
fileList = append(fileList, path)
return err
})
if e != nil {
log.Fatal("Error building cluster list: ", e)
}
for _, file := range fileList {
splitFile := strings.Split(file, "/")
// get the filename
fileName := splitFile[len(splitFile)-1]
if fileName == "cluster.jsonnet" {
entry := Cluster{Name: splitFile[len(splitFile)-2], Path: strings.Join(splitFile[:len(splitFile)-1], "/")}
c.AddItem(entry)
}
}
Cluster := []Cluster{}
c := Clusters{Cluster}
return c
}
這里的問題是我不知道執行此操作的正確方法。
目前,我得到:
cmd / directories.go:41:4:未定義:c
所以我嘗試移動這個:
Cluster := []Cluster{}
c := Clusters{Cluster}
在for循環range
。 我得到的錯誤是:
cmd / directories.go:43:20:群集不是一種類型
我在這里做錯了什么?
錯誤發生在循環中,在該循環中您在getClusters
函數內部getClusters
Cluster方法接收器上調用AddItem
函數。 在for循環之前定義Cluster
結構,然后按以下定義調用函數c.AddItem
:
func getClusters(searchDir string) Clusters {
fileList := make([]string, 0)
fileList = append(fileList, "f1", "f2", "f3")
ClusterData := []Cluster{}
c := Clusters{Cluster: ClusterData} // change the struct name passed to Clusters struct
for _, file := range fileList {
entry := Cluster{Name: "name" + file, Path: "path" + file}
c.AddItem(entry)
}
return c
}
您已經定義了與Clusters
結構相同的結構名稱,這就是為什么會出現錯誤
cmd / directories.go:43:20:群集不是一種類型
在Go Play上結帳工作代碼
在Golang Composite中,文字定義為:
復合文字量為結構,數組,切片和映射構造值,並在每次對其求值時創建一個新值。 它們由文字的類型和緊隨其后的元素列表組成。 每個元素可以可選地在對應的關鍵字之后。
還可以查看上面的鏈接中為Composite
文字定義的結構文字部分,以獲得更多描述。
在進入使用c
的循環之前,需要定義c
。
Cluster is not a type
錯誤是由於使用與類型和變量相同的Cluster
名稱,請嘗試使用其他變量名稱。
clusterArr := []Cluster{}
c := Clusters{clusterArr}
for _, file := range fileList {
....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.