Go言語の環境をソースからビルドする #golangjp
Go1がリリースされて以来、各環境のGoコンパイラは Downloads - go - The Go Programming Language - Google Project Hosting で簡単にダウンロードできるようになりました。 またLinuxやOSXでも、パッケージマネージャでGoコンパイル環境を整えることもできます。
ただ、Go言語をバリバリ書いていきたいという人には、 Goの環境を自分でコンパイルすることをオススメ します。新しいバージョンがリリースされたらすぐに更新できるようになります。
「え、コンパイラのコンパイルなんてムズカシイんでしょ?」なんて声も聞こえそうですが、そんなこともないです。
OSXの場合、基本的にxcodeさえ入っていればGoのコンパイル環境は整います。
メリットは:
- Goの新しいバージョンがリリースがされたらすぐに追従できる
- Goのtip(開発中のもの)を試せる
- クロスコンパイル環境を簡単に整えられるようになる(ARM Linuxな Raspberry PiでもPQI Air Cardでも動かせるよ)
- ...
といったところでしょうか。
なお、ここに書いた内容は、基本的に Installing Go from source - The Go Programming Language に書いてある内容をやっているだけです。 というわけでさっそくやってみましょう:
事前準備
Goのソースリポジトリは Mercurial が使われていますので、Mercurialをインストールします。 OSXでhomebrewをつかっている場合は:
$ brew install mercurial
で導入できます。 Linuxなどでも apt や yum でインストールしちゃいましょう:
$ sudo apt-get install mercurial
OR
$ sudo yum install mercurial
ソース取得
置いておきたい場所へ移動し、hg(mercurialのコマンド)を実行します:
$ cd ~/
$ hg clone -u release https://code.google.com/p/go
配置場所にこだわらないのであれば、ホームディレクトリに配置してしまうのがいいでしょう。
ビルド
そして、いよいよビルド:
$ cd go/src $ ./all.bash
最近のいいマシンを使っていれば、テストも含めて2分程度で完了します。早いですね!
そして:
ALL TESTS PASSED
が出たらおしまい。
仕上げ
.bashrcや.zshrcなどに:
export PATH=$PATH:$HOME/go/bin
を書いておきましょう。
また、必要に応じてGOPATHの設定を書けばよいと思います。 このあたりは How to Write Go Code - The Go Programming Language に詳しく書いてあります。
これで:
$ go version go version go1.1.2 darwin/amd64
などとでていれば完成です。
更新
これ以後、Goのリリースがあるたびに:
$ cd go/src $ hg pull $ hg update release $ ./all.bash
を実行すればOKです。
参考資料:
- Installing Go from source - The Go Programming Language
- InstallFromSource - go-wiki - Install Go from Source - Go Language Community Wiki - Google Project Hosting
- GoArm - go-wiki - Using Go on ARM powered machines - Go Language Community Wiki - Google Project Hosting
その他
開発中のバージョン(tip)にしたい:
$ hg update default
または、
$ hg update tip
でリポジトリをスイッチし、ビルドしましょう。
疑問
Q: 昔々、環境変数(GOROOT,GOARCHとかGOOSとか...)をたくさん設定したような記憶があるんだけど。。。
A: ここを読みましょう: あなたがGOROOTを本当に設定しなくていい理由 | Androg Thanks @kwmt27 !!
Q: updateするスクリプトないの。
A: こんなん書いてみました。OSXでしか試してないですが。 : goupdate
おしまい。
- 作者: David Chisnall,デイビッド・チズナール,柴田芳樹
- 出版社/メーカー: ピアソン桐原
- 発売日: 2012/10/04
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 5回
- この商品を含むブログを見る
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- クリック: 7回
- この商品を含むブログ (2件) を見る
- 出版社/メーカー: RS Components Ltd
- メディア: エレクトロニクス
- この商品を含むブログ (4件) を見る
PQI Air Card Wi-Fi内蔵SDカードアダプタ (アダプタのみモデル) 6W21-0000R1
- 出版社/メーカー: PQI
- 発売日: 2012/10/01
- メディア: Personal Computers
- クリック: 117回
- この商品を含むブログ (9件) を見る
- 作者: 藤原克則
- 出版社/メーカー: 秀和システム
- 発売日: 2013/02
- メディア: 単行本
- 購入: 3人 クリック: 13回
- この商品を含むブログ (6件) を見る
Go言語ベストプラクティス12コ
Twelve Go Best Practices よりメモ。
各行の # はスライドの番号
コード
- エラーを先に処理して、ネストするのを避ける #4
- 可能なら同じことの繰り返しを避ける #5
- Type switchを特別なケースのために使う #6
- Type switchには変数宣言を使う #7
- Function adapterを使う #8,9
構成
- 重要なコードは先に書く #11
- コードにドキュメントを書く #12
- 短いほどいい(パッケージ名、関数名、、) #13
- 複数のファイルでパッケージを構成する #14
- go get-ableなパッケージをつくる #15
API
- 必要なもの(メソッド)を聞くようにする #17
- 独立したパッケージで、独立を保つ #18
- インターフェースを使って依存を避ける #20
- 決まった型の代わりにインターフェースを使うと、テストがより簡単になる #21
- APIで並行性(concurrency)は避ける #22
並行性(concurrency)
- 状態を管理するためにgoroutineを使う #25,26
- バッファーチャネルでgoroutineを避ける #27,28,29
- quitチャネルでgoroutineのリークを避ける #30
感想
Goをそれなりに書いてるひとを対象としたスライドだと思います。
「APIで並行性のあるものを避けるべし #22」というのは、確かにそうかなと思いました。標準ライブラリにも見られませんし、Goは並行性が得意だからといってAPIに仕込まないほうがいいかもしれません。
「エラーは先に処理すべし #4」は、他の言語でも言えることですが、Goではメソッドの戻り値をもらう際にerrorをちゃんと処理する必要がありますので、すぐに習慣づくと思います。くれぐれも _ (アンダースコア)でerrorを廃棄しないようにしましょう。
一般的なコードの書き方については、リーダブルコード(リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice))も参考になります。
おわり。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (102件) を見る
- 作者: David Chisnall,デイビッド・チズナール,柴田芳樹
- 出版社/メーカー: ピアソン桐原
- 発売日: 2012/10/04
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 5回
- この商品を含むブログを見る
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- クリック: 7回
- この商品を含むブログ (2件) を見る
Go tipでなにが行われてる?(2013-08-15)
What's happening in Go tip (2013-08-15)よりメモ
ちなみに、tip とは Goのリポジトリ https://code.google.com/p/go/ の開発中のバージョンを指します。
$ hg update tip
で切り替えることができます。
(以下、間違い/勘違いがあるかもしれないので注意してね)
- cgoでC++サポート
- cgoで関数ポインタ
- marshalの改善(新インターフェースの追加)
- プリエンプティブ・スケジューリング
ThinkPad Bluetooth ワイヤレス・トラックポイント・キーボード をMacで使うメモ
1か月程前に「 ThinkPad Bluetooth ワイヤレス・トラックポイント・キーボード 」を購入しました。 Lenovoのサイトで購入しましたが、最近はAmazonでも購入できるようです。 トラックポイントがキーボードに付いているので、テレビに接続しているMacを扱うのに使うのにとても便利です。
このBluetoothキーボードですが、キーレイアウトが変わってしまったために、キー数が減っています。 そのため、Macの画面の明るさや音量調整のキー割り当てが不明でした。 が、見つけたのでメモ:
続きを読むRedmineでリポジトリのファイルを読めるようにする
Redmineを使っていると、たまにリポジトリでファイルを読みたくなります。
しかーし、Redmineのリポジトリで「表示」をクリックするとダウンロードされてしまうことがあります。
例をあげると、Sphinxの*.rst
ファイルや、Cucumberの*.feature
ファイルなどです。
↓(ちなみに日本語だと「表示」、英語だと「View」ってなってる)
対策
恒久的な対策として、mimetypeの指定にファイルの拡張子を追加してみました:
module Redmine module MimeType MIME_TYPES = { : : 'text/plain' => 'rst,feature', :
'text/plain' => 'rst,feature',
を追加しています。
あとは、webサーバをリスタートさせれば反映されます。
glogパッケージをちょっと使ってみる #golang
つい最近アナウンスされたglogパッケージを使ってみました。glogは簡単に言うとログをとるためのパッケージです。実行時の引数でログレベルを指定したり、指定したモジュールのログだけを出力したりと、簡単に使うことができます。
glogパッケージで利用できる引数の使い方は、 google-glog ライブラリ(C++)の作法を参考にしているようです。
続きを読む『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) の準備。
ありがたいことに、『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) - connpass へ参加できるので、気合入れて準備します。
@shinyaa31 さんの告知 http://d.hatena.ne.jp/absj31/20130506/1367848297 から ハンズオン資料をダウンロード。
基本的にREADME.mdどおりにセットアップ。
以下、セットアップメモ。
環境整備
JDK7をインストール:
http://www.oracle.com/technetwork/java/javase/downloads/index.html よりJDKをダウンロードし、インストール。
Eclipseをインストール:
Eclipse IDE for Java EE Developers をEclipse Downloadsよりダウンロードし、インストール。
プラグイン導入:
Eclipse Marketplaceよりインストールしたもの:
Install New Softwareよりインストールしたもの:
- cucumber-eclipse : http://cucumber.github.com/cucumber-eclipse/update-site
- run-jetty-run : http://run-jetty-run.googlecode.com/svn/trunk/updatesite-nightly
プロジェクトのインポート
bookstoreを「File - Import - General - Existing Projects into Workspaces」 でインポートする。
DB起動
README.mdどおりに、
$ cd h2 $ java -cp h2-*.jar org.h2.tools.Server -baseDir database
で起動。H2 Consoleがブラウザで勝手に立ち上がった。
JDBC URLに jdbc:h2:tcp://localhost:9092/bookstore
を入れてPasswordなしでConnect!
スキーマの作成
H2 Console上で実行した。
CREATE SCHEMA IF NOT EXISTS dev; CREATE SCHEMA IF NOT EXISTS ut;
SET SCHEMA dev;
を入れてスキーマを切り替えておく。
テーブルの作成
db_schema/setup.sqlを直接実行する方法を知らないので。。直接H2 Consoleに叩き込むw;; 明日教えてもらおう。。
DROP TABLE IF EXISTS books CASCADE ; CREATE TABLE books ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255) NOT NULL, price INT, description VARCHAR(500), isbn VARCHAR(20), nbOfPage INT, illustrations BOOLEAN, ) ;
Jetty起動
README.mdどおり。
http://localhost:8080/bookstore/ にアクセスしたら表示された!
JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
- 作者: 渡辺修司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 273回
- この商品を含むブログ (58件) を見る
Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 496回
- この商品を含むブログ (60件) を見る