使用空值创建地图

时间:2018-09-08 00:55:36

标签: go

我只需要为密钥使用map,就不需要存储值。所以我声明了这样的地图:

modified_accounts:=make(map[int]struct{})

想法是使用空结构,因为它不占用存储空间。

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

modified_accounts[2332]=struct{}

我遇到了编译错误:

./blockchain.go:291:28: type struct {} is not an expression

如何在地图上添加空键和无值?

2 个答案:

答案 0 :(得分:7)

您可以声明一个空变量

var Empty struct{}

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

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

func bar() {
    modified_accounts := make(map[int]struct{})
    modified_accounts[2332] = struct{}{}
    fmt.Println(modified_accounts)
}

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

答案 1 :(得分:2)

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

  

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

表达式是evaluates to something(有值的东西),struct{}是类型的东西,而您的语句试图将类型(正确)分配给地图键的值(一个变量) (左)

您需要创建此类型的变量,然后将该变量作为值分配给地图的键。

通过使用:

var x struct{}
modified_accounts[2332] = x

modified_accounts[2332] = struct{}{}

通过上述两种方法之一,您将创建一个struct{}类型的值,并将该值分配给地图的键。