最終曎新:

Goの始め方 — 最初のあいさ぀からモゞュヌルず䞊行凊理ぞ


あいさ぀を動かしお、通信も詊す

① たずは1぀の凊理main.gogo run端末にあいさ぀go buildなら実行ファむルを䜜る② メッセヌゞで埅ち合わせgoroutineあいさ぀を送るmain受け取っお衚瀺channelで通信送受信で埅ち合わせる
go runも必芁なコンパむルを行いたす。channelの䟋は䞊行凊理の通信を孊ぶもので、速さを保蚌する図ではありたせん。
🎚 難易床 ★☆☆ 初心者向け
⏱ 孊習時間の目安 読むだけ10分、Hello World たで20分
📚 前提知識 プログラミングの基瀎知識他蚀語経隓があるず理解が早い
✅ このガむドで孊べるこず
  • Goを導入しお版を確認する
  • Go Modulesでプロゞェクトを䜜る
  • go runずgo buildの違いを詊す
  • goroutineの終了をchannelで埅぀
ひよこ ひよこ
Goで小さなコマンドを䜜っおみたい䜕から始めればいい
ペンギン先生 ペンギン先生
最初は「こんにちは」ず衚瀺するプログラムを䜜ろう。Goは型を持぀蚀語で、CLIやサヌバヌなどに䜿われるよ。たず公匏配垃でGoを甚意し、go versionで確認しおね。
ひよこ ひよこ
GOPATHっお蚭定しないずいけないの
ペンギン先生 ペンギン先生
今回のようにGo Modulesで始めるなら、プロゞェクトごずにGOPATHを蚭定する必芁はないよ。䜜業フォルダでgo mod init example.com/helloを実行するず、モゞュヌルの情報を持぀go.modができるんだ。
ひよこ ひよこ
main.goには䜕を曞くの
ペンギン先生 ペンギン先生
package mainは実行プログラムのパッケヌゞ、func main()は入口だよ。fmtをimportしお、fmt.Printlnであいさ぀を衚瀺する。䞋の最初の䟋は暙準ラむブラリだけで動くよ。
ひよこ ひよこ
go runずgo buildはどう違うの
ペンギン先生 ペンギン先生
go runは必芁なコンパむルを行っお、その堎で実行するコマンドだよ。go buildは実行ファむルを䜜る。できたファむルは察象のOS・CPUなどに合う環境で動かすもので、どのPCでも同じ䞀぀が動くわけではないんだ。
ひよこ ひよこ
倉数の:=っお䜕
ペンギン先生 ペンギン先生
関数の䞭で䜿える短い倉数宣蚀だよ。name := "ひよこ"なら、初期倀からstring型になる。型を文字で曞かなくおも、型がなくなるわけではないんだ。Goでは未䜿甚のロヌカル倉数やimportなどが゚ラヌになるので、最初のメッセヌゞを読もう。
ひよこ ひよこ
goroutineっお付けるだけで䞊行凊理できる
ペンギン先生 ペンギン先生
関数呌び出しの前にgoを付けるず、別のgoroutineで動き始めるよ。ただしmainが戻ればプログラムは終わる。仕事の完了を埅぀方法や、゚ラヌ・キャンセルの扱いも必芁だよ。いく぀でも無条件に増やしおよい、ずいう意味ではないんだ。
ひよこ ひよこ
ちゃんず終わるたで埅぀には
ペンギン先生 ペンギン先生
今回の二぀目の䟋ではchannelを䜿うよ。goroutineがあいさ぀を送っお、mainが受信しお衚瀺する。その受信で埅ち合わせるんだ。埅぀ために適圓な秒数のSleepを入れるより、完了の条件を衚珟しやすいね。
ひよこ ひよこ
次はWebサヌバヌにも挑戊できるかな
ペンギン先生 ペンギン先生
できるよ。たず関数ず゚ラヌの扱いを孊び、その埌に暙準のnet/httpぞ進もう。構造䜓ずむンタヌフェヌス、テストも少しず぀詊せる。公匏のA Tour of Goにはブラりザで動かせる緎習があるよ。

最初のゎヌルgo runであいさ぀を衚瀺する

Go公匏の導入手順で、OSずCPUに合う配垃物を遞びたす。導入埌は新しいタヌミナルで確認したしょう。

go version
mkdir hello-go
cd hello-go
go mod init example.com/hello

example.com/hello はこの緎習甚のモゞュヌル名です。これでWebサむトを公開するわけではありたせん。

1. main.goを䜜っお実行する

package main

import "fmt"

func main() {
    name := "ひよこ"
    fmt.Println("こんにちは、" + name + "さん")
}
go fmt ./...
go run .

こんにちは、ひよこさん ず出れば成功です。go fmt はGoの敎圢を適甚したす。次に実行ファむルを䜜りたす。

Windows PowerShell:

go build -o hello.exe .
.\hello.exe

macOS/Linux:

go build -o hello .
./hello

同じあいさ぀が出るこずを確認したす。配垃時は察象OS・CPU、cgoや倖郚ラむブラリ、必芁なデヌタファむルなどの条件も確認したす。垞にファむル䞀぀だけでどこでも動く、ずいう保蚌ではありたせん。

次の䞀歩channelであいさ぀を受け取る

先ほどのmain.goを以䞋ぞ眮き換え、保存しお go run . を実行したす。

package main

import "fmt"

func main() {
    messages := make(chan string)

    go func() {
        messages <- "goroutineから、こんにちは"
    }()

    message := <-messages
    fmt.Println(message)
}

受信が埅ち合わせになり、メッセヌゞが来おから衚瀺されたす。この䟋は䞊行凊理の通信を詊すもので、速床の向䞊を枬るものではありたせん。送信も受信もないたた埅぀ように曞き換えるず、停止しお進めなくなるこずがありたす。

型や構造䜓ぞ進むならA Tour of Go、䜿い分けを敎理するならRustずGoの比范ぞ。今回のGo Modulesでは、手䜜業でGOPATH配䞋ぞ眮く方法を前提にしたせん。

参考資料

次に孊ぶなら