防御类型映射

我正在尝试解除对频道的引用,并使用该频道中的有效载荷来检查地图中是否有条目。

如果地图不是类型,它可以工作,但是如果地图具有类型,我总是会收到错误,提示类型<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
}

错误消息在if行中显示类型usersmap不是表达式。如果我不使用类型usermap而是普通映射,则说map [string] string可以正常工作。

zhenyuting 回答:防御类型映射

type usersmap map[string]UserProfile

这是一个type declaration,它不会创建名为usersmap的变量。在此类型声明之后,您可以使用usersmap(类型)标识符来创建这样的变量:

var umap usersmap

并进行初始化:

umap = make(usersmap)

或一行:

var umap = make(usersmap)

或使用short variable declaration进行初始化:

umap := usersmap{}

要创建地图类型的变量,也不必创建新类型,您可以简单地编写:

var umap = make(map[string]UserProfile)
本文链接:https://www.f2er.com/3160175.html

大家都在问