Go Zero 값 사용
7812 단어 gosystemsprogramming
In this article I make an argument for using the Zero Value in Go over the Nil value, where appropriate.
🔥 핫테이크 🔥
0 값
0 값은 선언되었지만 할당되지 않은 값의 인스턴스화를 위한 기본값입니다. 이tour of go 예를 참조하십시오.
Go에서 변수를 인스턴스화할 때 몇 가지 옵션이 있습니다.
var mystring string = "mystring"
mystring := "mystring"
var mystring string
var mystring string = "mystring"
에서 "mystring"값을 사용하여 변수 선언을 명시적 초기화와 결합합니다.
mystring := "mystring"
에는 "문자열"의 초기화 값으로 알 수 있는 약식 유추 유형 선언이 있습니다.
var mystring string
에는 유형 선언이 있지만 초기화가 없습니까? 따라서 초기 값은 무엇입니까? Zero Value
입니다.
왜요?
이 시점에서 대위법으로 포인터에 대해 길게 설명하려고 했지만 아무도 그것을 원하지 않습니다. 대신 읽을 수 있습니다 this article 제 생각에는 "가치가 아닌 가치"에 대한 공정한 비판이 있습니다. 유형 값이 비어 있다는 의미를 제공하기 위해 다른 유형과 값을 사용하는 것은 나쁜 습관이라고 생각합니다.
🔥😈 예:
type Base struct {
ID *string
}
type Other struct {
Base *Base // y? because ynot.
}
type Composed struct {
ID string
Base *Base
Other *Other
}
func (c Composed) equalIDs() (bool, error) {
// access some stuff
var composedBaseID *string
if c.Base != nil {
composedBaseID = c.Base.ID
}
var composedOtherBaseID *string
if c.Other != nil {
if c.Other.Base != nil {
idIWant = c.Other.Base.ID
}
}
var emptyStrPtr string
if composedBaseID == &emptyStrPtr || composedOtherBaseID == &emptyStrPtr {
return false, errors.New("either id is empty because the pointer didn't even take care of that for us")
}
}
🎵😌 예:
type Base struct {
ID
}
type Other struct {
Base Base // y? because ynot.
}
type Composed struct {
ID string
Base Base
Other Other
}
func (c Composed) equalIDs() (bool, error) {
if c.Base.ID == "" || c.Other.Base.ID == "" {
return false, errors.New("either ID is empty")
}
return c.BaseID == c.Other.Base.ID, nil
}
예, 이것은 인위적인 예이지만 야생에서 매우 자주 볼 수 있습니다.
유형 구성이 강력하고 자주 사용되는 언어에서 포인터로 구성 유형을 사용하려면 값을 확인하기 전에 비어 있는지 확인하기 위해 포인터가 존재하는 각 값 액세스 깊이에서 nil 값을 확인해야 합니다. 또한 포인터에 액세스하면 구조체에 대한 포인터인 경우 지옥 예제 및 here 에서 볼 수 있듯이 대부분의 경우 여전히 0 값 유효성 검사를 수행해야 합니다.
Reference
이 문제에 관하여(Go Zero 값 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/hampgoodwin/use-go-zero-values-4al7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var mystring string = "mystring"
mystring := "mystring"
var mystring string
type Base struct {
ID *string
}
type Other struct {
Base *Base // y? because ynot.
}
type Composed struct {
ID string
Base *Base
Other *Other
}
func (c Composed) equalIDs() (bool, error) {
// access some stuff
var composedBaseID *string
if c.Base != nil {
composedBaseID = c.Base.ID
}
var composedOtherBaseID *string
if c.Other != nil {
if c.Other.Base != nil {
idIWant = c.Other.Base.ID
}
}
var emptyStrPtr string
if composedBaseID == &emptyStrPtr || composedOtherBaseID == &emptyStrPtr {
return false, errors.New("either id is empty because the pointer didn't even take care of that for us")
}
}
type Base struct {
ID
}
type Other struct {
Base Base // y? because ynot.
}
type Composed struct {
ID string
Base Base
Other Other
}
func (c Composed) equalIDs() (bool, error) {
if c.Base.ID == "" || c.Other.Base.ID == "" {
return false, errors.New("either ID is empty")
}
return c.BaseID == c.Other.Base.ID, nil
}
Reference
이 문제에 관하여(Go Zero 값 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hampgoodwin/use-go-zero-values-4al7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)