[解決済み] Goで実行時に構造体の型から新しいインスタンスを作成するにはどうすればよいですか?
2023-04-22 10:07:59
質問
Goでは、実行時にオブジェクトの型からどのようにインスタンスを作成するのでしょうか。 また、実際の
type
を取得する必要があると思いますが?
私はメモリを節約するために遅延インスタンス化をしようとしています。
どのように解決するのですか?
そのためには
reflect
.
package main
import (
"fmt"
"reflect"
)
func main() {
// one way is to have a value of the type you want already
a := 1
// reflect.New works kind of like the built-in function new
// We'll get a reflected pointer to a new int value
intPtr := reflect.New(reflect.TypeOf(a))
// Just to prove it
b := intPtr.Elem().Interface().(int)
// Prints 0
fmt.Println(b)
// We can also use reflect.New without having a value of the type
var nilInt *int
intType := reflect.TypeOf(nilInt).Elem()
intPtr2 := reflect.New(intType)
// Same as above
c := intPtr2.Elem().Interface().(int)
// Prints 0 again
fmt.Println(c)
}
intの代わりにstruct型でも同じことができます。その他にも、本当に何でも。ただ、マップ型とスライス型に関しては、newとmakeの区別は必ず知っておいてください。
関連
-
[解決済み] Typeから新しいオブジェクトのインスタンスを作成する方法
-
[解決済み] Enumの値の属性の取得
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] ゴルーチンのスタックトレースをダンプするには?
-
[解決済み] GoLangで文字列を比較するにはどうしたらいいですか?
-
[解決済み] テンプレートでマップを繰り返し処理する
-
[解決済み] 設計時にvarで宣言された変数の型を確実に決定する方法を教えてください。
-
[解決済み] テキストファイルの読み方を教えてください。重複
-
[解決済み] Go で POST リクエストを送信するには?
-
[解決済み] ローカル構造体へのポインタを返す
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] GolangでMkdirを使ってネストされたディレクトリを作成するには?
-
[解決済み] Goでスライスを逆に反復処理する方法はありますか?
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
-
[解決済み] Goのargv[0]に相当するものは何ですか?
-
[解決済み] 複数のファイルからなるGoプログラムをコンパイルするには?
-
[解決済み] Goのintとint64の違いは何ですか?
-
[解決済み] チャネルバッファサイズとは何ですか?
-
[解決済み] Goでシステムコマンドの出力を得るには?
-
[解決済み] Go で要件をインストールするにはどうすればよいですか? "パッケージが見つかりません"
-
[解決済み] 遅延呼び出しに対応した囲碁プログラムを終了させるには?