Go入門ハンズオン [説明編]

247 Views

December 14, 25

#go

スライド概要

2025年12月13日(土)に兵庫県神戸市で開催された「Go Workshop Conference 2025 IN KOBE」にて招待ワークショップとして「はじめてのGo言語教室」を開催した際に使用したテキスト「Go入門ハンズオン [説明編]」です。

profile-image

主にICTイベントでの発表資料を公開しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Go入門ハンズオン [説明編] はじめてのGo言語教室 13 December 2025 Ryuji Iwata Okayama, Japan

2.

Ryuji Iwata X (Twitter) : @qt_luigi Portfolio : sites.google.com/view/ryuji-iwata-portfolio

3.

Goとは?

4.

The Go Programming Language "高速で、信頼性が高く、効率的なソフトウェアを大規模に構築する汎用の開発言語" Build simple, secure, scalable systems with Go ✓ An open-source programming language supported by Google ✓ Easy to learn and great for teams ✓ Built-in concurrency and a robust standard library ✓ Large ecosystem of partners, communities, and tools Get Started Download Download packages for Windows 64-bit, macOS, Linux, and more The go command by default downloads and authenticates modules using the Go module mirror and Go checksum database run by Google. Learn more. go.dev/

5.

Gopher (ごーふぁー) 1. 公式マスコットキャラクター。著者はRenée French。 CC BY 3.0ライセンス。著者名を明記することで、二次創作や商用利用も可能。 2. Goを書く人や使う人の愛称。 go.dev/blog/gopher

6.

簡単な歴史 毎年2月と8月にリリースされる。 2007年9月20日:Google社内で新しいプログラミング言語の話し合いが始まる。 2007年9月25日:Rob Pike氏から"Go"という名前が提案される。 2009年11月10日:オープンソースプロジェクトとして公開(Goの誕生日) 2012年3月28日:[1.0] メジャーバージョンGo 1リリース。 2015年8月19日:[1.5] Go自身がGoで書かれる(セルフホスティング) 2022年3月15日:[1.18] ジェネリクス(総称型)が追加 2025年8月13日:[1.25] 現時点で最新版

7.

特徴

8.

強い静的型付けコンパイル形式の汎用プログラミング言語 強い:値に対して暗黙の型変換を行わない。 ● 例:「20(数値型) + "21"(文字型)」を、勝手に41, "41"や2021, "2021"にしない。 静的型付け:プログラム実行前に型が決まっている。 ● 例:文字型で宣言した変数に数値は代入できない。 コンパイル形式:ソースコードをコンピューター寄りに変換し、変換したものを実行。 ● 対称:インタープリター形式。ソースコードを逐次解釈しながら実行。 汎用プログラミング言語:様々な分野で使えるプログラミング言語。 ● クラウド専用、サーバーサイドのみ、Webアプリだけ、とかではない。 [メリット] ● 事前に型に関する人的ミスを防げて、毎回の実行速度が速く、様々な用途に使える

9.

ガベージコレクター(GC)を搭載 メモリの確保や解放をランタイムが行う仕組み。 GCによる処理の停止時間は、マイクロ秒。 [メリット] ● メモリの確保や解放に関するデザインやコーディングが不要。 ● 人的要因によるメモリリーク(メモリが確保され続ける問題)を防げる。

10.

コンパイルが速い Goが大事にしているモノのひとつ。 当時Google社では巨大なC/C++プロダクトのコンパイル時間の遅さに悩まされていた。 それらを解消すべく、Goが設計されて誕生することに。 [メリット] ● プログラムを修正して実行して確認する間隔が短く、気軽に何度でも試せる。

11.

実行バイナリーファイルを生成 プロダクションにおけるシステムの更新が容易。 ● 配布が容易(ひとつのファイル) ● システムの停止時間が短い(ファイルのコピペ) 事前のセットアップ作業が不要。 ● VM(仮想マシン)や実行ランタイムのインストールやパラメーターの設定不要。 ネイティブコードのため、実行速度が速い。 ● [高速] GCなしネイティブ > Go >= VM/実行ランタイム > インタープリター [低速] [デメリット] ● ファイルに実行ランタイムが含まれるため、ファイルサイズが大きくなる。

12.

マルチCPU/マルチコア対応 Goのウリとされているモノのひとつ。 複数の関数を同時実行させるコーディングの仕組みが用意されており、書きやすい。 ● goroutine:関数をスレッド実行させる仕組み。 ● channel:goroutine間でデータを送受信させる仕組み。 [メリット] ● goroutineは軽量のため数百〜千個の関数を同時実行させても問題ない。 ● スレッド間でデータをやりとりする仕組みがchannelとして標準で装備。

13.

マルチプラットフォーム対応 様々なOSとアーキテクチャーの組み合わせにインストール可能。 $GOOS $GOARCH ---------- -------------------- aix ppc64 android 386,amd64,arm,arm64 darwin amd64,arm64 dragonfly amd64 freebsd 386,amd64,arm illumos amd64 ios arm64 js wasm linux 386,amd64,arm,arm64,loong64,mips,mipsle,mips64,mips64le,ppc64,ppc64le,riscv64,s390x netbsd 386,amd64,arm openbsd 386,amd64,arm,arm64 plan9 386,amd64,arm solaris amd64 wasip1 wasm windows 386,amd64,arm,arm64 go.dev/doc/install/source#environment

14.

クロスコンパイルが可能 同じソースファイルから異なるアーキテクチャーの実行ファイルを生成する仕組み。 ● マシンパワーが非力なRaspberry Pi (linux/arm64)のようなシングルボートコンピューター上でコンパイルすると速度も遅くメモリも必要なため、パワーのあるデスクトップ機(windows/amd64)でコンパイルして生成して書き戻す、など。 ● パブリッククラウド上のLinux仮想マシン上で、配布用の各OS向け(Linux, macOS, Windows, FreeBSDなど)の実行ファイルを生成して管理する、など。 [メリット] ● 実行ファイルを作成のために対応する各OSのマシンを用意しなくて良い。

15.

文法がシンプル 予約語はたったの25個。 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var ● クラスなし、例外処理なし ● 判定はif文のみ、反復はfor文のみ 言語仕様書もコンパクト go.dev/ref/spec [メリット] ● 学習しやすい

16.

ツールチェーンが充実 標準機能で出来ること(抜粋) ● go build:ソースコードをコンパイルして実行ファイルを生成 ● go doc:ソースコードのコメントからリファレンスを作成 ● go fmt:ソースコードを所定のフォーマットに整形 ● go get:公開リポジトリー(GitHubなど)から外部パッケージを取得 ● go install:go get + go build ● go mod:外部パッケージ(モジュール)の管理 ● go run:ソースコードをコンパイルして実行ファイルを生成せずに実行 ● go test:ユニットテストの実行、ベンチマークの取得 ● go tool pprof:プロファイリング ● go vet:疑わしいコーディングのレポートを出力

17.

Go 1 互換性 Goが大事にしているモノのひとつ。 バージョン1の間は、以前のバージョンで書かれたソースコードは変更なしで上位のバージョンでコンパイルできることを保証。 ● 開発環境をバージョンアップしたらソースコードをコンパイルできなくなったという問題を回避(仕事面では重要な話かと!) Go 2の議論は始まっているが概念レベル。 ● 機能追加は数個程度とし、必要なら移行ツールを用意するなど、移行に伴う弊害や手間は極力抑える方針。 [メリット] ● プログラミング言語のバージョンアップに伴うソースコードの書き換えが不要。 ● 最新版でコンパイルし直すだけで、アプリの実行速度やメモリ効率が向上。

18.

cgo CやC++で書かれたコードやライブラリーをGoで呼び出す仕組み。 [メリット] ● C/C++の資産をある程度流用できる。 [デメリット] ● 関数を同時実行する仕組みが使えない。 ● GCが使えないため、自力でメモリの確保と解放を行う必要がある。 ● C/C++のソースコードを含めてコンパイルする場合、時間がかかる。 ● セキュリティの担保が難しくなる。

19.

TinyGo 組み込みやWebブラウザーで動作する実行ファイルを生成する独自Goコンパイラー。 実行ファイルのサイズが小さく、対応する組み込みチップも多い。 ● 日本では、有志による自作キーボード作成とその制御での利用で普及活動あり。 tinygo.org/

20.

何ができるの?

21.

作成できるもの コマンドラインツール ● コマンドラインシェル上で動作する実行コマンド 共有ライブラリー ● WindowsのDLLファイルやLinuxのsoファイル Webアプリケーション ● HTTPサーバー/クライアントのアプリケーション WebAssembly ● Webブラウザー上で動作する実行ファイル モバイルアプリケーション ● AndoridとiOSの実行ライブラリー

22.

使われ処は?

23.

使われ処 クラウド ● コンテナー(Docker, Kubernetesなど)、仮想イメージ、インフラ管理、など。 マイクロサービス ● ワンバイナリーの扱いやすさ、Web機能の実装のしやすさ、gRPC対応、など。 ブロックチェーン ● 暗号化(crypto)機能の実装のしやすさ。イーサリアムのクライアントはGo製。 組み込みシステム ● 低レイヤー対応。ロボティクス(シングルボードやドローン)、など。 ゲーム ● 2Dゲームエンジン(ebitengine)、バックグラウンド処理、など。

24.

どうやって学ぶの?

25.

インターネットで学ぶ(テキスト) 公式サイトの「Getting Started」がGoスタートアップ集の位置付け。 ● Documentation - The Go Programming Language go.dev/doc/

26.

インターネットで学ぶ(動画) Shizuoka.goさんがGo公式チュートリアル「A Tour of Go」を解説。 shizuoka-go.connpass.com/ ● A Tour of Go - YouTube www.youtube.com/playlist?list=PL6fOO2RfONsU7E_Z80mPS-UYc437tLTkl tenntennさん主催のGo自習室。 gopherdojo.org/studyroom/ ● Gopher道場 - YouTube www.youtube.com/playlist?list=PL9MOSAifWs3whvWOsObk3uCBXtVAhD2A7

27.

書籍で学ぶ(発刊:2012年〜2018年) 2012年10月4日:プログラミング言語Goフレーズブック 2012年11月21日:基礎からわかるGo言語 2015年7月17日:改訂2版 基礎からわかるGo言語 2016年1月22日:Go言語によるWebアプリケーション開発 2016年4月15日:スターティングGo言語 2016年6月17日:Go言語入門 2016年6月20日:プログラミング言語Go 2016年9月9日:みんなのGo言語 2017年3月17日:Goプログラミング実践入門 2017年10月23日:Goならわかるシステムプログラミング 2018年6月16日:Go言語でつくるインタプリタ 2018年10月26日:Go言語による並行処理

28.

書籍で学ぶ(発刊:2019年〜2022年) 2019年5月13日:入門Goプログラミング 2019年8月1日:改訂2版 みんなのGo言語 2020年4月1日:やさしいGo言語入門 2020年10月29日:たった1日で基本が身に付く! Go言語 超入門 2021年3月6日:Go言語ハンズオン 2022年1月7日:エキスパートたちのGo言語 2022年3月23日:Goならわかるシステムプログラミング 第2版 2022年4月22日:実用Go言語 2022年7月22日:詳解Go言語Webアプリケーション開発 2022年8月3日:Go言語による分散サービス 2022年9月26日:初めてのGo言語

29.

書籍で学ぶ(発刊:2023年〜2025年) 2023年2月25日:キャリアアップのためのGo言語入門 2023年3月9日:Go言語プログラミングエッセンス 2023年8月18日:Go言語 100Tips 2024年2月24日:効率的なGo 2024年4月17日:実践! Go言語とgRPCで学ぶマイクロサービス開発 2024年12月4日:Go言語で学ぶ並行プログラミング 2024年12月19日:シリコンバレー一流プログラマが教えるGoプロフェッショナル大全 2025年8月5日:初めてのGo言語 第2版 2025年10月2日:改訂新版 Go言語プログラミングエッセンス 2025年10月16日:Exercise Go プログラマ脳を鍛える至高の問題集 2025年12月1日:実用Go言語 第2版

30.

Goイベントに参加 connpass - エンジニアをつなぐIT勉強会支援プラットフォーム connpass.com/ Gophers Japan主催 ● Go Conference, Go Release Party, など 企業主催 ● CyberAgent, DeNA, DMM, layerx, LINE, mercari, Wantedly, など

31.

Goイベントに参加 有志主催 ● 東京:Women Who Go Tokyo, golang.tokyo, Go Connect, など ● 地方:Hokkaido, Dounan, Sendai, Shibuya, Asakusa, Shizuoka, Kanazawa, Biwako, Wakayama, Kyoto, Umeda, Kobe, Shimane, Okayama, 香川Go言語, Ehime, Fukuoka, Miyazaki, Okinawa, など ● 読会:横浜Go読書会, Women Who Go Tokyo読書会, Golang Cafe, など

32.

さいGoに

33.

Goの楽しみ方は色々!q@w@p プログラミングで楽しむ ● コマンドやアプリの作成、ライブラリーやフレームワークの開発、など。 プログラミング言語を楽しむ ● コンパイラー、静的解析、仕様書、コントリビュート、など。 プログラミング以外で楽しむ ● あみぐるみ、コスプレ、ネイル、自作キーボード、同人誌、イベント開催、など。

34.

Thank you Ryuji Iwata Okayama, Japan @qt_luigi