質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

489閲覧

【Go】インスタンス化と初期化の違いが分かりません。

nyako

総合スコア45

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

1クリップ

投稿2022/06/22 07:07

タイトルの通りですがいまいち違いが分かりません。
例のコードを提示していだけないでしょうか。

自身で調べてみてもGoだとインスタンス化と用いて表現しているところがあまりなく、初期化と違うとはわかっているのですが
混乱しています。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

オブジェクト(構造体、スライスやマップも含む)の「型」のインスタンス化とは実際にはオブジェクトの「値」を格納するメモリ確保し、シンボル(変数名など)に割り当てる処理のことを指します。
「初期化」とはオブジェクトの「値」を何らかの形で埋める処理を指します。

C/C++の場合は明示的に初期化用の値を指定せずにインスタンス化した場合、その値は未定義の値が埋まっている状態です。(未定義の値を参照してしまうトラブルを発見しやすくするためにコンパイルオプションに明示的にメモリを荒らしておく指定もあります。)

Goの場合「インスタンス化」する時点で必ず「初期化」を伴うよう作られています。
(値を省略したとしてもゼロ値で初期化されるので未初期化のメモリにアクセスするのは難しくなっています)
なのでほかの言語のように「インスタンス化」と「初期化」との区別はあまり重要ではありません。

go

1num := new(int) // numの型は「*int」で「*num==0」というゼロ値が入ります。

go

1type S struct { 2 Name string 3} 4 5person := new(S) // personの型は「*S」で「person.Name==""」というゼロ値が入ります。

go

1person := &S{Name:"noname"} // personの型は「*S」で「person.Name=="noname"」という値です。

投稿2022/06/22 12:17

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyako

2022/06/27 10:44

nobonoboさんいつもありがとうございます! 理解がだいぶ深まりました。
nyako

2022/06/27 11:06

すみません。オブジェクトという意味についても調べてみたいのですが インスタンス化する前の型がオブジェクトですかね? それともインスタンス化した後の変数に格納された値がオブジェクトでしょうか。 Webで調べてみると以下のように書いてありまして...。 > オブジェクトを定義する雛形を**クラス**(class)、クラスに基づいてプログラム実行時にコンピュータのメモリ上に展開されたオブジェクトのことを**インスタンス**(instance)と言うが、実際上はインスタンスのことを指してオブジェクトと呼ぶことも多い。
nobonobo

2022/06/28 00:30 編集

たしかにインスタンスなどメモリ上に置かれたものがオブジェクトという見方のほうが近いとはいえそうですが、その元になるひな形はクラスだけとは限らないです。プリミティブなもの、mapやスライス、構造体、関数なども含まれると思います。また、メタ的に「ひな形」を値として持つオブジェクトもあったりするので(Goのインターフェースは型と値の両方を保持します)、オブジェクトという用語はもう少し広い意味を持っていると考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問