Разница между [] * Users и * [] Users golang struct - PullRequest
0 голосов
/ 02 июня 2018

Хотя мне нужно было указать некоторые данные на структуру, я просто запутался в том, что такое Разница между []*Users и *[]Users в структуре golang

Если у меня есть следующая структура -

type Users struct {
    ID int
    Name string
}

1 Ответ

0 голосов
/ 02 июня 2018

Разница довольно большая:

*[]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 и прочитайте этот , чтобы лучше понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...