使用空值创建地图

Nul*_*lik 4 go

我只需要使用mapfor键,我不需要存储值.所以我宣布了这样的地图:

modified_accounts:=make(map[int]struct{})
Run Code Online (Sandbox Code Playgroud)

我们的想法是使用空结构,因为它不消耗存储空间.

但是,当我尝试向地图添加条目时,

modified_accounts[2332]=struct{}
Run Code Online (Sandbox Code Playgroud)

我收到了一个编译错误:

./blockchain.go:291:28: type struct {} is not an expression
Run Code Online (Sandbox Code Playgroud)

如何向地图添加空键而没有值?

小智 9

你可以声明一个空变量

var Empty struct{}

func foo() {
    modified_accounts := make(map[int]struct{})
    modified_accounts[2332] = Empty
    fmt.Println(modified_accounts)
}
Run Code Online (Sandbox Code Playgroud)

或者每次都创建一个新结构

func bar() {
    modified_accounts := make(map[int]struct{})
    modified_accounts[2332] = struct{}{}
    fmt.Println(modified_accounts)
}
Run Code Online (Sandbox Code Playgroud)

要创建一个空的,struct你应该使用struct{}{}


Tus*_*har 6

该错误正是您在以下行中看到的:

./blockchain.go:291:28: type struct {} 不是表达式

表达式是evaluates to something(具有值的东西),struct{}是一种类型,并且您的语句试图将类型(右)分配给映射键的值,一个变量(左)

您需要创建一个这种类型的变量,并将该变量作为值分配给映射的键。

要么使用:

var x struct{}
modified_accounts[2332] = x
Run Code Online (Sandbox Code Playgroud)

或者

modified_accounts[2332] = struct{}{}
Run Code Online (Sandbox Code Playgroud)

在上述任一方式中,您都在创建一个 type 值struct{},并将该值分配给映射的键。