【发布时间】:2017-10-20 05:14:00
【问题描述】:
遇到下面的函数here。我注意到最后一个参数用_ 标识。这种模式的意图是什么?
func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
fmt.Fprint(w, "Welcome!\n")
}
【问题讨论】:
标签: go
遇到下面的函数here。我注意到最后一个参数用_ 标识。这种模式的意图是什么?
func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
fmt.Fprint(w, "Welcome!\n")
}
【问题讨论】:
标签: go
意思是“忽略那个参数”,他们这里仍然需要最后一个参数的原因是因为他们想把它作为type Handle传递给函数GET,它有签名:
type Handle func(http.ResponseWriter, *http.Request, Params)
如果您只是传递 func Index(w http.ResponseWriter, r *http.Request) 之类的内容,它将不会被视为 type Handle。
【讨论】:
_ 是blank identifier。它在签名中表明该值没有被使用,因此签名仍然会匹配接口的方法。
【讨论】:
使用“_”代替参数名称可以满足更高级别的“函数作为参数”的义务,而不会收到有关未使用参数的警告。在您的情况下,我相信编译器被告知忽略所有传入的“POST”数据,从而实际上减少了对“GET”功能的请求。
【讨论】:
正如其他人指出的那样,它是blank identifier。例如,考虑以下示例:
func main() {
nums := []int{5, 3, 4}
max := nums[0]
for _, num := range nums {
if num > max {
max = num
}
}
fmt.Println("max:", max)
}
如果您不打算使用索引值,则可以通过使用_ 而不是变量名来忽略存储它。=。
【讨论】: