4.0 KiB
4.0 KiB
Go言語の特徴
-
シンプル & 高速
- 文法がシンプルで読みやすい
- コンパイルが速く、実行時も高速
-
静的型付け
- int, string, bool などの型を明示(または推論)
-
並行処理が得意(goroutine & channel)
- 軽量スレッド(goroutine)を使って並行処理が簡単
-
単一バイナリでデプロイ
- 依存関係を含む1つのバイナリで配布可能
-
ガベージコレクション(GC)あり
- 手動でメモリ管理しなくてもOK
-
クロスコンパイルが簡単
- Windows, Linux, macOS用のバイナリを簡単に作れる
-
Go言語にclassはない
- 構造体(struct)+メソッド+インターフェースでオブジェクト指向のような設計は可能
構文例
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
- package
- 名前空間(Namespace)のようなものです。
package main
は、Goプログラムのエントリーポイント(実行可能なプログラム) を示します。
import "fmt"
- 標準ライブラリのfmtパッケージ(文字列出力などの機能を持つ)です。
書き方
変数について
func main() {
var message string = "Hello, Go!"
fmt.Println(message)
// 型推論
num := 42
fmt.Println(num)
}
var
を使って明示的に型を指定できる:=
を使うと、型推論で自動的に型が決まる(関数内のみ)
配列・MAP(連想配列/辞書)
配列の扱い方
配列(固定長)
// 配列(固定長)
var arr [3]int = [3]int{1, 2, 3}
fmt.Println(arr)
配列(可変長)
// 配列(固定長)
slice := []int{1, 2, 3, 4, 5}
fmt.Println(slice)
// スライスの追加(append)
slice = append(slice, 6)
fmt.Println(slice)
// スライスの部分取り出し
fmt.Println(slice[1:4]) // [2,3,4]
MAP(連想配列/辞書)の扱い方
// マップの作成
user := map[string]int{
"Alice": 25,
"Bob": 30,
}
fmt.Println(user)
// 値の取得
age := user["Alice"]
fmt.Println("Alice's age:", age)
キーの存在チェック
if val, exists := user["Charlie"]; exists {
fmt.Println("Charlie is", val)
} else {
fmt.Println("Charlie not found")
}
キーの削除
delete(user, "Bob")
fmt.Println(user)
構造体(struct)
- C言語のstructと似ています
.
を使ってフィールドにアクセス
// 構造体の定義
type User struct {
Name string
Age int
}
func main() {
// インスタンス生成
u := User{Name: "Alice", Age: 25}
fmt.Println(u)
// フィールドの変更
u.Age = 26
fmt.Println(u)
}
structにメソッドを定義する
// メソッドの定義(クラスのメソッドに相当)
func (u User) Greet() {
fmt.Println("Hello, my name is", u.Name)
}
関数について
funcで関数を定義
func greet(name string) string {
return "Hello, " + name
}
条件分岐
if文
- ifは( )が不要
if x > 5 {
fmt.Println("x is greater than 5")
} else {
fmt.Println("x is 5 or less")
}
Goroutine(並行処理)
- goをつけると新しいGoroutine(軽量スレッド)として並行実行される
package main
import (
"fmt"
"time"
)
func printMessage(msg string) {
for i := 0; i < 5; i++ {
fmt.Println(msg)
time.Sleep(time.Millisecond * 500)
}
}
func main() {
go printMessage("Hello") // 並行処理で実行
go printMessage("World") // 並行処理で実行
time.Sleep(time.Second * 3) // メインスレッドが終了しないように待つ
}
Go言語のプロジェクトを実行する
go mod init <モジュール名>