【问题标题】:How do I loop over a struct slice in Go?如何在 Go 中遍历结构切片?
【发布时间】:2014-04-02 08:04:22
【问题描述】:

我最近将一个 json 消息解析为这样的结构数组:

type Fruit struct {
  Number string
  Type string
}

type Person struct {
  Pid string
  Fruits []Fruit
}

func main() {
  var p Person
  str := `{"pid":"123","fruits":[{"number":"10","type":"apple"},{"number":"50","type":"cherry"}]}`
  json.Unmarshal([]byte(str), &p)

  //loop struct array and insert into database
  stmt, err := tx.Prepare(`insert into empi_credentials(PID, type, num) values(?, ?, ?)`)
  if err != nil {
    panic(err.Error())
  }
  defer stmt.Close()

  for x := range p.Fruits {
    if _, err = stmt4.Exec(string(i), x.Type, x.Number); err != nil {
      log.Println("stmt1.Exec: ", err.Error())
      return
    }
  }
}

当我编译它时,编译器说 x.Type 和 x.Number undefined...

我该如何解决?

【问题讨论】:

  • 在切片上测距时,第一个值是索引,第二个值是该索引处的元素。

标签: for-loop struct go slice


【解决方案1】:

修复错误

undefined: i
x.Type undefined (type int has no field or method Type)
x.Number undefined (type int has no field or method Number)

改变

for x := range p.Fruits

到

for i, x := range p.Fruits

参考:For statements

【讨论】:

  • 非常感谢~我是一个新的Gopher,我想我必须详细阅读文档
  • 如果你不用i,可能for _, x := range p.Fruits更好
猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 2019-01-28
  • 2018-12-09
  • 2021-06-16
  • 2017-07-27
  • 2018-12-05
  • 2017-02-19
相关资源
最近更新 更多