【Go入門】new()とポインタ

Go
スポンサーリンク

Go言語のポインタについて基本てきなところを扱いました。

ここでは、それに関連してnew()という組み込み関数について見ていきます。

スポンサーリンク

new()

new()は引数に型を取り、型のポインタを返す関数です。

受け取った型をゼロ値で初期化すると、ポインタを返すという性質があります。

具体的なコードで見てみましょう。

package main

import "fmt"

func main() {
	var p1 *int
	fmt.Println(p1)
	fmt.Printf("%T\n", p1)

	var p2 *int = new(int)
	fmt.Println(p2)
	fmt.Printf("%T\n", p2)
}

main関数の中でポインタ型を定義しています。

まずポインタ型のintの変数p1を定義しています。これはポインタの基本のところでやったことと同じです。ここでは何も代入していません。

Println()でp1を、Printf()でp1の型を出力しています。

次のここで扱うテーマのnew()を使います。

ポインタ型のintの変数p2を定義します。ここにnew()を当てはめ、引数にint型をとるように宣言しています。

これも同様にPrintln()でp2を、Printf()でp2の型を出力しています。

実行すると次のような出力になります。

<nil>
*int
0xc000012070
*int

このように、どちらもポインタ型のintを返していますが、p1の方の値は<nil>を返して何も割り当てられていないのがわかります。p2の方の値はメモリのアドレスが出力されているのがわかります。

こんどは、これを構造体で使ってみます。

package main

import "fmt"

func main() {

	var s = new(struct{})
	fmt.Println(s)
	fmt.Printf("%T\n", s)

}

やり方は先ほどのコードと同じです。

ここではnew()の引数にstruct型のゼロ値で初期化するパターンです。

出力は次のようになります。

&{}
*struct {}

&が付与されたアドレスが表示され、ポインタ型のstructが表示されているのがわかります。

スポンサーリンク

最後に

Go言語のポインタに関連してnew()という組み込み関数を扱いました。

new()関数は引数に型を取り、型のポインタを返す関数です。

受け取った型をゼロ値で初期化すると、ポインタを返すという性質があります。

このnew()との絡みで、structとポインタについてもう少しこちらで扱います。

Go
スポンサーリンク
CodeGraffitiをフォローする

コードグラフィティ ~ とにかく進もうプログラミング入門~
タイトルとURLをコピーしました