インフラエンジニアが学ぶべき Golang 入門 なぜ,ぼくたちはプログラミングを学ばなければならないのか?
情報システムの構成要素には様々な技術が使用されているが,H/W,仮想化,OS,ネットワーク,ミドルウェア,セキュリティといった基盤となる領域を担当するのがインフラエンジニアである.ウェブオペレーションサイト 運用管理の実践テクニック(邦訳)では下記のような仕事とされている.
ネットワーク/ルーティング/スイッチング/FW/負荷分散/高可用性/障害復旧/TCPやUDPのサービス/NOCの管理/
ハードウェア仕様/複数のOSの仕様/複数のハイパーバイザーの仕様/クラウドの仕様/複数のミドルウェアの仕様/
いくつかの言語の仕様/キャッシュ技術/データベース技術/ストレージ技術/暗号技術/アルゴリズム/傾向分析/キャパシティ計画立案
この書籍の翻訳本は2011年に出版してる.そこから8年が経過している.インフラエンジニアにはSREやDevOpsやInfrastructure as Code や他 様々な状況や需要の変化が起こっている.本講義ではインフラエンジニアを取り巻く現代の様々に変わる需要は一旦おいてコンピュータを触るエンジニアとしてコンピュータを上手に使役する為のプログラミング入門としてGolangでのコーディングを行います.
Golangは,C++やJava,Pythonといった言語でGoogleを支える巨大なシステムを開発する際に抱えていた問題を解決する為に開発されたプログラミング言語で2007年にそのアイディアが提案され,2009年にOSSとして公開されました.
本講義やハンズオンではA Tour of GoのBasicsを独力で読み進めることができる方を対象としています.このハンズオンでは基本的な文法や解説を行いません.入門書としてはプログラミング言語Go をおススメしています.
CentOS7
$ wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
$ tar vzfx go1.9.linux-amd64.tar.gz
$ sudo mv go /usr/local/
$ go version
go version go1.9 linux/amd64
$ export GOPATH=$HOME/.go
$ echo $GOPATH
/home/centos/.go
Ubuntu
apt-get install golang
Golang basics - writing unit testsを一読してテストを書いてみましょう
このハンズオンではGolangによるWebサーバーの構築及び動作を理解してもらいたいと思います.Goはバッテリ内蔵のプログラミング言語で,Webサーバがすでに組み込まれています.net/http標準ライブラリのパッケージには,HTTPプロトコルに関するすべての機能が含まれています.これにはHTTPクライアントとHTTPサーバーが含まれます. Serverのみ
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World: %s\n", r.URL.Path)
})
http.ListenAndServe(":80", nil)
}
クライアントの実装
gorilla/mux で/sum/{num01}/{num02}
というような値を受け取って合計を返すようなプログラムを書いてください.また,sum関数を作成しその関数に関するテストを記載してください.
Real World HTTP ――歴史とコードに学ぶインターネットとウェブ技術
このハンズオンではGolangによるコマンドラインツールの作成を通して開発を体験してもらいたいと思います.Goは様々なコマンドラインツール作成用のライブラリが公開されていますがサブコマンド形式を用いる場合にはcobraを設定ファイルを良しなに読み込んでくれるviperなどがあります.
2つの引数を受け取って 数字を足すコマンドラインツールを作成してください形式は以下のように実行してください
<実行ファイル> add [num01] [num02]
今回,お話を頂いた時に全員に向けて話してくれというオーダーを頂いたこともあってもっと話したいことがたくさんありましたがこんな風な内容にしました.今回のイベントが好評であれば再度訪問することも可能ですので計算機を上手に扱う為の思考や思想,プロダクションレディなアプリケーションの書き方についてはその時にでもお話したいと思います.また,nwiizoというハンドルネームでTwitterをやっているのでいつでもリプライやDMをください.プログラミングを書くというのは身近な課題をより効率的に解決するのに便利なものです.今回の課題や資料ではプロダクトに必要なプログラミングが出来るようになるとは決して思いませんが最初の一歩を踏み出しておくというのは何か挑戦する際に一つ大切なことだとも思います.