phpエディターのYuzaiがこの記事でdatabase/sql.Scannerインターフェースの実装方法を紹介します。 Go 言語では、database/sql パッケージがリレーショナル データベースの操作に使用されるコア パッケージです。スキャナ インターフェイスは、データベース クエリ結果の値をスキャンして Go 言語変数に取り込むために使用されます。 Scanner インターフェイスを実装することで、データベース クエリ結果の値を必要な型に変換することをカスタマイズできます。この記事では、読者が Go 言語でのデータベース操作をよりよく理解し、適用できるように、Scanner インターフェイスを実装する方法を詳しく説明します。
database/sql.Scanner
インターフェイスを実装するにはどうすればよいですか?
このクエリでは、SELECT 句に 3 つのフィールドがあります:
id
smallint unsignedis_suspended
tinyint unsigned名前
varchardatabase/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 サイトの他の関連記事を参照してください。