Go 入門

Goに入門したので、メモに残す意味で記事にしました。

環境構築

手っ取り早いのでDocker, Docker Composeで準備します。

FROM golang:latest

ARG WORKDIR=/home/docker/work

WORKDIR $WORKDIR

ADD . $WORKDIR
version: '3.8'
services:
  go:
    build:
      context: ./
      dockerfile: Dockerfile
    volumes:
      - .:/home/docker/work/

下記コマンドで起動します。

$ docker-compose run go bash

とりあえずHello Worldを表示します。

package main

func main() {
    println("Hello World!")
}

goを実行するのにgo.modファイルが必要見たいです、 Githubのレポジトリを指定するのが普通みたいですが、 一旦チュートリアルにあるexample/helloを指定します。

下記コマンドでgo.modファイルを作成します。

$ go mod init example/hello

作成ができたらHello World を表示してみます。

$ go run .
Hello World!

環境構築はこのくらいでしょうか。

変数とデータ型

変数宣言

var 変数名 データ型

// 変数宣言と同時に代入もできます
var 変数名 データ型 = 値

// 宣言と同時に代入する場合は型の省略ができます
var 変数名 = 値

// さらに上の書き方の場合はvarを省略して以下のように書けます
変数名 := 値

var msg string
msg = "msg 1"

var msg2 string = "msg 2"

変数の自己代入

number := 100
// number = number + 20 を省略すると
number += 20

# インクリメント
number++
# ディクリメント
number--

配列

変数名 := [要素数]データ型{ 要素 }
// 要素数は省力が可能

names := []string{"name1", "name2", "name3"}

条件分岐

if

if 条件式 {
    ・・・
} else if 条件式 {
    ・・・
} else {
    ・・・
}

「また」や「かつ」はそれぞれ ||, && を使います。

「否定」を表す時は !をつけます。


number := 100

println(50 <= number && number <= 120) // true

println(number < 0 || 1 < number) // true

println(!(number < 0)) // true

swich

if と同じことがswichで書けます。


number := 100

swich number {
    case 0:
        // number が 0 の時の処理
    case 10, 50:
        // number が 10または50の時の処理
    default:
        // 上記以外の時の処理
}

繰り返し

for 値の初期化; 条件; 値の更新 {

}

for i := 1; i < 6; i++ {
    println(i)
}

range関数を使うことで配列とインデックスの両方を取得できます。

names := []string{"name1", "name2", "name3"}
for i, name := range names {
    println(i, name)
}