我只需要为密钥使用map
,就不需要存储值。所以我声明了这样的地图:
modified_accounts:=make(map[int]struct{})
想法是使用空结构,因为它不占用存储空间。
但是,当我尝试向地图添加条目时,
modified_accounts[2332]=struct{}
我遇到了编译错误:
./blockchain.go:291:28: type struct {} is not an expression
如何在地图上添加空键和无值?
答案 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{}
类型的值,并将该值分配给地图的键。