Go语言 无法分配给结构变量

cwxwcias  于 12个月前  发布在  Go
关注(0)|答案(3)|浏览(110)

我有Map

var users = make(map[int]User)

字符串
我正在填充Map,一切都很好。后来,我想分配给User的一个值,但我得到了一个错误。

type User struct {
  Id int
  Connected bool
}

users[id].Connected = true   // Error


我也试着写一个函数来赋值给它,但是也不起作用。

qmelpv7a

qmelpv7a1#

比如说,

package main

import "fmt"

type User struct {
    Id        int
    Connected bool
}

func main() {
    users := make(map[int]User)
    id := 42
    user := User{id, false}
    users[id] = user
    fmt.Println(users)

    user = users[id]
    user.Connected = true
    users[id] = user
    fmt.Println(users)
}

字符串
输出量:

map[42:{42 false}]
map[42:{42 true}]

jhdbpxl9

jhdbpxl92#

在这种情况下,将指针存储在Map中而不是结构中是有帮助的:

package main

import "fmt"

type User struct {
        Id        int
        Connected bool
}

func main() {
        key := 100
        users := map[int]*User{key: &User{Id: 314}}
        fmt.Printf("%#v\n", users[key])

        users[key].Connected = true
        fmt.Printf("%#v\n", users[key])
}

字符串
Playground
输出量:

&main.User{Id:314, Connected:false}
&main.User{Id:314, Connected:true}

2hh7jdfx

2hh7jdfx3#

要在go中为map上的结构体上的项赋值,必须首先创建对象。我将继续使用您自己的示例:

type User struct {
  Id int
  Connected bool
}

users[id] = User{
    Id:        id,
    Connected: true,
}

字符串
如果你想给一个现有的键赋值,你应该先在你的Map上找到它,比如:

if u,ok := users[id]; ok {
    u.Connected = false
    users[id] = u
}

相关问题