環境
macOS Monterey
Apple M1 MAX
go 1.18.4
インストール
下記インストーラーをダウンロードするかmacならHomebrewでインストールできます。
今回はHomebrewでインストールします。
$ brew install goインストールが完了したらgoコマンドが使えるか確認してみましょう。
$ go versiongo version go1.18.4 darwin/arm64プロジェクトディレクトリの作成
適当なディレクトリを作り移動します。
$ mkdir hello$ cd hello次にmain.goという名前でファイルを作成します。
Goの拡張子はgoで起点となるのがmain.goのmain関数になります。
$ touch main.go文字列を表示するプログラム
最初に文字列を表示するだけの簡単なプログラムを作成してみましょう。
作成したmain.goを次のように編集します。
package main
import ( "fmt")
func main() { fmt.Println("Hello Go")}Go言語はソースファイルをコンパイルする必要があります。
次のコマンドでコンパイルしましょう。
$ go build「hello」というファイルが生成されますのでこのファイルを実行します。
$ ./helloHello Go直接実行することもできるみたいです。
$ go run main.go変数
変数はvar 変数名 型名で宣言します。
var num int = 123var text string = "テキスト"変数宣言と代入を同時に行う場合は、varと型名を省略して書くことができます。
num := 123text := "テキスト"配列
配列は数固定の場合に使用します。
nums := [3]int{1, 2, 3}fmt.Println(nums[0])スライス
配列の数が変動する場合はスライスを使用します。
var nums []intnums = append(nums, 1)nums = append(nums, 2)fmt.Println(nums[1])マップ
key,valueのデータ構造を扱う場合はマップという機能を使います。
status := map[int]string{ 200: "OK", 404: "Not Found",}
status[500] = "Error"
fmt.Println(status[200])if文
goは()が必要ないです。
num := 100
if num == 100 { fmt.Println("100です")} else if num > 100 { fmt.Println("100より大きい")} else { fmt.Println("それ以外")}for文
forも()が必要ないです。
for i := 0; i < 5; i++ { fmt.Println(i)}for文はその他にもいろいろなことができます。
例えば配列やスライスの展開。
langs := [3]string{"Go", "JavaScript", "PHP"}
for i, s := range langs { fmt.Println(i, s)}「i」にはインデックス、マップならキーが入りますが明示的に使用しないのであれば「_」を使います。
for _, s := range langs { fmt.Println(s)}無限ループ系もforを使います。
count := 0
for { count++ println(count)
if 5 < count { break }}関数
すでにmain関数を作っていますが、関数は「func」で定義します。
func calc(x, y int) int { return x + y}
println(calc(5, 10))returnする変数を型の部分に定義しておくこともできます。
複数値を返す場合はこのようにも書けます。
func calc(x, y int) (num int, isPlus bool) { num = x + y if num < 0 { isPlus = false } return}
num, isPlus := calc(1, 3)無名関数はこのようになります。
calc := func(x, y int) int { return x + y}構造体
いくつかのデータの塊は構造体で定義できます。
type User struct { Name string Age int Mail string}
user := User{ Name: "山田 太郎", Age: 10, Mail: "yamada@example.com",}
fmt.Println(user.Name)