【GO】Golang ~ 基本編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/04/12/145237
https://dk521123.hatenablog.com/entry/2020/04/03/000000

の続き。
今回は、GO言語の基本的な文法に触れる。

なお、その他の文法は、以下の関連記事を参照のこと。

Golang ~ 基本編 / 関数 ~
https://dk521123.hatenablog.com/entry/2021/05/03/000000
Golang ~ 基本編 / 構造体 ~
https://dk521123.hatenablog.com/entry/2021/05/01/000000
Golang ~ 基本編 / ポインタ/アドレス ~
https://dk521123.hatenablog.com/entry/2021/05/02/000000

目次

【1】変数宣言
【2】判定(IF文, SWITH文)
【3】繰り返し(FOR文)
【4】配列
【5】辞書
【6】型変換
【7】import
【8】定数・Const

【1】変数宣言

package main

import "fmt"

func main() {
    // 方法1:「var」
    var value1_1 int = 1
    var value1_2 float64 = 1.2
    var value1_3 string = "Hello"
    var value1_4 bool = true
    fmt.Println(value1_1, value1_2, value1_3, value1_4)

    fmt.Println("=+=+=+=+=+=+=+=+=+=+=+=+")

    // 方法2:「:=」
    value2_1 := 1
    value2_2 := 1.2
    value2_3 := "World"
    value2_4 := false
    fmt.Println(value2_1, value2_2, value2_3, value2_4)
    fmt.Printf("%T, %T, %T, %T", value2_1, value2_2, value2_3, value2_4)
}

出力結果

1 1.2 Hello true
=+=+=+=+=+=+=+=+=+=+=+=+
1 1.2 World false
int, float64, string, bool

【2】判定(IF文, SWITH文)

package main

func main() {
    money := 200
    price := 200
    
    if money > price {
        println("You can buy it")
    } else if money == price {
        println("You can, but...")
    } else {
        println("You don't have enough money")
    }

    index := 3
    switch index {
        case 0:
            println("0")
        case 1, 2:
            println("1 OR 2")
        default:
            println("default")
    }
}

【3】繰り返し(FOR文)

package main

import "fmt"

func main() {
  // for
  for i :=0; i < 5; i++ {
    fmt.Printf("i = %d\n", i)
  }

  // while的
  coundown := 5
  for coundown > 0 {
    fmt.Printf("coundown: %d\n", coundown)
    coundown--
  }

  // foreach的
  values := [2]string{"Hello", "World"}
  for i, value := range values {
    fmt.Printf("index: %d, name: %s\n", i, value)
  }
}

出力結果

i = 0
i = 1
i = 2
i = 3
i = 4
coundown: 5
coundown: 4
coundown: 3
coundown: 2
coundown: 1
index: 0, name: Hello
index: 1, name: World

【4】配列

package main

import "fmt"

func main() {
  var array1 [2]int
  array1[0] = 100
  array1[1] = 200
  fmt.Println(array1)

  var array2 []int = []int{110, 220}
  array2 = append(array2, 330)
  fmt.Println(array2)

  var array3 []int = []int{1, 2, 3, 4, 5, 6}
  fmt.Println(array3[0])
  fmt.Println(array3[1:3])
  fmt.Println(array3[:2])
  fmt.Println(array3[2:])
  fmt.Println(array3[:])

  // Make & Cap
  array4 := make([]int, 3, 5)
  fmt.Printf("len=%d cap=%d value=%v\n",
    len(array4), cap(array4), array4)

出力結果

[100 200]
[110 220 330]
1
[2 3]
[1 2]
[3 4 5 6]
[1 2 3 4 5 6]
len=3 cap=5 value=[0 0 0]

【5】辞書

package main

import "fmt"

func main() {
  mapper := map[string]int {"key1": 100, "key2": 200}
  fmt.Println(mapper["key1"], mapper["key2"])

  mapper2 := make(map[string]int)
  mapper2["key3"] = 300
  fmt.Println(mapper2["key3"])
}

出力結果

100 200
300

【6】型変換

package main

import "fmt"
import "strconv"

func main() {
  // float64 => int
  var floatValue float64 = 1.2
  intValue := int(floatValue)
  fmt.Printf("%T, %v\n", intValue, intValue)

  // string => int
  var strValue string = "2020"
  intValue2, _ := strconv.Atoi(strValue)
  fmt.Printf("%T, %v\n", intValue2, intValue2)
}

出力結果

int, 1
int, 2020

【7】import

package main

import "fmt"
import "time"
import "strings"

func main() {
  fmt.Println("Now : ", time.Now())
     
  result1 := strings.Replace("Hello", "e", "a", 1)
  fmt.Println("result1 : ", result1)
  result2 := strings.Contains("Hello", "H")
  fmt.Println("result2 : ", result2)
}

出力結果

Now :  2020-04-21 22:30:48.8669446 +0900 JST m=+0.002969201
result1 :  Hallo
result2 :  true

【8】定数・Const

package main

import "fmt"

// User 文字列定数
const User = "Mike"
// Pi 数字定数 
const Pi = 3.1415

func main() {
    fmt.Println(User, Password)
}

関連記事

Golang ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/04/12/145237
Golang ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2020/04/03/000000
Golang ~ 基本編 / 関数 ~
https://dk521123.hatenablog.com/entry/2021/05/03/000000
Golang ~ 基本編 / 構造体 ~
https://dk521123.hatenablog.com/entry/2021/05/01/000000
Golang ~ 基本編 / ポインタ/アドレス ~
https://dk521123.hatenablog.com/entry/2021/05/02/000000
Golang ~ 基本編 / インターフェイス
https://dk521123.hatenablog.com/entry/2021/05/04/000000
Golang ~ 並列プログラミング(Goルーチン/チャネル) ~
https://dk521123.hatenablog.com/entry/2021/05/05/000000