2017-01-08 2 views
0

私はちょうどGoを学び始めています。さまざまな種類のリクエストを処理するための簡単なCurl型関数を作成するのは楽しいことだと思いました。しかし、私は最良のアプローチがすべきものであるかどうか分からず、私はGoogleの検索で多くの運がない。ゴランの関数の基礎

カールのような要求では、データのペイロードが存在する場合とそうでない場合がありますが、この状況をどのように処理するのが最も適切かはわかりません。理想的には関数宣言(以下の例で)で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にデータを設定し、それをチェックし、それはあまりにもハックと思われる可能性があります。最善のアプローチは何でしょうか?

私は関数の呼び出しをできるだけ簡潔にし、関数自体をきれいにし、最小限に抑えるようにしたいと考えています。すべての試みは、多くの制御命令ではあまりにも大きくなりすぎました。

答えて

1

は、一般的にそうあなたが最も可能性が高いやりたいだろうが、データが空の文字列、または反対の論理である場合nilに身体を設定することで、"Zero values"の概念があります行くに話す:

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を使用して、それがnilかどうかを確認してください。

+0

ありがとう、ハウル。それはまさに私が探していたものです。 – Dubby