golang入門 知っておきたい基礎文法20選
今回はGo言語の基礎文法の中で特に重要な20選をリストアップします。
パッケージ宣言
すべてのGoファイルはパッケージ宣言から始まります。mainパッケージがプログラムの開始点です。
package main
インポート宣言
外部パッケージを利用するための宣言です。複数のパッケージをインポートする際は、括弧を使用します。
import (
"fmt"
"math"
)
関数宣言
関数はfuncを使用して定義します。
main関数は特別でプログラムのエントリーポイントとして使用します。
func main() {
fmt.Println("Hello, world!")
}
変数宣言
変数はvarを使って宣言します。
型を明示することも推論させることもできます。
var name string = "Alice"
var age = 30
定数宣言
定数はconstを使用して宣言します。定数の値はコンパイル時に決定されます。
const Pi = 3.14
基本データ型
Goには整数型、浮動小数点型、論理型、文字列型などの基本データ型があります。
var i int = 42
var f float64 = 3.1415
var b bool = true
var s string = "Hello"
if
条件分岐には if 文を使用します。
括弧は不要ですが、ブロックは波括弧で囲む必要があります。
if x > 0 {
fmt.Println("x is positive")
}
for
繰り返し処理にはforループを使用します。
C言語風の書き方の他に範囲ベースの繰り返しも可能です。
for i := 0; i < 10; i++ {
fmt.Println(i)
}
switch
複数の条件分岐にはswitch文を使用します。
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
fmt.Printf("%s.\n", os)
}
スライス
配列よりも動的なシーケンスデータ型です。
スライスは内部的に配列を参照しています。
:= []int{1, 2, 3}
s = append(s, 4)
マップ
キーと値のペアを格納するデータ構造です。
キーには任意の型を使用できます。
m := make(map[string]int)
m["key"] = 42
メソッド宣言
Goでは任意の型にメソッドを定義できます。レシーバーを関数定義の前に指定します。
type Point struct {
X, Y float64
}
func (p *Point) Scale(s float64) {
p.X = p.X * s
p.Y = p.Y * s
}
インターフェース
メソッドのシグネチャの集まりで任意の型の振る舞いを抽象化します。
type Geometry interface {
Area() float64
}
エラーハンドリング
Goではエラーを値として返します。
if err != nil {
log.Fatal(err)
}
ゴルーチンとチャネル
非同期処理と並行処理を簡単に実装できます。
ゴルーチンは軽量スレッドのようなもので、チャネルはそれらの間でデータをやりとりするためのパイプです。
go func() {
time.Sleep(1 * time.Second)
fmt.Println("Done")
}()
構造体(Structs)
Goの構造体は関連するデータを一つの単位にまとめるために使用されます。構造体はタイプセーフで、各フィールドに特定の型を持たせることができます。
type Person struct {
Name string
Age int
}
var p Person
p.Name = "Alice"
p.Age = 30
ポインタ
ポインタは、メモリ上の位置を指す値です。Goではポインタを使って、大きなデータ構造を効率的に扱ったり、関数内での値の変更を呼び出し元に反映させたりすることができます。
func increment(x *int) {
*x = *x + 1
}
var myInt int = 42
increment(&myInt)
fmt.Println(myInt)
型アサーションと型スイッチ
型アサーションはインターフェース値が特定の型を持つかをチェックし、その型の値を抽出するために使います。
型スイッチは複数の型アサーションを効率的に処理する構文です。
var i interface{} = "hello"
s := i.(string)
fmt.Println(s)
switch typeVar := i.(type) {
case string:
fmt.Println("i is a string", typeVar)
case int:
fmt.Println("i is an int")
default:
fmt.Println("i is another type")
}
パッケージの初期化
Goではパッケージレベルの変数がプログラムの開始前に初期化されます。init関数を使用すると、main関数より先に特定の設定や初期化を実行できます。
var complexConfig *Config
func init() {
complexConfig = loadConfig()
}
defer
deferを使用すると関数の残りの部分が実行された後で関数の実行が遅延されます。
func readFile(filename string) ([]byte, error) {
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer f.Close()
return ioutil.ReadAll(f)
}
golangの案件を探すならクラウドワークス テック
golangをもっと詳しくなりたい方に
初めてのGo言語
Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。
詳解Go言語Webアプリケーション開発
こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。
以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。
【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)
まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。