プログラミング初心者がGoに入門しようとしてサンプルアプリのテキストwikiを動かすまで
この記事は Go その2 Advent Calendar 2015 の5日目の記事です。
brew install go で、Go1.4がインストールされ、brew update と brew upgrade を行うと1.5にバージョンアップしました。
安易にbrew upgrade していいのかちょっと怪しいですが、せっかく最新になったので使っていこうと思います。
コピペですコピペ。
でも、ただのコピペじゃ動きません。
古すぎるのでライブラリ名が変わったりしていてエラーになります。
エラー名をググりながら修正していきます。
「WebをGolangで作ろうとハマった」 などは非常に助かりました。ありがとうございました。
それから、/view/用のhtmlテンプレートがないので作ります。/edit/をコピーしてちょっといじればすぐです。
日付変更と共に公開できず、しかも内容も他の方の記事に比べてショボくて申し訳ありませんが、タイトルの通りサンプルとしてWeb上に公開されているテキストwikiが動くまでにやったことの記録です。
私はサーバ構築をサポートしましたが、ミドルウェアやフレームワークなど、まだまだ彼にGo言語プロダクトの責任が偏っています。そしてそもそもGoのソースコードは1ミリもわかりません…。
今後はチームとしてスマートに動けるように、責任を平準化し、ソースコードや開発手法について議論を深めたいので、私もGoを学んでみようと思いました。
動機
同僚のリードプログラマがGo言語を使ってシステムに機能追加を行いました。私はサーバ構築をサポートしましたが、ミドルウェアやフレームワークなど、まだまだ彼にGo言語プロダクトの責任が偏っています。そしてそもそもGoのソースコードは1ミリもわかりません…。
今後はチームとしてスマートに動けるように、責任を平準化し、ソースコードや開発手法について議論を深めたいので、私もGoを学んでみようと思いました。
成果物
結論としてはたった2ファイル
https://github.com/TearTheSky/golangStudy/blob/master/textwiki/textwiki.go
https://github.com/TearTheSky/dotfiles/blob/master/.vimrc
textwiki.go というgoプログラムができました。
これをWebサーバに持って行って起動し、Webサーバへのアクセスを127.0.0.1:9000に渡すように設定変更してあげればテキストwikiが利用できました。
Webサーバにはnginxを使っています。
ローカルでもできるやろそれ、と言われそう(実際言われました)が、netライブラリあたりが原因なのか、うまく使えなかったので、ローカルで動く版も作りたいと思います…。
https://github.com/TearTheSky/golangStudy/blob/master/textwiki/textwiki.go
https://github.com/TearTheSky/dotfiles/blob/master/.vimrc
textwiki.go というgoプログラムができました。
これをWebサーバに持って行って起動し、Webサーバへのアクセスを127.0.0.1:9000に渡すように設定変更してあげればテキストwikiが利用できました。
Webサーバにはnginxを使っています。
ローカルでもできるやろそれ、と言われそう(実際言われました)が、netライブラリあたりが原因なのか、うまく使えなかったので、ローカルで動く版も作りたいと思います…。
やったこと
Goのインストール
最近はMacを使っています。Macの場合はhomebrewですぐにGoをインストールして環境構築を始めることができます。brew install go で、Go1.4がインストールされ、brew update と brew upgrade を行うと1.5にバージョンアップしました。
安易にbrew upgrade していいのかちょっと怪しいですが、せっかく最新になったので使っていこうと思います。
NeoBundleとカラースキーマとvim-goのインストール
Vim pluginへの入門[NeoBundle.vim] を参考にさせていただいて、NeoBundleをインストールしました。NeoBundleはVimのプラグイン管理を楽にしてくれるプラグインです。
外部からプラグインをダウンロードしてくる方法が分かったので、既存のしょぼい .vimrc に追記して、vim-goをインストールします。
ついでにカラースキーマも変更します。背景色は黒板みたいな深緑がいいんだけど、探したり作るのがめんどくさいので、とりあえずSublimeText使ってるし馴染みのある molokai を入れます。黒板風カラースキーマの作成、あとでやろう。あとで…。
ブラウザ上からHelloWorld!する
「AWSでnginx+golangが動く環境を作る 」を参考にさせていただいて、Nginxサーバを立てて、そこへのアクセスをGo言語がListenする9000番ポートにパスするようにしました。
そしてHelloWorldを出力するプログラムを起動しておけば、ブラウザ上からサーバへアクセスしたときにHelloWorldが出力されます。
チュートリアルに沿って書く
古すぎて参考にしてはいけないサイトとして有名らしい(知らなかった) golang.jp にある「 Codelab: Webアプリケーションを書いてみよう 」を読みながらソースコードを増やしていきます。コピペですコピペ。
でも、ただのコピペじゃ動きません。
古すぎるのでライブラリ名が変わったりしていてエラーになります。
エラー名をググりながら修正していきます。
「WebをGolangで作ろうとハマった」 などは非常に助かりました。ありがとうございました。
それから、/view/用のhtmlテンプレートがないので作ります。/edit/をコピーしてちょっといじればすぐです。
これからやらなきゃいけないこと・やりたいこと
やらなきゃいけないことは無限に湧いて出ると思いますが、とりあえず次のステップに進むために必要そうなことを何個か…- gofmtの使い方を理解してコーディング習慣として組み込む。件の同僚はvimで保存するたびにgofmtが走って自然に綺麗になるようにしているので、それを真似したい。
- パッケージ管理ができるようにする。
- 複数バージョン管理の仕組みを使えるようにする。Go言語にはgvmというのがあるので、「最新versionのgolangをぶち込む方法について」などを参考にさせていただくつもり…。
- Tour of Go が更新されて最近のバージョンとの差異も少なくなり学習内容も増えたらしいので、それでお勉強する。まずは1周やってみたい。
- Go言語を使ってRedisとデータをやりとりしてみたい。個人的に。
明日は tienlen さんの記事です。パッケージ管理についてということなので、読んで勉強します!
リクエストからファイル名を得る部分 getTitle はもう少しサニタイズしないと意図しないパスにファイルが書かれそうな気がします。例えばこれは Windows に限った話ですが
返信削除http://localhost:8080/C:%5cWindows%5cnotepad.exe
にリクエストすると予期しないファイルに書こうとします。もちろん権限が無い場合にはエラーになりますが。また UNIX 系 OS だとしても期待しないファイル名になるかと思います。
期待しない文字は strings.Replacer 等で置換してしまうのが良いかと思います。