[解決済み] Golang 構造体へのキャストインターフェイス
2022-03-05 21:59:16
質問
ある構造体の関数/メソッドを取得しようとしていますが、パラメータとしてインターフェイスを使用しており、このインターフェイスを使用して構造体の関数にアクセスしようとしています。私が欲しいものを示すために、以下は私のコードです。
// Here I'm trying to use "GetValue" a function of RedisConnection but since "c" is an interface it doesn't know that I'm trying to access the RedisConnection function. How Do I fix this?
func GetRedisValue(c Connection, key string) (string, error) {
value, err := c.GetValue(key)
return value, err
}
// Connection ...
type Connection interface {
GetClient() (*redis.Client, error)
}
// RedisConnection ...
type RedisConnection struct {}
// NewRedisConnection ...
func NewRedisConnection() Connection {
return RedisConnection{}
}
// GetClient ...
func (r RedisConnection) GetClient() (*redis.Client, error) {
redisHost := "localhost"
redisPort := "6379"
if os.Getenv("REDIS_HOST") != "" {
redisHost = os.Getenv("REDIS_HOST")
}
if os.Getenv("REDIS_PORT") != "" {
redisPort = os.Getenv("REDIS_PORT")
}
client := redis.NewClient(&redis.Options{
Addr: redisHost + ":" + redisPort,
Password: "", // no password set
DB: 0, // use default DB
})
return client, nil
}
// GetValue ...
func (r RedisConnection) GetValue(key string) (string, error) {
client, e := r.GetClient()
result, err := client.Ping().Result()
return result, nil
}
解決方法は?
あなたの
Connection
インターフェイスになります。
type Connection interface {
GetClient() (*redis.Client, error)
}
があるというだけです。
GetClient
メソッドをサポートすることについては何も書いていません。
GetValue
.
を呼び出したい場合
GetValue
の上に
Connection
このように
func GetRedisValue(c Connection, key string) (string, error) {
value, err := c.GetValue(key)
return value, err
}
を指定した場合は
GetValue
をインターフェースに追加します。
type Connection interface {
GetClient() (*redis.Client, error)
GetValue(string) (string, error) // <-------------------
}
今、あなたが言っているのは、すべての
Connection
をサポートします。
GetValue
メソッドを使用します。
関連
-
[解決済み] go run: 非メインパッケージは実行できません
-
[解決済み] GolangパッケージがGOROOTにない(/usr/local/go/src/packageName) [閉じた]。
-
Windowsのプロパティダイアログボックスのエンコーディングの問題 ファイル名、ディレクトリ名、ボリュームラベルの構文が正しくありません。
-
[解決済み] 環境変数GOPRIVATEの設定方法
-
[解決済み] Golang 構造体へのキャストインターフェイス
-
[解決済み] 全モジュールのアップデートを行う
-
[解決済み] 構造体変数をコンソールに表示するには?
-
[解決済み] Goの:=と=の演算子の違い
-
パッケージ "github.com/gorilla/websocket" を見つけることができません。
-
[解決済み】init()関数はいつ実行されるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン