我正在尝试取消引用通道,并使用通道中的有效负载来检查映射中是否有条目。
如果映射不是类型,它就可以工作,但如果映射是类型,我总是会得到类型<map>
不是表达式的错误。
type writechan chan UserProfile
type usersmap map[string]UserProfile
var myuserprofile UserProfile
myuserprofile = <-myuserchannel
var username = myuserprofile.name
if _, ok := usersmap[username]; ok {
fmt.Println("Already registered ")
} else {
usersmap[username] = myuserprofile
}
错误消息说类型usersmap不是if行中的一个表达式。如果我不使用类型usermap,而是使用普通的map say-map[string]字符串,它就可以正常工作。
type usersmap map[string]UserProfile
这是一个类型声明,它不会创建名为usersmap
的变量。在这个类型声明之后,您可以使用usersmap
(类型(标识符来创建一个如下的变量:
var umap usersmap
初始化它:
umap = make(usersmap)
或者在一行中:
var umap = make(usersmap)
或者使用带有初始化的简短变量声明:
umap := usersmap{}
此外,要创建映射类型的变量,您不必创建新类型,您可以简单地写:
var umap = make(map[string]UserProfile)