在golang中创建一个简单的api,为什么this教程使用
var movies = map[string]*Movie{
"tt0076759": &Movie{Title: "Star Wars: A New Hope", Rating: "8.7", Year: "1977"},
"tt0082971": &Movie{Title: "Indiana Jones: Raiders of the Lost Ark", Rating: "8.6", Year: "1981"},
}
虽然this other tutorial使用了类似的内容:
type Movies []Movie
var movies Movies
movies = append(movies, Movie{id: "tt0076759", Title: "Star Wars: A New Hope", Rating: "8.7", Year: "1977"})
似乎第一个给了我一个包含键值对的映射,其中值是指向电影的指针。第二个给我一个电影的数组(片?),其中id作为查找的关键。为什么在第一个中使用指针?
答案 0 :(得分:0)
首先,您需要了解指针的用途。当您想要分享时,请使用指针作为Tour of Go
指针保存值
的内存地址
作为第一个教程,因为他们想要创建共享值的变量,因此它使用更少的内存。
作为第二个教程,您不需要将指针变量添加到切片。 因为Slice it self是一种引用类型。
切片保存对基础数组的引用,如果您指定一个 切片到另一个,都指向同一个数组。
一些参考:
https://golang.org/doc/effective_go.html#slices
https://stackoverflow.com/a/2441112/2652524
答案 1 :(得分:0)
考虑这个例子:https://play.golang.org/p/SZb47MKIr3
它将无法编译,因为“打印”功能有一个指针接收器,但地图中的实例不是指针。
虽然这个例子:https://play.golang.org/p/g0aXXcze5d运行良好。