私はこのようになります構造体があります。インターフェイスを使用して2つ以上のstruct型を使用すると、コードをより使いやすくすることはできますか?
type BetaKey struct {
Id int64 `json:"-"`
IssuerId int64 `json:"-" db:"issuer_id"`
SubjectEmail string `json:"-" db:"subject_email"`
IssuedTime int64 `json:"-" db:"issued_time"`
ExpiryTime int64 `json:"expiryTime" db:"expiry_time"`
Betakey string `json:"accessKey"`
Description string `json:"description"`
}
を、同じパッケージ内に、私はBetaKey
のスライスを返す関数があります:私はこの機能を書き換えるため
func buildResults(query string) ([]BetaKey, error) {
results := []BetaKey{}
rows, err := sql.DB.Queryx(query)
if err != nil {
return results, err
}
defer rows.Close()
for rows.Next() {
var bk BetaKey
err := rows.StructScan(&bk)
if err != nil {
return results, err
}
results = append(results, bk)
}
err = rows.Err()
if err != nil {
return results, err
}
return results, nil
}
はそれが可能ですその結果、クエリ文字列はBetaKey
となり、interface{}
となり、スライスはinterface{}
になります。これは、コピーする代わりにコードを再利用できるため、すべてのパッケージに貼り付けることができますが、唯一の違いは、名前彼はその変更を構造化する。
これは可能ですか?また、これはアドバイスですか?そうでない場合は、なぜですか?
はい可能です。 Golangのリフレクションについて学ぶだけです。 – Apin
私はリフレクトで構造体の名前を取得する方法を知っています。そして私は。(タイプ)の構文でインターフェイスを変換できることを知っています。しかし、私はそれを実現するために上記の関数を書き直す方法はまだありません。 – Alex