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

王林
リリース: 2024-02-10 13:30:08
転載
575 人が閲覧しました

データベース/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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!