ホームページ >バックエンド開発 >Golang >データベース/sql.Scanner インターフェイスを実装する

データベース/sql.Scanner インターフェイスを実装する

王林
王林転載
2024-02-10 13:30:08635ブラウズ

データベース/sql.Scanner インターフェイスを実装する

phpエディターのYuzaiがこの記事でdatabase/sql.Scannerインターフェースの実装方法を紹介します。 Go 言語では、database/sql パッケージがリレーショナル データベースの操作に使用されるコア パッケージです。スキャナ インターフェイスは、データベース クエリ結果の値をスキャンして Go 言語変数に取り込むために使用されます。 Scanner インターフェイスを実装することで、データベース クエリ結果の値を必要な型に変換することをカスタマイズできます。この記事では、読者が Go 言語でのデータベース操作をよりよく理解し、適用できるように、Scanner インターフェイスを実装する方法を詳しく説明します。

質問の内容

database/sql.Scannerインターフェイスを実装するにはどうすればよいですか?

このクエリでは、SELECT 句に 3 つのフィールドがあります:

  • idsmallint unsigned
  • is_suspended tinyint unsigned
  • 名前 varchar

database/sql の 3 つの列のデータ型は次のとおりです:

  • int64
  • int64
  • []uint8

これは []インターフェース{} で機能しますが、各列タイプを database/sql.Scanner インターフェースに直接実装したいと考えています。 リーリー

やろうとしたけどうまくいかなかったこと

###タイプ### リーリー ###コード###

cols    := make([]interface{}, 3)
ptr     := make([]interface{}, 3)

for i, _ := range cols {
    ptr[i] = &cols[i]
}

if err := rows.Scan(ptr...); err != nil {
    fmt.Println("err:", err)
}

// pair column data with column name
res := map[string]any
for i, name := range res_cols {
    res[name] = *ptr[i].(*any)
    
    fmt.Printf("Type: %T %s\n", res[name], name)
}

回避策

指定された型の値へのポインターを使用して

ptr を初期化します。

リーリー

ptr 上記のスニペットでは、スライスは値を提供しません。コードは次のように簡略化できます: リーリー

以上がデータベース/sql.Scanner インターフェイスを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。