Golang中的函数基础知识

时间:2017-01-08 10:44:42

标签: curl go

我刚刚开始学习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。最好的方法是什么?

我想保持调用函数的代码行尽可能简短,函数本身要干净且极简。所有的尝试都变得有点太大,有很多控制声明。

1 个答案:

答案 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并检查它是否为零。