ホームページ > バックエンド開発 > Golang > Go 構造体で Nil と空の値を区別するにはどうすればよいですか?

Go 構造体で Nil と空の値を区別するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-24 11:50:01
オリジナル
397 人が閲覧しました

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

Go 構造体における nil 値と空の値の区別

Go では、nil 値を区別するのが難しい場合があります (つまり、決してset)と空または空白の値(空の文字列など)。この区別は、データベースまたはユーザー入力からのデータを処理する場合に重要です。

問題:

次の Go 構造体を考えてみましょう:

type Organisation struct {
    Category string
    Code     string
    Name     string
}
ログイン後にコピー

カテゴリ フィールドがユーザーによって設定または空の文字列として保存されていない場合は、この値が欠損値を表しているのか、空のユーザー選択を表しているのかを判断することが重要です。

解決策:

1 つの方法は、ポインター フィールドを使用することです。

type Organisation struct {
    Category *string
    Code     *string
    Name     *string
}
ログイン後にコピー

ポインター フィールドでは、nil 値は未設定のフィールドを表し、空の文字列を持つ非 nil 値は空の選択を示します。

データベース処理:

Go では、文字列型のゼロ値は空の文字列です。したがって、標準の文字列型を使用して未設定の文字列フィールドと空の文字列フィールドを区別することは不可能です。データベース統合の場合:

  • MySQL ユーザーの場合は、database/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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート