我刚刚开始学习Go,我认为创建一个简单的Curl类型函数来处理不同类型的请求会很有趣。但是,我不确定最佳方法应该是什么,而且我对Google搜索没有太多运气。
有了类似curl的请求,可能会有也可能没有数据有效负载,我不确定如何最好地处理这种情况。理想情况下,在函数声明中(在下面的示例中)我希望data
默认为nil
,并且if子句检查是否准备body
变量。
connect("POST", `{"name":"bob","age":123}`)
func connect(method string, data string) {
body := strings.NewReader(data)
req, err := http.NewRequest(method, "http://domain.com", body)
}
调用该函数时,我可以将数据设置为字符串false
并检查它,但这似乎太过于hacky。最好的方法是什么?
我想保持调用函数的代码行尽可能简短,函数本身要干净且极简。所有的尝试都变得有点太大,有很多控制声明。
答案 0 :(得分:1)
一般来说,在Go中有"Zero values"的概念,所以你最想要做的是如果数据是空字符串,则将body设置为nil
,或者相反的逻辑:
var body io.Reader // Zero value of interfaces is always nil
if data != "" {
body = strings.NewReader(data)
}
req, err := http.NewRequest(method, "http://domain.com", body)
如果您需要选择将请求的正文设置为空字符串,那么只需使用*string
并检查它是否为零。