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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 12:58:02835ブラウズ

How to Distinguish Between Unset and Empty Values in Go Structs?

Go 構造体における未設定値と空の値の区別

Go では、構造体を定義するときに、次の値を区別する必要がある場合があります。意図的に設定解除され、値は単に空です。これは、データベースの永続性と正確なデータ処理を保証するために重要です。

次の例を考えてみましょう:

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

Category フィールドが一度も設定されなかったのか、それとも意図的に設定されたのかを確認したいとします。空の文字列として。フィールドにポインター (*string など) を使用しても、この問題は解決されません。ポインターのゼロ値は nil であり、未設定の値と空の値を区別できないためです。

これに対処するには、以下を利用できます。データベース/SQL パッケージの sql.NullString などのカスタム型。 NULL 状態を追跡し、次のシナリオを区別できるようにします:

  • unset: NullString{String: "", Valid: false}
  • 空の文字列: NullString{文字列: ""、有効: true}
  • 空でない文字列: NullString{文字列: "値"、有効: true}

データベースのスキャンとパラメーターのバインド中、sql.NullString 型は NULL 状態を自動的に処理します。

たとえば、NullString フィールドをスキャンするには:

<code class="go">err := db.QueryRow("SELECT category FROM organisations WHERE id = ?", id).Scan(&org.Category)</code>

NullString 値をデータベース パラメーターにバインドするには:

<code class="go">_, err := db.Exec("INSERT INTO organisations (category) VALUES (?)", org.Category)</code>

このアプローチにより、未設定の値と空の値を区別し、正確なデータベースの永続性を確保できます。

以上がGo 構造体で未設定の値と空の値を区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。