我在Go中的PostgreSQL上关注this tutorial,它具有以下行:

  bks := make([]*Book, 0)

这是更大的代码块的一部分:
  bks := make([]*Book, 0)
  for rows.Next() {
    bk := new(Book)
    err := rows.Scan(&bk.isbn, &bk.title, &bk.author, &bk.price)
    if err != nil {
      log.Fatal(err)
    }
    bks = append(bks, bk)
  }

为什么作者在make中传递0?我知道那是长度,但是为什么是0长度?为什么它是指针数组而不是书本数组?您是否想要 slice ,以便可以将书本任意插入其中?

最佳答案


make([]Type, initLength)创建一片Type类型的值。当使用initLength > 0时,该 slice 会预先填充许多数量的Type类型的零值实例。在这种情况下,作者不希望有任何零值,而是选择在从数据库收到非零值时附加它们。因此bks确实是一个 slice 。

示例:http://play.golang.org/p/g0dALT-sLn

更多信息:http://blog.golang.org/go-slices-usage-and-internals



没有更多的上下文,这很难回答。使用指向Book的指针将允许您存储nil值,这取决于bks的使用方式可能很有用。

您链接到的教程没有显示bks以任何方式使用了值是指针的事实。您可能可以将 slice 转换为[]Book类型而没有任何问题。

10-08 19:21