あなたが空またはnilスライスを行く必要がありますか?
8220 ワード
ポストShould You Return Empty or Nil Slices in Go?は、Qvaultに最初に現れました.
囲碁では、しばしばゼロ値を返します.慣用的な試みはガード条項の使用を奨励します、そして、guard clausesは早く戻る必要を必要とします.エラーが発生した場合には初期値を返します.混乱は地図やスライスのようなデータ型で起こります.
問題は、この構文を使うべきです.
func getItems(url string) ([]string, error) {
data, err := makeRequest(url)
if err != nil {
return nil, err
}
items, err := unpack(data)
if err != nil {
return nil, err
}
return data, nil
}
またはこの構文?func getItems(url string) ([]string, error) {
data, err := makeRequest(url)
if err != nil {
return []string{}, err
}
items, err := unpack(data)
if err != nil {
return []string{}, err
}
return data, nil
}
違い
私はNILと空のスライスの違いのいくつかを示すためにコードを素早く実行しました.
package main
import (
"encoding/json"
"fmt"
)
func main() {
var nilSlice []string
fmt.Println(nilSlice) // Output: []
fmt.Println(len(nilSlice), cap(nilSlice)) // Output: 0 0
fmt.Println(nilSlice == nil) // Output: true
dat, _ := json.Marshal(nilSlice)
fmt.Println(string(dat)) // Output: null
emptySlice := []string{}
fmt.Println(emptySlice) // Output: []
fmt.Println(len(emptySlice), cap(emptySlice)) // Output: 0 0
fmt.Println(emptySlice == nil) // Output: false
dat, _ = json.Marshal(emptySlice)
fmt.Println(string(dat)) // Output: []
}
NILと空のスライスの間にはいくつかの類似点があります.[]
次のように異なる.
null
になり、空のスライスは[]
になりますどうすればいいですか。
一般的に言えば、NILを好む.
Go wikiによれば、NILは好ましいスタイルです.我々がちょうど空のスライス
nil
を返す必要があるとき、実質的にすべてのケースで大きく働きます.nil
または[]string{}
よりもmake([]string, 0)
を入力しやすくなり、一般的に構文を強調して読みやすくなります.読書ありがとう!
あなたがどんな質問またはコメントをするならば、さえずりの上で我々について来てください
いくつかのcoding courses on our new platform
より多くのプログラミング記事のための我々の会報へのSubscribe
Reference
この問題について(あなたが空またはnilスライスを行く必要がありますか?), 我々は、より多くの情報をここで見つけました https://dev.to/wagslane/should-you-return-empty-or-nil-slices-in-go-peoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol