다음은 3 가지 추가 제안 또는 기술입니다.
추가 필드 포함
추가 필드를 추가하여 구조체가 채워 졌는지 또는 비어 있는지 알 수 있습니다. 나는 의도적으로 이름 ready
이 아닌 empty
a의 영점이 있기 때문 bool
입니다 false
, 당신이 만들 그렇다면 같은 새로운 구조체 Session{}
의 ready
필드가 자동으로 될 것입니다 false
그리고 당신에게 진실을 말할 것이다 : 구조체가 없습니다 아직 (비어의) 준비가되어 있음.
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
구조체를 초기화 할 때로 설정 ready
해야 true
합니다. 당신의 isEmpty()
당신은 단지 테스트 할 수 있기 때문에 (당신이 원하는 경우에 당신이 하나를 만들 수 있지만) 방법은 더 이상 필요하지 않은 ready
필드 자체를.
var s Session
if !s.ready {
// do stuff (populate s)
}
bool
구조체가 커지거나 비교할 수없는 필드 (예 : 슬라이스 map
및 함수 값) 가 포함 된 경우이 하나의 추가 필드의 중요성이 증가 합니다.
기존 필드의 0 값 사용
이는 이전 제안과 유사하지만 구조체가 비어 있지 않을 때 유효하지 않은 것으로 간주되는 기존 필드의 0 값을 사용합니다 . 이것의 유용성은 구현에 따라 다릅니다.
예를 들어 귀하의 예제 playerId
에서 비어 string
""
있을 수 없다면 다음과 같이 구조체가 비어 있는지 테스트하는 데 사용할 수 있습니다.
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
이 isEmpty()
경우이 검사는 구현에 따라 다르기 때문에이 검사를 메서드에 통합하는 것이 좋습니다.
func (s Session) isEmpty() bool {
return s.playerId == ""
}
그리고 그것을 사용 :
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
구조체에 포인터 사용
두 번째 제안은 구조체에 대한 포인터를 사용하는 것입니다 : *Session
. 포인터는 nil
값 을 가질 수 있으므로 테스트 할 수 있습니다.
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}