虽然我必须将一些数据指向一个结构,但我只是混淆了Golang struct中[]*Users
和*[]Users
之间的区别
我有下面的结构
type Users struct {
ID int
Name string
}
发布于 2018-06-03 02:53:33
差别相当大:
*[]Users
将是指向Users
片段的指针。例如:
package main
import (
"fmt"
)
type Users struct {
ID int
Name string
}
var (
userList []Users
)
func main(){
//Make the slice of Users
userList = []Users{Users{ID: 43215, Name: "Billy"}}
//Then pass the slice as a reference to some function
myFunc(&userList);
fmt.Println(userList) // Outputs: [{1337 Bobby}]
}
//Now the function gets a pointer *[]Users that when changed, will affect the global variable "userList"
func myFunc(input *[]Users){
*input = []Users{Users{ID: 1337, Name: "Bobby"}}
}
相反,[]*Users
将是指向Users
的一片指针。例如:
package main
import (
"fmt"
)
type Users struct {
ID int
Name string
}
var (
user1 Users
user2 Users
)
func main(){
//Make a couple Users:
user1 = Users{ID: 43215, Name: "Billy"}
user2 = Users{ID: 84632, Name: "Bobby"}
//Then make a list of pointers to those Users:
var userList []*Users = []*Users{&user1, &user2}
//Now you can change an individual Users in that list.
//This changes the variable user2:
*userList[1] = Users{ID:1337, Name: "Larry"}
fmt.Println(user1) // Outputs: {43215 Billy}
fmt.Println(user2) // Outputs: {1337 Larry}
}
两者都使用指针,但使用的方式完全不同。在Golang Playground上自己尝试一下这两个代码片段,并通读this以获得更好的理解。
https://stackoverflow.com/questions/50659408
复制相似问题