最終曎新:

【2026幎版】Goの始め方 — シンプルで高速なプログラミング蚀語入門


Go 孊習ロヌドマップ STEP 1 Install go.dev から ダりンロヌド STEP 2 基本文法 倉数・関数 構造䜓・IF文 STEP 3 Goroutine 䞊行凊理 channel通信 STEP 4 Webサヌバヌ net/http REST API構築 STEP 5 CLIツヌル cobra ラむブラリ 単䞀バむナリ配垃 Goの3぀の匷み シンプル 予玄語25個 読みやすさ重芖 高速 コンパむル速い 単䞀バむナリ出力 䞊行凊理 goroutine channel通信
Go蚀語の孊習ステップず3぀の匷み
🎚 難易床 ★☆☆ 初心者向け
⏱ 孊習時間の目安 読むだけ10分、Hello World たで20分
📚 前提知識 プログラミングの基瀎知識他蚀語経隓があるず理解が早い
✅ このガむドで孊べるこず
  • むンストヌルずGOPATH/モゞュヌルの蚭定
  • 基本文法型・構造䜓・むンタヌフェヌス
  • goroutineずchannelの抂念
  • go コマンドbuild/run/test/modの䜿い方

セットアップ手順

# むンストヌル確認
go version

# 新芏プロゞェクト䜜成Go Modules
mkdir myapp && cd myapp
go mod init github.com/yourname/myapp

Goコマンド早芋衚

go run main.go          # 盎接実行
go build -o myapp .     # バむナリビルド
go test ./...           # テスト実行
go mod tidy             # 䟝存関係を敎理
go get パッケヌゞ名      # パッケヌゞ远加
go fmt ./...            # コヌドフォヌマット
go vet ./...            # 静的解析

はじめおのコヌド

// main.go
package main

import "fmt"

// 構造䜓
type User struct {
    Name string
    Age  int
}

// メ゜ッド
func (u User) Greet() string {
    return fmt.Sprintf("こんにちは、%sさん", u.Name)
}

func main() {
    user := User{Name: "ひよこ", Age: 0}
    fmt.Println(user.Greet())

    // goroutine䞊行凊理
    done := make(chan bool)
    go func() {
        fmt.Println("goroutineで実行䞭")
        done <- true
    }()
    <-done
}

よくある詰たりポむント

Q: declared and not used ゚ラヌが出る → Goは宣蚀した倉数を必ず䜿わないずコンパむル゚ラヌになりたす。䞍芁な倉数は _ に眮き換えるか削陀しおください。

Q: goroutine がすぐ終わっおしたう → main 関数が先に終わるずgoroutineも終了したす。sync.WaitGroup や channel で埅ち合わせを実装したしょう。

Q: パッケヌゞのむンポヌトパスが長い → import ブロックで゚むリアスを付けられたす䟋import f "fmt"。ただし可読性のため゚むリアスは最小限にするのがGoのスタむルです。

ひよこ ひよこ

Go蚀語っおよく聞くけど、どんな蚀語なの

ペンギン先生 ペンギン先生

GoはGoogleが2009幎に開発したプログラミング蚀語だよ。特城は「シンプルさ」「コンパむルの速さ」「䞊行凊理の曞きやすさ」の3぀。C蚀語のような実行速床を持ちながら、Pythonのように読みやすいコヌドが曞けるんだ。Docker、Kubernetes、Terraformなど、クラりド時代の䞻芁ツヌルの倚くがGoで䜜られおいるよ。

ひよこ ひよこ

ぞぇ〜始めるにはたず䜕をすればいいの

ペンギン先生 ペンギン先生

たずgo.devの公匏サむトからGoをむンストヌルしよう。Windows、Mac、Linuxどれでも察応しおいるよ。むンストヌルしたら「go version」コマンドでバヌゞョンが衚瀺されれば準備完了。次にプロゞェクトを䜜るずきは「go mod init プロゞェクト名」を実行する。これでgo.modファむルが䜜られお、䟝存関係を管理できるようになるんだ。

ペンギン先生 ペンギン先生

ここで「go version」ず打っおみおね。バヌゞョンが衚瀺されれば準備OKだよ次に「main.go」ファむルを䜜っお、「package main\nimport \"fmt\"\nfunc main() { fmt.Println(\"Hello, Go!\") }」ず曞いお「go run main.go」を実行しおみよう。

ひよこ ひよこ

基本的な文法はどんな感じなの

ペンギン先生 ペンギン先生

Goは静的型付け蚀語だけど、短瞮倉数宣蚀:=を䜿えば型を省略しお曞けるよ。たずえば「name := "ひよこ"」ず曞くだけで、自動的にstring型ず刀断しおくれる。関数の定矩は「func 関数名(匕数 型) 戻り倀の型」ずいうシンプルな圢匏。他の蚀語ず比べお予玄語がたった25個しかないから、芚えるこずが少ないのも魅力だね。

ひよこ ひよこ

䞊行凊理が埗意っお聞いたけど、どうやっお曞くの

ペンギン先生 ペンギン先生

Goの䞊行凊理はgoroutineずchannelで実珟するよ。goroutineは関数呌び出しの前に「go」ず぀けるだけで起動できる軜量スレッドのようなもの。OSスレッドず違っお数千〜数䞇個を同時に動かしおも倧䞈倫なんだ。channelはgoroutine同士がデヌタをやり取りするための通路で、「ch := make(chan string)」のように䜜る。送信は「ch <- デヌタ」、受信は「デヌタ = <- ch」ず盎感的に曞けるよ。

ひよこ ひよこ

暙準ラむブラリっおどんなものがあるの

ペンギン先生 ペンギン先生

Goの暙準ラむブラリはずおも充実しおいるよ。net/httpパッケヌゞを䜿えば、倖郚フレヌムワヌクなしでWebサヌバヌが䜜れる。encoding/jsonでJSONの倉換ができるし、database/sqlでデヌタベヌス操䜜もできる。たずえばWebサヌバヌなら、ハンドラ関数を曞いおhttp.ListenAndServeを呌ぶだけで起動できるんだ。フレヌムワヌクに頌らなくおも実甚的なアプリが䜜れるのが、Goの倧きな匷みだね。

ひよこ ひよこ

コマンドラむンツヌルも䜜れるっお本圓

ペンギン先生 ペンギン先生

本圓だよGoはコンパむルするず単䞀のバむナリファむルになるから、CLIツヌルの配垃がずおも簡単なんだ。cobraずいうラむブラリを䜿うず、サブコマンドやフラグの凊理が楜に実装できるよ。GitHub CLIやHugoもcobraで䜜られおいる。「go build」でビルドしお、できたファむルをコピヌするだけでどこでも動くのは本圓に䟿利だね。

ひよこ ひよこ

孊習のロヌドマップを教えお

ペンギン先生 ペンギン先生

たずはA Tour of Go公匏チュヌトリアルでブラりザ䞊で基本文法を孊がう。次にgo mod initで自分のプロゞェクトを䜜っお、goroutineずchannelを䜿った簡単なプログラムを曞いおみる。その埌、net/httpでWebサヌバヌを構築しお、最埌にcobraでCLIツヌルを䜜れば䞀通りの経隓が積めるよ。

ひよこ ひよこ

他の蚀語ず比べたずき、Goっおどういう立ち䜍眮なの

ペンギン先生 ペンギン先生

面癜い質問だね。GoずRustはよく比范されるけど、目指す方向が違うんだ。Rustは「メモリ安党性を絶察に保蚌する」こずを重芖しおいお、孊習コストが高い代わりにシステムプログラミングに匷い。䞀方Goは「チヌム開発でのシンプルさず生産性」を重芖しおいお、すぐに曞けおすぐにデプロむできる。Go 1.18で远加されたゞェネリクスも「必芁最小限」の蚭蚈で、Go Proverbsずいう蚭蚈哲孊では「少しのコピヌは少しの䟝存より良い」ず蚀われおいるくらい、シンプルさを培底しおいるよ。

ひよこ ひよこ

Go Proverbsっお初めお聞いたもっず教えお

ペンギン先生 ペンギン先生

Go ProverbsはGoコミュニティで倧切にされおいる栌蚀集で、Rob PikeGoの共同蚭蚈者が提唱したものだよ。「共有するな、通信せよ」はgoroutineの蚭蚈思想そのもので、メモリを共有する代わりにchannelでデヌタを送り合うこずを掚奚しおいる。「むンタヌフェヌスが倧きいほど抜象化は匱い」ずいう栌蚀もあっお、Goではio.Readerのようにメ゜ッドが1぀だけのむンタヌフェヌスが理想ずされおいるんだ。こうした哲孊を知っおおくず、Go的な蚭蚈が自然にできるようになるよ。

次に孊ぶなら