0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Goの全キーワードまとめ

Posted at

はじめに

Go 言語仕様で予約されているキーワード25個の一覧と、それぞれの説明および使用例を紹介します。
gotofallthroughなどは知らなかったので、良い機会になりました。
以下の語は Go 言語があらかじめ予約しているキーワードなので、変数名や関数名など自分で名前を付ける識別子には使えません。

一覧表

キーワード 説明 使用例
break ループ (for) や switch から抜ける for i := 0; i < 10; i++ { if i == 5 { break } }
continue ループの次の反復へ飛ぶ for i := 0; i < 5; i++ { if i%2 == 0 { continue } ; fmt.Println(i) }
goto 任意のラベルへ無条件ジャンプ Label: fmt.Println("start"); goto Label
fallthrough switch の次の case を実行(Go はデフォルトでフォールスルーしない) switch n { case 1: fmt.Println(1); fallthrough; case 2: fmt.Println(2) }
default switch/select のどの case にも該当しない場合に実行 switch x { case 1: …; default: fmt.Println("no match") }
case switch/select 内の各分岐条件 switch day := "Sat"; day { case "Sat", "Sun": fmt.Println("Weekend") }
if 条件式に基づく分岐 if v := math.Sqrt(2); v > 1 { fmt.Println(v) }
else if の条件が偽のときに実行 if x%2 == 0 { fmt.Println("even") } else { fmt.Println("odd") }
for Go の唯一のループ構造 for i := 0; i < 3; i++ { fmt.Println(i) }
range 配列・スライス・マップ・チャネルをイテレーション for i, v := range []int{2, 3, 4} { fmt.Println(i, v) }
switch 値または条件に応じた多岐分岐 switch os := runtime.GOOS; os { case "linux": …; default: … }
select 複数チャネル操作を待ち、準備できたものをひとつ実行 select { case v := <-ch: fmt.Println(v); case ch <- 1: }
go 新しいゴルーチンを起動 go doWork()
defer 関数終了時に呼び出しを遅延 defer file.Close()
import 他パッケージをインポート import "fmt"; import "math"
package ソースファイルの所属パッケージを宣言 package main
func 関数やメソッドを定義 func add(x, y int) int { return x + y }
return 関数から値を返し実行を終了 func swap(a, b string) (string, string) { return b, a }
var 変数を宣言 var x, y int = 1, 2; z := 3
const 定数を宣言(iota と組み合わせ可能) const Pi = 3.14; const ( A = iota; B; C )
type 新しい型(構造体・エイリアス・インターフェースなど)を定義 type MyInt = int; type User struct { Name string }
struct フィールドの集まりとして構造体を定義 type Point struct { X, Y float64 }; p := Point{1, 2}
interface メソッド集合で型の振る舞いを定義 type Shape interface { Area() float64 }
map キーと値のペアを持つハッシュマップ型 m := make(map[string]int); m["ans"] = 42
chan ゴルーチン間でデータをやり取りするチャネルを定義 ch := make(chan int); go func() { ch <- 3 }(); fmt.Println(<-ch)

break

  • 説明
    ループ (for) や switch 文の実行を即座に終了し、次の文に制御を移します

  • 使用例

    for i := 0; i < 10; i++ {
        if i == 5 {
            break
        }
        fmt.Println(i)
    }
    // 出力: 0 1 2 3 4
    

continue

  • 説明
    ループの現在の反復処理をスキップし、次の反復処理に移ります
  • 使用例
    for i := 0; i < 5; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Println(i)
    }
    // 出力: 1 3
    

goto

  • 説明
    任意のラベルに無条件でジャンプします。可読性を損ないやすいため、使用は慎重に行います
  • 使用例
    i := 0
    Start:
        fmt.Println(i)
        i++
        if i < 3 {
            goto Start
        }
    // 出力: 0 1 2
    

fallthrough

  • 説明
    switch 文で現在の case から次の case に制御を移します。Go ではデフォルトでフォールスルーしないため、明示的指定が必要です
  • 使用例
    switch 2 {
    case 1:
        fmt.Println("1")
    case 2:
        fmt.Println("2")
        fallthrough
    case 3:
        fmt.Println("3")
    }
    // 出力: 2 3
    

default

  • 説明
    switch または select 文で、他の case にマッチしない場合に実行されるブロックを示します
  • 使用例
    switch x := 5; x {
    case 1:
        fmt.Println("1")
    default:
        fmt.Println("default")
    }
    // 出力: default
    

case

  • 説明
    switchselect 文内での分岐条件を表します
  • 使用例
    switch day := "Sat"; day {
    case "Sat", "Sun":
        fmt.Println("Weekend")
    default:
        fmt.Println("Weekday")
    }
    // 出力: Weekend
    

if

  • 説明
    条件式に基づきコードブロックを実行します。短いステートメントを先行させて変数スコープを限定可能です
  • 使用例
    if v := math.Sqrt(2); v > 1 {
        fmt.Println(v)
    }
    // 出力: 1.4142135623730951
    

else

  • 説明
    if の条件が偽の場合に実行されるブロックを示します
  • 使用例
    if x%2 == 0 {
        fmt.Println("even")
    } else {
        fmt.Println("odd")
    }
    

for

  • 説明
    Go の唯一のループ構造。従来の for、条件のみ、range 形式があります
  • 使用例
    for i := 0; i < 3; i++ {
        fmt.Println(i)
    }
    // 出力: 0 1 2
    

range

switch

  • 説明
    与えられた式の値によって複数分岐を行います。最初にマッチした case が実行されます
  • 使用例
    switch os := runtime.GOOS; os {
    case "darwin":
        fmt.Println("OS X.")
    case "linux":
        fmt.Println("Linux.")
    default:
        fmt.Printf("%s.\n", os)
    }
    

select

  • 説明
    複数チャネル操作を待ち受け、準備できたケースをランダムに1つ実行します
  • 使用例
    ch1 := make(chan int)
    ch2 := make(chan int)
    go func() { ch1 <- 1 }()
    select {
    case v := <-ch1:
        fmt.Println("Received", v)
    case ch2 <- 2:
        fmt.Println("Sent 2")
    }
    // ほとんどの場合: Received 1
    

go

  • 説明
    新しいゴルーチン(軽量スレッド)を起動します。並行実行を実現する基本手段です
  • 使用例
    go func() {
        fmt.Println("Hello from goroutine")
    }()
    fmt.Println("Hello from main")
    

defer

  • 説明
    関数終了時に指定した関数呼び出しを実行します。リソースの解放等で利用されます
  • 使用例
    func main() {
        defer fmt.Println("world")
        fmt.Println("hello")
    }
    // 出力: hello world
    

import

  • 説明
    他パッケージを取り込み、利用可能にします
  • 使用例
    import (
        "fmt"
        "math"
    )
    

package

  • 説明
    ソースファイルの所属パッケージを宣言します。main パッケージは実行可能バイナリを生成します
  • 使用例
    package main
    

func

  • 説明
    関数やメソッドを定義します。複数戻り値や名前付き戻り値をサポートします
  • 使用例
    func add(x, y int) int {
        return x + y
    }
    

return

  • 説明
    関数から値を返し、実行を終了します。名前付き戻り値を使うと単に return だけで返せます
  • 使用例
    func swap(x, y string) (a, b string) {
        a, b = y, x
        return
    }
    

var

  • 説明
    変数を宣言します。複数変数の同時宣言や初期化が可能です
  • 使用例
    var i, j int = 1, 2
    

const

  • 説明
    定数を宣言します。iota と組み合わせて列挙型のように使えます
  • 使用例
    const Pi = 3.14
    const (
        A = iota
        B
        C
    )
    

type

  • 説明
    新しい型を定義します。構造体、インターフェース、エイリアス型などを作成可能です
  • 使用例
    type Vertex struct {
        X, Y float64
    }
    type MyInt = int
    

struct

  • 説明
    フィールドの集まりとして構造体を定義します。Go の基本データ構造です
  • 使用例
    type Vertex struct {
        X, Y float64
    }
    v := Vertex{X: 1, Y: 2}
    

interface

  • 説明
    メソッドの集合で振る舞いを定義する型を作ります。実装は暗黙的に行われます
  • 使用例
    type Shape interface {
        Area() float64
    }
    

map

  • 説明
    キーと値のペアを保持するハッシュマップ型を定義します
  • 使用例
    m := make(map[string]int)
    m["answer"] = 42
    

chan

  • 説明
    ゴルーチン間でデータをやり取りするチャネル型を定義します
  • 使用例
    ch := make(chan int)
    go func() { ch <- 3 }()
    fmt.Println(<-ch)
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?