ふとした気の迷いでLubuntuをVirtualboxにぶち込んでしまったので、折角だからgo-gtkでもやってみることにした。
WindowsとLinuxじゃGtk+の開発環境揃えるのにかかる時間も、安定性も全然違うからね。
(にしても無駄に勢いのあるタイトルだな‥‥)
1. Go1.2のインストール
aptにある奴をそのまま入れるとGo1.1がインストールされてちょっと残念なので、gvmを使うことにした。
日本でgvmって言うと(国際的にだろうけど)、Groovyのバージョン管理に使う奴のことを大抵指すんだけど、この場合のgvmというのはGo Version Managerの方のgvm。
ややこしいどころかコマンドも同じだし、インストール先もどっちも~/.gvm
だから、同時に入れたら間違いなくコンフリクトすると思う。(というかコンフリクトした)
これはあれかな、時代はChefってことかな。開発環境の管理にバージョンマネージャーを使う時代は終わったってことかな。
ここでは、もしGroovyを使いたくなったら、そのときはまた新しくVirtualBoxにLinuxなりFreeBSDなりをぶち込むことにして、Go言語の方のgvmをインストールすることにします。
(何て適当な‥‥)
# curlのインストール$ sudo apt-get install curl
# gvmのインストール$ bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)# Go言語のビルドに必要なものをインストール$ sudo apt-get install git mercurial make binutils bison build-essential
# go1.2のインストール(結構時間かかる)$ gvm install go1.2
$ gvm list
gvm gos (installed)=> go1.2
# go1.2をデフォルトに設定$ gvm use go1.2 --default
# 動作確認$ go version
go version go1.2 linux/amd64
script
とかで記録を取ったわけではないので自信がありませんが、確かこんな感じだったと思います。
2. Vimの設定
次にVimの設定をします。
どう考えてもGo言語のインストールに必須事項じゃありませんがボクにとっては死活問題なのです。
なにはともあれVimをインストールします。
# vim-noxはif_luaが有効≒neocomplete.vimが動く←とても大事$ sudo apt-get install vim-nox
そして、neobundle.vimを導入して、lightline.vimとneocomplete.vimをインストールするために、
$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
としてから、~/.vimrc
を書きます。
(ところでvim-nox、-clipboard
になってるのですがこれは‥‥)
"NeoBundleの読み込みif has('vim_starting')setnocompatiblesetruntimepath+=~/.vim/bundle/neobundle.vim/endifcall neobundle#rc(expand('~/.vim/bundle'))filetype plugin indent onsyntaxon"Neobundle manage Neobundle
NeoBundleFetch 'Shougo/neobundle.vim'"My Bundles here:"lightline.vimsetlaststatus=2
NeoBundle 'itchyny/lightline.vim'letg:lightline = {
\ 'colorscheme': 'wombat',
\ }
"neocomplete.vim
NeoBundle 'Shougo/neocomplete.vim'"use neocomplete.letg:neocomplete#enable_at_startup =1" Use smartcase.letg:neocomplete#enable_smart_case =1
NeoBundleCheck
neocomplete.vimの設定がかなり適当ですがかと言って気合入れすぎると何の記事か分からなくなるのでこれくらいにしておきます。
次に、Go言語関連のプラグインを入れます。
今回はBlackrush/vim-gocode · GitHubを入れることにします。
まず、コマンドラインから、
$ go get github.com/nsf/gocode
として、~/.vimrc
に、
setrtp+=$GOROOT/misc/vim"vim-gocode
NeoBundle 'Blackrush/vim-gocode', {"autoload": {"filetypes": ['go']}}
auto BufWritePre *.go Fmt
と追記します。場所は空気読んでください。
これでGo言語がシンタックスハイライトされたり、保存時に有無を言わさずgo fmt
されたり、関数名が補完されたりします。
3. go-gtkのインストール
何だかVimで行を稼ぎ過ぎたような気がしなくもないです。
まあよい、mattn/go-gtk · GitHubのインストールだ。
これは結構簡単で、
$ sudo apt-get install libgtk2.0-dev
$ go get github.com/mattn/go-gtk/gtk
でいけるはずです。go get
の方はちょっと時間がかかったような気がします。
4. go-gtkでHello World!
こういうコードをコピペなり写経なりします。
packagemainimport("github.com/mattn/go-gtk/gtk""os")funcmain(){gtk.Init(&os.Args)window:=gtk.NewWindow(gtk.WINDOW_TOPLEVEL)window.SetTitle("Hello World!")window.Connect("destroy",gtk.MainQuit)button:=gtk.NewButtonWithLabel("Click Here")button.Clicked(func(){msgDlg:=gtk.NewMessageDialog(button.GetTopLevelAsWindow(),gtk.DIALOG_MODAL,gtk.MESSAGE_INFO,gtk.BUTTONS_OK,"こんにちは世界")msgDlg.Response(func(){msgDlg.Destroy()})msgDlg.Run()})window.Add(button)window.SetSizeRequest(600,600)window.ShowAll()gtk.Main()}
で、実行します。
go-gtkはgo run
から実行できるみたいです。(WindowsでWALKだとできないんですよね)
$ go run hello-gtk.go
一応スクショでも。
まあとても地味です。
終わりに
何だか趣旨の良く分からない記事ですが参考になったというなら幸いです。
go-gtkはLinuxでGo言語でGUIする、という非常に限られた状況であればかなりいいんじゃないかと思います。そんなときが来るのかは知りませんが。
んー。Go言語でGUIといったらこれ、みたいなのが出てくるといいなー。
(GUIライブラリは一長一短だから、JavaのSwingみたいなレベルでサポートしないと厳しいだろうけど‥‥)
あとVimはやっぱりいいです。neocomplete.vimもlightline.vimもカッコいいです。い、いや、そこのemacs使いさん、突然包丁なんて取り出してどうしたんですか!?
ボ、ボクskkも好きだから。
「だったら尚更emacs使え」? そ、そんなこと言われても‥‥。今更エディターを変えるなんて‥‥。
あ、ちょ、やめ‥‥うわぁあああああああ!