📝

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

2022/11/22に公開

基本編 その1 [パッケージ・変数・関数]

パッケージ

Goではコードを記述した際にまとめたファイルを「package」という括りで管理していきます。
Goのすべてのコードは必ず何かしらのパッケージに属する必要があります。
この辺の概念は「java」に似ていますが、javaと違うのは無名パッケージはありません。

また、Goのプログラムでは必ず「main」パッケージが必要になり、基本的にはエントリーポイントであるプログラムを「main」のパッケージとします。
また、実行関数として必ずmain関数を宣言してエントリーポイントを設けます。

hoge.go
// パッケージを定義
package main 

// エントリーポイントとしてmain関数を定義する
func main() {
	~処理~
}

外部参照

外部のパッケージから参照できるフィールドや関数を定義する場合は、名前の最初の文字は「大文字」でないといけません。

hoge.go
package main 

var Num = 555 // 外部から参照できる
var num = 555 // 外部から参照できない

func Hoge() {} // 外部から参照できる
func hoge() {} // 外部から参照できない

変数の宣言

Goの変数宣言は、個人的にはTypeScriptに似ていると感じました。
GoはJavaScriptなどの動的型付け言語ではなく静的型付け言語になります。
即ち、変数を宣言する場合どういう「型」の変数なのかを明示しないと使うことができません。
変数を宣言する場合は、変数名の前にvarを記述して「変数名」そして「型」を定義します。
型指定は。他言語だと変数名の前に記述する場合が多いですが、GoはTypeScriptの様に変数名の後に型を指定します。
また定数は、constを変数名の前に記述して定義します。
定数は:=を使って定義することは出来ません。

hoge.go
package main

const 変数名 =func main() {
	var 変数名 int  // intで型を明示してやる
	var 変数名 = 5  // 初期値を設定すれば、勝手に型を推測してくれる
	変数名 := 11   // :=を使えばvarも省略して記述できる ※関数内でのみ
	var a, b, c int   // 複数の変数をまとめて定義することもできる
	const Pi = 3.14   // 定数の定義
}

当然ですが、基本的に定義した変数に指定した「型」以外の値を入れることはできません。(エラーになります。)
ただしanyという型は、勝手に推測してくれるのでなんでも入れることが可能になりますが、静的型付け言語のメリットを活かせないので、特別な事情がない限りは使用を控えましょう。


関数

Goでの関数は、funcから始まり「変数名(引数)」「{}」で定義します。
また、戻り値がある場合は引数の後に型を明示して関数内でreturnを返します。

戻り値なしバージョン
func 変数名(引数) {
	処理
}

【使用例】aとbの和が表示される
func methodName(a int, b int) {
	fmt.Println(a + b)
}

戻り値ありバージョン
func 変数名(引数) 戻り値の型{
	処理
}

【使用例1】aとbを繋げた文字列を返す
func methodName(a string, b string) string {
	c := a + b
	return c
}
【使用例2】返り値の型を指定時に変数を定義すると return のみで良い
func methodName(a string, b string) (c string) {
	c := a + b
	return 
}

Discussion