[解決済み] なぜ、*Structを*Interfaceに割り当てることができないのですか?
2022-04-28 13:20:30
質問
をやっているところです。 ツアーに行く ポインターとインターフェースについて混乱しています。なぜこのGoのコードはコンパイルできないのでしょうか?
package main
type Interface interface {}
type Struct struct {}
func main() {
var ps *Struct
var pi *Interface
pi = ps
_, _ = pi, ps
}
すなわち、もし
Struct
が
Interface
は、なぜ
*Struct
である
*Interface
?
というエラーメッセージが表示されます。
prog.go:10: cannot use ps (type *Struct) as type *Interface in assignment:
*Interface is pointer to interface, not interface
解決方法は?
あるインターフェースを実装した構造体がある場合、その構造体へのポインタは自動的にそのインターフェースも実装しています。そのため
*SomeInterface
に何も付け加えられないので、関数のプロトタイプの中で
SomeInterface
また、変数宣言ではこのような型は必要ありません (
この関連質問
).
インターフェース値は具象構造体の値ではなく、一種のポインターです(正確には構造体へのポインターと型へのポインターの2つです)。Russ Cox はこのことを正確に説明しています。 こちら :
インターフェイスの値は、2つの単語のペアで表され、そのポインタは へのポインタと、インターフェイスに格納された型に関する情報へのポインタがあります。 関連するデータ
このため
Interface
でなく
*Interface
を実装した構造体へのポインタを保持するための正しい型です。
Interface
.
そのため、単純に
var pi Interface
関連
-
[解決済み] テスト
-
[解決済み] 構造体のマップのデフォルト値は何ですか?
-
[解決済み] GO言語:致命的なエラー:すべてのゴルーチンがスリープしている - デッドロック
-
[解決済み] Goで構造体のフィールドを反復処理する
-
[解決済み] go getとgo installの違いは何ですか?
-
[解決済み] このキャスティングはgolangで行われているのでしょうか?
-
[解決済み] mod initは新しいフォルダを作成しますか? パスの意味は?
-
[解決済み] Goの:=と=の演算子の違い
-
[解決済み】Goでディレクトリを一覧表示する
-
[解決済み] 「<type>はインターフェースへのポインターであり、インターフェースではない」混乱
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】vsコードの解決方法 - goplsコマンドが使用できません。
-
[解決済み] 構造体のマップのデフォルト値は何ですか?
-
[解決済み] GORMでレコードを作成・更新するには?
-
[解決済み] Go: パニック: ランタイム エラー: 無効なメモリ アドレスまたは nil ポインタのデリファレンス
-
コンパイル: バージョン "" は go ツールのバージョン "" と一致しません。
-
[解決済み] SETNXでシングルインスタンスのRedisをロックする
-
[解決済み] go get でパッケージをインストールするにはどうしたらいいですか?
-
[解決済み] Goのオプションのパラメータ?
-
[解決済み】複数ファイルのGoプロジェクトを整理する【クローズド
-
[解決済み】インターフェースのスライスを変換するタイプ