如何在Go中循环遍历结构体切片?

3

我最近将一个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未定义...
我该如何修复它?

在对切片进行范围遍历时,第一个值是索引,第二个值是该索引处的元素。 - Bill DeRose
1个回答

10

修复错误

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

to

for i, x := range p.Fruits

参考:For语句


非常感谢~我是一名新的Gopher,我认为我必须详细阅读文档。 - AriesDevil
5
如果你不使用i,也许for _, x := range p.Fruits更好。 - AriesDevil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接