📝

【Go】41歳未経験エンジニア ~Go挑戦記#3~

2022/11/24に公開

基本編 その3 [ポインタ・Struct]

ポインタ

ここから少し難易度が上がってきます。
「ポインタ」は値(変数など)のメモリ上での格納されているアドレスの事です。
定義や参照時は「*」アスタリスクを設定したい変数やオブジェクトの前に付けて、ポインタの代入は変数やオブジェクトの前に「&」を付けます。

pointer
package main

imort "fmt"

func main() {
	var num = 10
	var p *int       // int型のポイントが格納できるように定義
	p = &num         // numのメモリアドレスを代入
	fmt.Println(p)   // 16進数でnumのアドレス値が返される
	fmt.Println(*p)  // numのアドレスに格納されている値を返される
}

struct

Goにはクラスという概念がありません。その代わりにクラスでいう値を保持するフィールド的な機能として、「struct」があります。

struct
package main

imort "fmt"

type square struct {
	height int
	width int
}

func main() {
	sq := square{10, 5}                
	fmt.Println(sq.height * sq.width)  // 50
}

クラスが無いということはメソッドが存在しないことになりますが、この「struct」を定義して関数に関連付けることでメソッドと同様の機能を持たせることもできます。
関数名の前に「(【エイリアス】 【struct名】)」を記述することで、メソッドと同じ機能を持たせることができます。

method
package main

imort "fmt"

type square struct {
	height int
	width int
}
func (s square) volume() int {
	return s.X * s.Y
}

func main() {
	sq := square{10, 5}                
	fmt.Println(sq.volume())  // 50
}

シンプルに考えると理解しやすいんですが、これを複雑に構成されているコードを見ると??が増えていきます… 基本となる重要な部分なんで沢山触れて慣れるのが重要だと感じました。

Discussion