【问题标题】:Meaning of underscore in a Go function parameterGo 函数参数中下划线的含义
【发布时间】:2017-10-20 05:14:00
【问题描述】:

遇到下面的函数here。我注意到最后一个参数用_ 标识。这种模式的意图是什么?

func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
    fmt.Fprint(w, "Welcome!\n")
}

【问题讨论】:

标签: go


【解决方案1】:

意思是“忽略那个参数”,他们这里仍然需要最后一个参数的原因是因为他们想把它作为type Handle传递给函数GET,它有签名:

type Handle func(http.ResponseWriter, *http.Request, Params)

如果您只是传递 func Index(w http.ResponseWriter, r *http.Request) 之类的内容,它将不会被视为 type Handle

【讨论】:

    【解决方案2】:

    _ 是blank identifier。它在签名中表明该值没有被使用,因此签名仍然会匹配接口的方法。

    【讨论】:

      【解决方案3】:

      使用“_”代替参数名称可以满足更高级别的“函数作为参数”的义务,而不会收到有关未使用参数的警告。在您的情况下,我相信编译器被告知忽略所有传入的“POST”数据,从而实际上减少了对“GET”功能的请求。

      【讨论】:

        【解决方案4】:

        正如其他人指出的那样,它是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)
        }
        

        如果您不打算使用索引值,则可以通过使用_ 而不是变量名来忽略存储它。=。

        【讨论】:

        • OP的问题是关于函数参数的。我不认为你在回答这个问题。
        最近更新 更多