繁体   English   中英

Golang的这一行到底做什么? 为什么要指针? 为什么使用0参数?

[英]What does this line of Golang do exactly? Why pointers? Why the 0 param?

我在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确实是片中的内容。

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

详细信息: http : //blog.golang.org/go-slices-usage-and-internals

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

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

您链接到的教程没有显示以任何方式利用bks来利用值是指针这一事实。 您可能可以将切片转换为[]Book类型,而不会出现任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM