簡體   English   中英

在Go中追加結構片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM