Postgresql 戈朗这条线到底是做什么的?为什么是指针?为什么选择0参数?

Postgresql 戈朗这条线到底是做什么的?为什么是指针?为什么选择0参数?,postgresql,go,Postgresql,Go,我在Go中关注PostgreSQL,它有以下行: 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(er

我在Go中关注PostgreSQL,它有以下行:

  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长度?为什么它是指针数组而不是书籍数组?难道你不想要一片这样你就可以随意把书插入其中吗

难道你不想要一片这样你就可以随意把书插入其中吗

make([]Type,initLength)
创建类型为
Type
的值片。当
initLength>0
时,片中预先填充了大量
type
类型的零值实例。在这种情况下,作者不希望有任何零值,而是选择在从数据库接收到非零值时追加它们。因此,
bks
确实是一个片段

例如:

更多信息:

为什么它是一片指针而不是一片书

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

您链接到的教程没有显示以任何方式使用的
bks
,这些方式利用了值是指针这一事实。您可能可以毫无问题地将切片转换为类型
[]Book

难道你不想要一片这样你就可以随意把书插入其中吗

make([]Type,initLength)
创建类型为
Type
的值片。当
initLength>0
时,片中预先填充了大量
type
类型的零值实例。在这种情况下,作者不希望有任何零值,而是选择在从数据库接收到非零值时追加它们。因此,
bks
确实是一个片段

例如:

更多信息:

为什么它是一片指针而不是一片书

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


您链接到的教程没有显示以任何方式使用的
bks
,这些方式利用了值是指针这一事实。您可能可以毫无问题地将切片转换为类型
[]Book

您还可以使用
make(T,0,cap)
预初始化切片的容量-这在您知道将有多少个结果(或至少是最小数量)时非常有用。您还可以使用
make预初始化切片的容量(T,0,cap)
-当您知道将有多少个结果(或至少是最小数量)时,这非常有用。