以前の記事でGo言語の環境を構築してhello worldの表示までやりました。
今回はGo言語についての基本的な書き方の記事になります。
公式のチュートリアルを参照するのが一番良いとは思いますが、個人的に備忘録としてまとめていきます。
では、始めます。
1:変数・定数
変数と定数は以下のように書きます。
// 変数 var int_val int = 1 var str_val string = "variable" // 変数に値が入る場合は以下のように省略して書くことも可能 int_val := 1 str_val := "variable" // 定数 const const_int int = 100 const const_str string = "const"
2:if else文
if else文は以下のように書きます。
var a, b int = 2, 4 // どちらも2で割り切れる // var a, b int = 2, 3 // 一方が3で割り切れる // var a, b int = 1, 5 // どちらも2または3で割り切れない if (a%2 == 0) && (b%2 == 0) { // a,bどちらも2で割り切れる fmt.Println("divisible by 2") } else if (a%3 == 0) || (b%3 == 0) { // aまたはbのどちらかが3で割り切れる fmt.Println("At least one is divisible by 3") } else { // a,bどちらも2または3で割り切れない fmt.Println("Not divisible by either 2 or 3") }
3:for文
for文は以下のように書きます。ちなみにGo言語にwhile文はないようなのでfor文で代替します。
// 基本的なfor文 for i := 0; i < 3; i++ { fmt.Println(i) } // リスト的な書き方 str_slice := []string{"Bob", "Jack", "Helen"} for i, s := range str_slice { if s == "Jack" { continue } fmt.Println(i, ":", s) } // while文的な書き方 count := 0 for count < 3 { fmt.Println(count) count += 1 } // 無限ループの書き方 for { fmt.Println("loop") break }
4:関数
関数は以下のように書きます。
func example(a int, b int) 戻り値 { // 処理 }
以下に具体例をいくつか挙げておきます。
// 戻り値が複数ある場合(掛け算を行う関数) func Calc_multi(a int, b int) int { return a * b } // 戻り値が複数ある場合(割り算を行う関数) func Calc_div(a int, b int) (float32, error) { if b == 0 { return 0.0, errors.New("b is zero") } return float32(float32(a) / float32(b)), nil } // 戻り値がない場合 func showMessage(s string) { fmt.Println(s) }
注意としてGo言語にはクラスがありません。ですが関数の頭文字を大文字にすることで外部からも呼び出せるようなpublic関数に、頭文字を小文字にすることでprivate関数のように扱うことができます。
5:構造体
構造体は以下のように書きます。
type 構造体名 struct { 要素名1 型1 要素名2 型2 ... }
実際に構造体を使った例は以下のようになります。
・struct_test.go
package main import ( "encoding/json" "fmt" ) // ※Go言語は頭文字を小文字にするとprivate、大文字にするとpublicのような扱いになる // person構造体 type person struct { // 頭文字を大文字にすると関数などの外部からもアクセスできるようになる Name string Age int } // person構造体の中身を文字列として表示させる関数 func (p person) String() string { bytes, err := json.MarshalIndent(p, "", " ") if err != nil { return "json to String error." } res := string(bytes) return res } func main() { // 構造体を作成 person_bob := person{Name: "Bob", Age: 10} fmt.Println(person_bob.Name) fmt.Println(person_bob.Age) fmt.Println(person_bob.String()) // Goはポインタも使える bob_pointer := &person_bob bob_pointer.Age = 16 // ポインタから書き換えているのでAgeの値が変化 fmt.Println(person_bob.Name) fmt.Println(person_bob.Age) fmt.Println(person_bob.String()) // 一時的な構造体を作ることも可能 dog := struct { name string isGood bool }{ "Rex", true, } fmt.Println(dog) }
以上がGo言語の基本的な書き方になります。
これ以外にも色々ありますが、この辺りを押さえておけば最低限の処理は書けるかと思います。
クラスという概念がなかったり、頭文字を大文字にするか小文字にするかでpublicかprivateかを決めていたりと他言語と違う部分は色々ありますが、慣れていきたいです。
・参考資料