我只需要使用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{}{}
该错误正是您在以下行中看到的:
./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{},并将该值分配给映射的键。