我希望建模一个可以有两种可能形式的值:缺席或字符串.
执行此操作的自然方式是with Maybe String,or Optional<String>,or string option等.但是,Go没有这样的变体类型.
然后我想,在Java,C等之后,替代方案将是可空性,或者nil在Go中.但是,nil不是stringGo 中的类型成员.
搜索,然后我想使用该类型*string.这可能有效,但看起来很尴尬(例如,我不能采用字符串文字的地址,就像我可以获取结构文字的地址一样).
在Go中模拟这样一个值的惯用方法是什么?
我最近在Golang中一直在努力研究SQL NULL值.尝试不成功解组JSON对象使用后Decode()和sql.NullString,我来到这个答案在计算器上:
使用字符串指针的解决方案似乎与Decode()和nil值完美配合.那么sql.NullString和之间的区别是什么*string?这只是零检查吗?
我需要验证我的 http 请求是否有两个参数:Start 和 End。目前,我设置了一个不应显示为任一参数的默认值,并检查它和其他无效值。然而,这感觉就像是黑客攻击。执行此操作的正确方法应该是什么?
这是我的代码:
type Request struct {
Start int `json: "start"`
End int `json: "end"`
}
func HandlePost(w http.ResponseWriter, r *http.Request) {
body , _ := ioutil.ReadAll(r.Body)
reqData := Request{Start: -1, End: -1} // < whats the correct way to do this
json.Unmarshal(body, &reqData)
if reqData.Start < 0 && reqData.End < 0 {
w.WriteHeader(http.StatusBadRequest)
return
}
// rest of the logic
}
Run Code Online (Sandbox Code Playgroud)