こんにちは。
今日からはGo言語を使って簡単なWebアプリケーションを作成します。
目的
- あなたがプログラミングを行う際の選択肢として、Goを挙げられる為の第一歩となること
- より、知らない人に知ってもらうことを重要視しています
全体の流れの確認
- Goとは
- 特徴
- どこで使われているの?
- Hello, World作成
- 実行
- クロスコンパイルの体験
- 変数とその定義方法
- 変数の種類
- 変数定義方法
- 不具合箇所は、最高の講師に教えてもらおう
- 不具合の修正
- 関数
- 関数の定義
- 関数を書いてみる
- 関数の実行される順番
- パッケージ
- パッケージを使う
- パッケージを作る
- 構造体
- 構造体の定義
- 構造体への関数の関連付け
- 牛丼屋型と、注文する関数を定義する
- Webアプリケーション
- httpを起動する方法
- はじめてのGo言語Webアプリケーション起動
- Goroutineに触れる
- zakohttpパッケージについて
- テスト
- Go言語でのテストのやり方
- テストの実行と修正
- その他のテストの書き方
今回は「Goとは」です。
Goとは
Googleが主導して開発しているプログラミング言語です。
正式名称は、Go
ですが、ググラビリティが低いので、Golang
golang
go言語
Go言語
go-lang
辺りで表記されていることが多いです。
特徴
シンプルである
設計思想として単純さを是としています。
例えば、言語仕様。使用されるキーワードは25個しかありません。
表現や構造がシンプルであるため、学習コストが低いという側面があります。
標準パッケージが充実している
Go言語の環境を用意するだけで、標準パッケージを扱え、より多くの作業が行えます。
- testing: テスト記述
- net/http: HTTPサーバ/クライアントなど
- encoding: hexやテキスト表現
- crypto: 暗号関係
- ...
クロスコンパイルが容易
コンパイル時に、環境変数GOOS
やGOARCH
を設定するだけで、Windowsの実行形式ファイルやLinuxの実行形式ファイル、macOSの実行形式ファイルを出力することができます。
標準パッケージの多くが、クロスコンパイルされることを前提としているため、標準パッケージを活用することで、環境ごとに不具合の起きづらい開発を行うことが可能です。
例えば、ファイルパスの文字列結合は、"path1" + "\" + "path2"
といった表現はせず、path/filepath
の関数Join を用い、filepath.Join("path1", "path2")
というように表現することをお勧めします。
注意しておかなければいけない点としては、一部パッケージには、OS依存のものがあるということです。
例えば、Windowsのレジストリに対する処理のような、OSに依存するものがあります。
周辺ツールが標準で提供される
Go言語をインストールするだけで、パッケージの管理やダウンロード、コンパイル、テスト、字句解析、ドキュメント生成など、多くのことが実行できます。
go <subcommand>
形式で、それらのツールを扱うことが可能です。
参考: コマンド一覧
並行プログラミングが文法レベルでサポートされている
とても簡単に並行プログラミングを作成することができます。
並行プログラミングしない場合は、func(){//<yourCode>}()
のような形で関数を呼び出せます。
対して、並行プログラミングする場合は、go func(){//<yourCode>}()
のような形で関数を呼び出します。
わずか、3 byteほどの差分で並行プログラミングを表すことが可能です。
なお、Go言語での並行プログラミングさせたスレッドは、Goroutine(ごーるーちん) と呼びます。
Goroutineは、カーネルスレッドではありません。
OSのカーネルスレッドとは異なり、ユーザ空間で動作する軽量なスレッドです。
それぞれのGoroutineの管理(スケジューリングなど)も、1つのユーザ空間スレッドとして動作しています。
どこで使われているの?
本講義でも活用している、Dockerで扱われています。
ハンズオンの開始
以降の章では、事前準備したDockerを用い、ハンズオンを行います。
特別な注釈がない限り、実施するプロンプトは、コンテナ上です。
もしコンテナを実行していないようであれあば、以下のコマンドを実行してください。
:# TERMINAL 0
:# vim,emacs,nano派の人はこちら
$ docker run --name go-tutor -it --rm jo7oem/go-tutor:v2022 /bin/bash
:# VSCode派の人はこちら
$ docker run --name go-tutor-vscode -p 8888:8888 -d --rm jo7oem/go-tutor-vscode:v2022
ハンズオンでは、こちらから指示したpathに、ディレクトリやファイルを作成してもらい、Go言語に触れてもらいます。
基本的なフォルダ構成は、 /go/src/go_tutorial/<セクション名>/<プログラム名>/***.go
のようになります。
講師側が説明で用いるソースコード(答え)は、/go/src/samples/<セクション名>/<プログラム名>/***.go
の形で格納してあります。
講師側が想定している出力結果を確認したい際は、/go/src/samples/
配下を実行することで、容易に確認できます。
また、ハンズオンがうまく行かない際には、以下のように差分を確認することで、課題解決を助ける可能性があります。
:# TERMINAL 0
$ diff /go/src/go_tutorial/<セクション名>/<プログラム名>/***.go /go/src/samples/<セクション名>/<プログラム名>/***.go
今日は以上です。
ありがとうございました。
次のPart 2は「Hello, Worldを作る」です。
よろしくお願いいたします。