此代码正常运行,但我不了解如何。
在下面的代码中,hostProxy [host]可能包含也可能不包含函数。我不明白变量" ok"被定义或如何获得它的价值。它没有在此行之前定义。
if fn, ok := hostProxy[host]; ok {
fn.ServeHTTP(w, r)
return
}
if target, ok := hostTarget[host]; ok {
....
}
答案 0 :(得分:5)
assignment中使用的
map[K]V
类型的地图a上的索引表达式或特殊形式的初始化v, ok = a[x] v, ok := a[x] var v, ok = a[x] var v, ok T = a[x]
产生一个额外的无类型布尔值。如果地图中存在关键字
ok
,则true
的值为x
,否则为false
。
例如,这段代码:
if fn, ok := hostProxy[host]; ok {
fn.ServeHTTP(w, r)
return
}
意味着从host
映射中获取与hostProxy
键关联的值,在fn
变量中创建并存储值,以及结果(是否在ok
变量中的map)。此ok
变量(类型为bool
)用作if
语句的条件。因此,如果host
键位于hostProxy
地图中,则会继续使用它。
答案 1 :(得分:1)
之前未定义ok
,但在您的示例中,您:=
将为您定义变量,并指定从map lookup
获取的值。