0
0

More than 1 year has passed since last update.

はじめに

タイトル通り、いまさらながらGo言語について学習し始めたので、記事として残します。

Go言語とは

GoはGoogleが開発した静的型付けのコンパイル言語で、シンプルさと効率性を重視して設計されています。Goは非常に高速で、並行プログラミングをサポートしています。これは、CPUコアを効果的に利用して、高性能なアプリケーションを作成するために重要な特性です。

プログラムの構造

Goのプログラムはパッケージとして組織されています。mainパッケージは特別で、Goプログラムの実行はmainパッケージから始まり、main関数から始まります。例えば:

package main

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

このプログラムは"Hello, world!"と出力します。fmtは標準ライブラリの一部で、フォーマットされたI/Oを提供します。

変数と定数

Goでは、varキーワードを使って変数を宣言します。例えば:

var x int
x = 10

または、初期化と一緒に変数を宣言することもできます:

var x int = 10

また、:=演算子を使用して、型宣言を省略することもできます。この場合、変数の型は右辺の式から推論されます。

x := 10 // x is an int

定数はconstキーワードを使って宣言します。定数は、コンパイル時に値が決定され、その後は変更できません。

const Pi = 3.14

データ型

Goには、以下のような基本的なデータ型があります:

  • 整数型(int、uint、int8、uint8、int16、uint16、int32、uint32、int64、uint64): intuintは、32ビットシステムでは32ビット、64ビットシステムでは64ビットです。int8int16などの型は、数値の範囲を示しています。たとえば、int8は-128から127までの値を持つことができます。

  • 浮動小数点型(float32、float64): これらは小数点以下の数値を持つことができます。

  • 複素数型(complex64、complex128): これらは複素数を表します。

  • ブール型(bool): trueまたはfalseの値を持つことができます。

  • 文字列型(string): テキストを表します。

制御フロー

Goには、他の多くのプログラミング言語と同様に、ifforswitchといった制御フロー構造があります。

  • ifは条件分岐を行います:

    if x > 0 {
        fmt.Println("x is positive")
    }
    
  • forはループを行います。Goにはfor文しかループ構造がないため、他の言語のwhileループやdo-whileループを模倣することもできます:

    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    
  • switchは多方向の分岐を行います:

    switch x {
    case 0:
        fmt.Println("x is zero")
    case 1:
        fmt.Println("x is one")
    default:
        fmt.Println("x is neither zero nor one")
    }
    

もちろんです。それでは、Goにおける関数とエラー処理について学んでいきましょう。

関数の定義と呼び出し

Go言語では、funcキーワードを使って関数を定義します。以下に関数の基本的な定義を示します。

func greet(name string) {
    fmt.Println("Hello", name)
}

この例では、greetという名前の関数を定義しています。この関数は一つのパラメータnameを受け取り、"Hello"とそのパラメータを出力します。

この関数を呼び出すには、以下のようにします。

greet("Alice")

このコードは"Hello Alice"と出力します。

複数の戻り値

Go言語では、一つの関数が複数の値を返すことができます。これは、エラーハンドリングや複数の結果を返す必要がある関数を書く際に非常に便利です。

func divmod(a, b int) (int, int) {
    return a / b, a % b
}

この例では、divmod関数は商と余りを返します。この関数を呼び出すには、以下のようにします。

quotient, remainder := divmod(7, 3)
fmt.Println("quotient:", quotient)
fmt.Println("remainder:", remainder)

このコードは以下のように出力します。

quotient: 2
remainder: 1

エラーハンドリング

Go言語では、エラーハンドリングはerror型を用いて行います。エラーが発生する可能性がある関数は、通常、戻り値として最後にerror型の値を返します。

以下に、エラーハンドリングの例を示します。

func sqrt(x float64) (float64, error) {
    if x < 0 {
        return 0, errors.New("undefined for negative numbers")
    }
    // Compute and return square root of x
}

この例では、sqrt関数は負の数に対しては定義されていないため、xが負の場合にはエラーを返します。この関数を呼び出す際には、エラーをチェックする必要があります。

result, err := sqrt(-1)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Result:", result)
}

このコードは"Error: undefined for negative numbers"と出力します。

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