チュートリアル

Go基礎:はじめてのGo

Go入門プログラミング
広告エリア

はじめに

GoはGoogleが開発したシンプルで高速な言語です。並行処理が得意で、Webサーバーやツール開発に適しています。

Hello World

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
# 実行
go run main.go

# ビルド
go build main.go
./main

変数

変数の宣言

// var で宣言
var name string = "太郎"
var age int = 25

// 型推論
var city = "東京"

// 短縮形(関数内のみ)
country := "日本"

// 複数変数
var x, y, z int = 1, 2, 3
a, b := "hello", 42

// ゼロ値(初期化しない場合のデフォルト)
var i int       // 0
var s string    // ""
var b bool      // false
var p *int      // nil

定数

const Pi = 3.14159
const AppName = "MyApp"

// 複数の定数
const (
    StatusOK    = 200
    StatusError = 500
)

// iota(連番)
const (
    Sunday = iota  // 0
    Monday         // 1
    Tuesday        // 2
)

データ型

基本型

// 整数
var i int = 42
var i8 int8 = 127
var i16 int16 = 32767
var i32 int32 = 2147483647
var i64 int64 = 9223372036854775807

// 符号なし整数
var ui uint = 42
var ui8 uint8 = 255

// 浮動小数点
var f32 float32 = 3.14
var f64 float64 = 3.14159265359

// 文字列
var s string = "Hello, 世界"

// 真偽値
var b bool = true

// バイト(uint8のエイリアス)
var by byte = 'A'

// ルーン(int32のエイリアス、Unicode文字)
var r rune = ''

型変換

var i int = 42
var f float64 = float64(i)
var u uint = uint(i)

// 文字列変換
import "strconv"

s := strconv.Itoa(42)         // "42"
i, _ := strconv.Atoi("42")    // 42
f, _ := strconv.ParseFloat("3.14", 64)

演算子

// 算術演算子
a := 10 + 3   // 13
b := 10 - 3   // 7
c := 10 * 3   // 30
d := 10 / 3   // 3
e := 10 % 3   // 1

// 比較演算子
fmt.Println(5 == 5)  // true
fmt.Println(5 != 3)  // true
fmt.Println(5 > 3)   // true

// 論理演算子
fmt.Println(true && false)  // false
fmt.Println(true || false)  // true
fmt.Println(!true)          // false

条件分岐

if文

age := 20

if age >= 20 {
    fmt.Println("成人です")
} else if age >= 13 {
    fmt.Println("ティーンエイジャーです")
} else {
    fmt.Println("子供です")
}

// 初期化文付きif
if err := doSomething(); err != nil {
    fmt.Println("エラー:", err)
}

switch文

day := 3

switch day {
case 1:
    fmt.Println("月曜日")
case 2:
    fmt.Println("火曜日")
case 3:
    fmt.Println("水曜日")
default:
    fmt.Println("その他")
}

// 複数の値
switch day {
case 1, 2, 3, 4, 5:
    fmt.Println("平日")
case 6, 7:
    fmt.Println("週末")
}

// 条件式なし(if-elseの代替)
score := 85
switch {
case score >= 90:
    fmt.Println("A")
case score >= 80:
    fmt.Println("B")
default:
    fmt.Println("C")
}

ループ

// 基本的なfor
for i := 0; i < 5; i++ {
    fmt.Println(i)
}

// while的なfor
count := 0
for count < 5 {
    fmt.Println(count)
    count++
}

// 無限ループ
for {
    // break で抜ける
    break
}

// range(配列、スライス、マップの反復)
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
    fmt.Printf("%d: %d\n", index, value)
}

// インデックスだけ
for i := range numbers {
    fmt.Println(i)
}

// 値だけ(インデックス不要)
for _, value := range numbers {
    fmt.Println(value)
}

配列とスライス

配列(固定長)

// 配列の宣言
var arr [5]int
arr[0] = 1

// 初期化
numbers := [5]int{1, 2, 3, 4, 5}
numbers2 := [...]int{1, 2, 3}  // 長さを自動計算

// 長さ
fmt.Println(len(numbers))  // 5

スライス(可変長)

// スライスの作成
slice := []int{1, 2, 3, 4, 5}

// makeで作成
slice2 := make([]int, 5)      // 長さ5、容量5
slice3 := make([]int, 5, 10)  // 長さ5、容量10

// 要素の追加
slice = append(slice, 6, 7)

// スライス操作
sub := slice[1:3]   // [2, 3]
sub2 := slice[:3]   // [1, 2, 3]
sub3 := slice[2:]   // [3, 4, 5]

// 長さと容量
fmt.Println(len(slice))  // 長さ
fmt.Println(cap(slice))  // 容量

// コピー
dest := make([]int, len(slice))
copy(dest, slice)

マップ

// マップの作成
m := map[string]int{
    "apple":  100,
    "banana": 200,
}

// makeで作成
m2 := make(map[string]int)

// 要素の追加・更新
m["orange"] = 150

// 要素の取得
price := m["apple"]

// 存在確認
value, exists := m["grape"]
if exists {
    fmt.Println(value)
}

// 削除
delete(m, "apple")

// 反復
for key, value := range m {
    fmt.Printf("%s: %d\n", key, value)
}

まとめ

  • Goはシンプルで高速な静的型付け言語
  • :=で型推論付きの変数宣言
  • forが唯一のループ構文
  • 配列は固定長、スライスは可変長
  • マップはキーと値のペア

次回は関数と構造体について学びます。

広告エリア