go install の使い方

go install はパッケージのビルドコマンド。

使い方

  1. $GOPATH/src/以下にビルドしたいパッケージのソースコードを配置する。
  2. go install 実行


test_pkgというディレクトリ下のコードをパッケージとしてビルドしたい場合。

$ mv -rf test_pkg $GOPATH/src
$ go install
$ ls $GOPATH/pkg/"system_arch"/
test_pkg.a

これでtest_pkg.aができる。


go getの使い方はよくわからない…。

$ go get package git:/github.com/xxx/xxx.git
package git:/github.com/xxx/xxx.git: unrecognized import path "git:/github.com/xxx/xxx.git"

みたいになる。
go getの引数にはどんなパス与えてやればいいのかな?



参考ページ
GoLang Tutorials: Go packages and goinstall - creating and using your own packages in Go

Go言語のスコープについて

Go言語の情報の可視性についてのルールは単純です。名前(トップレベルの型名、関数名、メソッド名、定数名、変数名、構造体のフィールドおよびメソッド名)の先頭一文字が大文字になっていれば、パッケージの利用者側から参照可能となります。すなわち大文字にしなければ、それが定義されているパッケージ内からしか参照できません。このルールはコンパイラによって実施されるため、絶対的なルールとなっています。この外部パッケージから可視状態であることをGo言語の用語で「エクスポートされた(exported)」と言います。

Goプログラミング言語のチュートリアル - golang.jp


Go言語でのスコープは3つかな?

  • 関数、if 文などの()、{}の中
  • Package内
  • Packageの外部

同一パッケージ内であれば、異なるファイルでも非公開関数や変数を参照できるみたい。

続きを読む

tmuxに入門した

ターミナルマルチプレクサ Advent Calendar 2011 : ATND 見てたら、tmux使いたい欲がむくむくと。
screen使ってないけど、いい機会なのでtmux入門してみた。

インストール

Macならbrewで一発。

$ brew install tmux

設定

tmuxの設定は ~/.tmux.conf に書けばいいみたい。
https://github.com/ryochack/dotfiles/blob/master/.tmux.conf

  • 変更点
    • Prefixキーをからへ変更。(Vimとのバッティング回避)
    • Vimライクなキー・マップに設定。


キー・マップ変更したら快適!

VimプラグインをNeoBundleとPathogenで管理する

VimプラグインをVundleで管理しているのだけれども、VundleはVundleInstallでインストールしたプラグイン以外は自動で読み込んでくれないみたい。

例えばGo言語をインストールすると、vim設定ファイルが $GOROOT/misc/vim 以下に置かれている。
これを

ln -s $GOROOT/misc/vim ~/.vim/bundle/golang

としても、Vundleはgolang以下のpluginやsyntaxを読み込んでくれない。


そこで、Pathogenを併用することで、Bundle管理プラグインと手動管理プラグインを.vim/bundle以下で管理できるようにした。


NeoBundle
GitHub - Shougo/neobundle.vim: Next generation Vim package manager
Vundleの改善版とのことで、今回ついでにVundleからNeoBundleに移行した。
参考:
http://vim-users.jp/2011/10/hack238/]


Pathogen
GitHub - tpope/vim-pathogen: pathogen.vim: manage your runtimepath
Pathogenを導入すると、.vim/bundle以下にpluginやsyntaxをまとめられるようになる。
参考:
vimプラグインでよりよいコーディングを - KAYAC engineers' blog

導入

NeoBundleとPathogenで管理するプラグインが干渉することがないように、お互いの管理対象ディレクトリを分けた。
bundle/automatic にNeoBundle管理プラグイン、bundle/manual に手動管理プラグインっていう感じ。


.vimrcに以下を記述。

filetype plugin indent off

if has('vim_starting')
	set runtimepath+=~/.vim/bundle/automatic/neobundle.vim
	call neobundle#rc(expand('~/.vim/bundle/automatic'))
endif

"******************************************
"*     neobundle で管理するプラグイン     *
"******************************************
NeoBundle 'git://github.com/Shougo/neobundle.vim.git'

"----- github Plugins -----

"# [ pathogen ] NeoBundle管理外の自前インストールプラグインはPathogenで管理する
NeoBundle 'git://github.com/tpope/vim-pathogen.git'
if isdirectory(expand('~/.vim/bundle/automatic/vim-pathogen'))
	call pathogen#infect('~/.vim/bundle/manual')
endif

filetype plugin indent on


管理構成

.vim
├── bundle
│   ├── automatic
│   │   ├── BlockDiff
│   │   ├── bufexplorer.zip
│   │   ├── eregex.vim
│   │   ├── gtags.vim
│   │   ├── neobundle.vim
│   │   ├── neocomplcache
│   │   ├── taglist.vim
│   │   ├── unite.vim
│   │   ├── vim-alignta
│   │   ├── vim-easymotion
│   │   ├── vim-fugitive
│   │   ├── vim-pathogen
│   │   ├── vim-qfreplace
│   │   ├── vim-quickhl
│   │   ├── vim-quickrun
│   │   ├── vim-ref
│   │   ├── vim-surround
│   │   ├── vim-visualstar
│   │   ├── vimfiler
│   │   ├── vimproc
│   │   └── etc...
│   └── manual
│         ├── cmigemo
│         └── golang -> /usr/local/Cellar/go/r60.3/misc/vim
├── dict
├── indent
└── syntax


詳細な記載は、githubの .vim/source/bundles.vim
GitHub - ryochack/dotfiles



参考ページ
VundleからNeoBundleへの移行 - sugilogのブログ

カレント行にアンダーラインを引く

Vimでカレント行にアンダーラインを引く。
カレント行全体に色が着くのが嫌なので、下線だけ引くように設定。

" カレント行ハイライトON
set cursorline
" アンダーラインを引く(color terminal)
highlight CursorLine cterm=underline ctermfg=NONE ctermbg=NONE
" アンダーラインを引く(gui)
highlight CursorLine gui=underline guifg=NONE guibg=NONE


ctermはTerminal用の設定。guigvim用の設定。
ctermfg/guifgは文字色の設定。ctermbg/guibgは背景色の設定。


下線を引くのをやめて、カレント行全体に色を着けるには以下のように設定。

" カレント行ハイライトON
set cursorline
" アンダーラインを引く(color terminal)
highlight CursorLine cterm=NONE ctermfg=white ctermbg=black
" アンダーラインを引く(gui)
highlight CursorLine gui=NONE guifg=white guibg=black


環境によっては、ctermじゃなくてtermになるかも。

カンマ・オペレータ

これは使えそう。
Comma operator - Wikipedia

x = (a, b);
y = (a, b, c);

っていう処理があった場合、xにはaの処理をした後にbがxに代入される。
同じくyには、aとbの処理がされた後にcがyに代入される。

int x;
int a=0, b=1, c=2;
x = (printf("a=%d \n",a), printf("b=%d \n", b), c);
printf("x=%d \n", x);

これを実行すると、こんな出力になる。

a=0
b=1
x=2


こんなマクロ書いて、ちょっと手を加えたら幸せになれそう。

#define TRACE(func) (printf("Enter %s @%s \n", #func, __func__), func)