首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Golang中[]*用户和*[]用户的区别?

Golang中[]*用户和*[]用户的区别?
EN

Stack Overflow用户
提问于 2018-06-03 01:23:39
回答 1查看 5.5K关注 0票数 7

虽然我必须将一些数据指向一个结构,但我只是混淆了Golang struct中[]*Users*[]Users之间的区别

我有下面的结构

代码语言:javascript
复制
type Users struct {
    ID int
    Name string
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 02:53:33

差别相当大:

*[]Users将是指向Users片段的指针。例如:

代码语言:javascript
复制
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的一片指针。例如:

代码语言:javascript
复制
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以获得更好的理解。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50659408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档