memoメモ

最近はGo言語関連で。φ(..)メモメモ

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 LinuxRaspberry 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です。

参考資料:

その他

開発中のバージョン(tip)にしたい:

$ hg update default

または、

$ hg update tip

リポジトリをスイッチし、ビルドしましょう。

疑問

Q: 昔々、環境変数(GOROOT,GOARCHとかGOOSとか...)をたくさん設定したような記憶があるんだけど。。。

A: ここを読みましょう: あなたがGOROOTを本当に設定しなくていい理由 | Androg Thanks @kwmt27 !!

Q: updateするスクリプトないの。

A: こんなん書いてみました。OSXでしか試してないですが。 : goupdate

おしまい。

プログラミング言語Goフレーズブック

プログラミング言語Goフレーズブック

  • 作者: David Chisnall,デイビッド・チズナール,柴田芳樹
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2012/10/04
  • メディア: 単行本(ソフトカバー)
  • 購入: 1人 クリック: 5回
  • この商品を含むブログを見る
基礎からわかる Go言語

基礎からわかる Go言語

Raspberry Pi Type B 512MB

Raspberry Pi Type B 512MB

PQI Air Card Wi-Fi内蔵SDカードアダプタ (アダプタのみモデル) 6W21-0000R1

PQI Air Card Wi-Fi内蔵SDカードアダプタ (アダプタのみモデル) 6W21-0000R1

入門TortoiseHg + Mercurial

入門TortoiseHg + Mercurial

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)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

プログラミング言語Goフレーズブック

プログラミング言語Goフレーズブック

  • 作者: David Chisnall,デイビッド・チズナール,柴田芳樹
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2012/10/04
  • メディア: 単行本(ソフトカバー)
  • 購入: 1人 クリック: 5回
  • この商品を含むブログを見る

基礎からわかる Go言語

基礎からわかる Go言語

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」ってなってる)

f:id:atotto:20130810215114p:plain f:id:atotto:20130810215028p:plain

対策

恒久的な対策として、mimetypeの指定にファイルの拡張子を追加してみました:

lib/redmine/mime_type.rb

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よりインストールしたもの:

プロジェクトのインポート

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)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)