以下の内容はhttps://rikoubou.hatenablog.com/entry/2024/05/15/140401より取得しました。


【Go言語】Go言語の基本的な書き方

 以前の記事で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 {
	要素名11
	要素名22
        ...
}

 実際に構造体を使った例は以下のようになります。

・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かを決めていたりと他言語と違う部分は色々ありますが、慣れていきたいです。


・参考資料




以上の内容はhttps://rikoubou.hatenablog.com/entry/2024/05/15/140401より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14