>백엔드 개발 >Golang >Go 구조체에서 Nil 값과 빈 값을 구별하는 방법은 무엇입니까?

Go 구조체에서 Nil 값과 빈 값을 구별하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-24 11:50:01393검색

How to Differentiate Between Nil and Empty Values in Go Structs?

Go 구조체에서 Nil 값과 빈 값 구별

Go에서는 nil 값을 구별하는 것이 어려울 수 있습니다(즉, never 집합) 및 비어 있거나 빈 값(예: 빈 문자열)입니다. 이러한 구별은 데이터베이스 또는 사용자 입력의 데이터를 처리할 때 매우 중요합니다.

문제:

다음 Go 구조체를 고려하세요.

type Organisation struct {
    Category string
    Code     string
    Name     string
}

사용자가 범주 필드를 설정하거나 빈 문자열로 저장하지 않은 경우 이 값이 누락된 값을 나타내는지 아니면 빈 사용자 선택을 나타내는지 확인하는 것이 중요합니다.

해결책:

한 가지 접근 방식은 포인터 필드를 사용하는 것입니다.

type Organisation struct {
    Category *string
    Code     *string
    Name     *string
}

포인터 필드에서 nil 값은 설정되지 않은 필드를 나타내고, 빈 문자열이 있는 nil이 아닌 값은 빈 선택을 나타냅니다.

데이터베이스 처리:

Go에서 문자열 유형의 0 값은 빈 문자열입니다. 따라서 표준 문자열 유형을 사용하여 설정되지 않은 문자열 필드와 빈 문자열 필드를 구별하는 것은 불가능합니다. 데이터베이스 통합의 경우:

  • MySQL 사용자의 경우 데이터베이스/sql.NullString 유형 사용을 고려하세요.
  • PostgreSQL 사용자의 경우 대체 접근 방식은 다음을 사용하여 데이터베이스에 사용자 정의 유형을 정의하는 것입니다. DECLARE TYPE 구문을 사용한 다음 해당 Go 유형을 사용하여 이를 나타냅니다.

예:

다음은 sql.NullString:

<code class="go">type Organisation struct {
    Category sql.NullString
    Code     string
    Name     string
}

// Check if Category is set and not NULL
if organisation.Category.Valid && organisation.Category.String != "" {
    // Category was set and has a value
} else {
    // Category is either unset or NULL
}</code>
이 접근 방식을 사용하면 설정되지 않은 문자열 값과 빈 문자열 값을 구별하여 데이터베이스 작업에서 데이터를 적절하게 처리할 수 있습니다.

위 내용은 Go 구조체에서 Nil 값과 빈 값을 구별하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.