Go에서 빈 조각을 반환해야 합니까, 아니면 Nil 조각을 반환해야 합니까?
게시물Should You Return Empty or Nil Slices in Go?은 Qvault에 처음 등장했습니다.
Go에서는 종종 0 값을 반환합니다. Idiomatic Go는 가드 절의 사용을 권장하며 guard clauses 일찍 반환해야 합니다. 오류와 함께 초기에 반환할 때 관례에 따라 다른 모든 반환 값은 0 값이어야 합니다. 맵 및 슬라이스와 같은 데이터 유형에서 혼란이 발생합니다. nil이어야 합니까 아니면 비어 있어야 합니까?
문제는 다음 구문을 사용해야 하는가입니다.
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)
를 입력하는 것이 더 쉽고 일반적으로 구문이 강조 표시되어 읽기 쉽습니다.읽어 주셔서 감사합니다!
질문이나 의견이 있으면 Twitter에서 팔로우하세요.
좀 가져가 coding courses on our new platform
Subscribe 더 많은 프로그래밍 기사를 보려면 뉴스레터로
Reference
이 문제에 관하여(Go에서 빈 조각을 반환해야 합니까, 아니면 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.)