这一系列的Golang究竟做了什么?为什么指针?为什么0 param?

时间:2016-04-24 18:49:50

标签: postgresql go

我在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?为什么它是一个指针数组而不是一系列的书?你不想要一张切片,这样你可以随意插入书籍吗?

1 个答案:

答案 0 :(得分:5)

  

你不想要一张切片,这样你可以随意插入书籍吗?

make([]Type, initLength)会创建一类Type类型的值。当initLength > 0时,切片预先填充了许多类型为Type的零值实例。在这种情况下,作者不希望有任何零值,而是选择在从DB接收到非零值时附加非零值。所以bks确实是一个切片。

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

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

  

为什么它是指针的切片而不是书籍的切片

如果没有更多背景,这很难回答。使用指向Book的指针将允许您存储nil值,这可能会有用,具体取决于bks的使用方式。

您链接到的教程未显示bks以任何使用值为指针的方式使用。您可以将切片转换为[]Book类型,没有任何问题。