nDiki : Go

プログラミング言語 Go (Golang)

ノート

スライス

  // 配列とスライスを作成
  slice = make([]int, 10)
  slice = make([]int, 10, 20) // capacity も指定

 // スライスへの追加
 slice = append(slice, elem)

 // スライスへ他のスライスを追加
 slice = append(slice, anotherSlice...)

文字列への変換

 // []byte から string へ
 b := []byte{97,98,99}
 s := string(b)

文字列からの変換

 // string (10進数)から int64 へ
 n, err := strconv.ParseInt(s, 10, 64)

スポンサード リンク

2015年4月30日 (木)

開発ディレクトリ毎に異なる環境変数を設定するのに direnv を使う

シェルで特定の開発ディレクトリ以下に移動すると自動的に設定ファイルで指定された環境変数を設定し、そのディレクトリから別のディレクトリに移動すると戻してくれる direnv が便利。

https://github.com/zimbatm/direnv

Go開発するのに GOPATH と bin への PATH 追加が面倒だったので導入してみた。

インストール

 git clone https://github.com/zimbatm/direnv
 cd direnv
 make build
 cp -a direnv $HOME/local/bin

なお direnv は Go で書かれているのでソースからビルドするには Go開発環境が必要。

Bash の設定

.bashrc に以下を追加。

 if command -v direnv > /dev/null; then
    eval "$(direnv hook bash)"
 fi

その他のシェルでの設定は https://github.com/zimbatm/direnv 参照。

Go プログラム開発ディレクトリでの設定

 $ cd project_dir
 $ export EDITOR=emacsclient # 次のコマンドで開くエディタ
 $ direnv edit .
   .envrc の編集用にエディタが開くので

   layout go

   と入力して保存。

後は Bash でこのディレクトリ以下(サブディレクトリも含む)に移動するとこの .envrc のあるディレクトリが GOPATH に追加され、また bin ディレクトリが PATH に追加される。便利。

なお direnv edit . しないで直接 .envrc を作った場合は、別途 direnv allow . を実行してこの .envrc を使うことを明示的に許可する必要がある。許可したかどうかは ~/.config/direnv/allow/* に保存される(freedesktop.org の XDG Base Directory Specification っぽくなっているので XDG_CONFIG_HOME 環境変数があれば ~/.config ではなくてその下に保存される)。

その他標準で

  • layout go
  • layout node
  • layout perl
  • layout python
  • layout ruby

などが用意されている。また

 PATH_add bin

のようにして PATH への追加も簡単。

その他コマンドの実行も可能なので開発以外にもいろいろ便利に使える。

スポンサード リンク
[ 4月30日全て ]

2015年5月1日 (金)

Emacs から go install する良い方法を知りたい

Go を使った開発で、とりあえず Emacs から M-x compile で

 GOPATH=<workspace_dir> go install github.com/user/<project>/...

みたいな感じでコンパイルしてみているのだけれど、もっといい方法がきっとどこかにあるはず。

"..." ワイルドカードについては go help packages して知った。

[ 5月1日全て ]

2015年5月8日 (金)

EmacsGo 環境整備

Go ベースのツール置き場を作る

Go で書かれている各種ツールを go get しておく場所を作っておく。このあたり定番のディレクトリ名が良くわからないので ~/local/golang にしておいた(~/local/go は Go 環境自体を入れてある)。

先日使い始めた ディレクトリ毎に異なる環境変数を設定してくれる direnv を使い、 ~/local/golang に移動したらここに GOPATH が設定されるようにしておき、そこで適宜 go get するようにする。

 $ mkdir ~/local/golang
 $ cd ~/local/golang
 $ echo 'layout go' > .envrc
 $ direnv allow
 $ go get -u golang.org/x/tools/cmd/goimports
 $ go get -u github.com/golang/lint/golint
 $ go get -u github.com/dougm/goflymake

今日は goimports と golint と goflymake をインストール

goimports は「gofmt + import の自動追加・削除」ツール。golint は Go 用の lint。 goflymake は名前の通り Go の Flymake ツール(on-the-fly 文法チェッカ)。

.bashrc

上の $GOPATH/bin に PATH を通しておく。

 if [ -d $HOME/local/golang/bin ]; then
     PATH=$PATH:$HOME/local/golang/bin
 fi

Emacs の設定

go-mode 自体は package.el でインストール済み(package.el は helm を入れた際に設定済み)。

以下今日いれたツールを Emacs から使う設定を追加。

 ; バッファ保存時に gofmt (あれば goimports) を実行してソースコード整形する。
 (add-hook 'before-save-hook 'gofmt-before-save)

 (let ((goimports (executable-find "goimports")))
   (if goimports (setq gofmt-command goimports)))

 ; M-x golint で golint をかけられるようにする。
 (let ((golint-emacs "~/local/golang/src/github.com/golang/lint/misc/emacs"))
   (if (file-exists-p golint-emacs)
       (progn
         (add-to-list 'load-path  golint-emacs)
         (require 'golint))))

 ; on-the-fly シンタックスチェックが動くようにする。
 (let ((goflymake "~/local/golang/src/github.com/dougm/goflymake"))
   (if (file-exists-p goflymake)
       (progn
         (add-to-list 'load-path  goflymake)
         (require 'go-flymake))))

今日のさえずり: gofmt-before-save (with goimports) と golint と goflymake 設定したら良くなった

2015年05月08日

  • 15:01 Windows は巻き寿司。 / “寿司の絵文字を比較して心を落ち着かせる | プログラミング生放送” http://bit.ly/1KoJkr7
  • 18:28 Emacs + Go 用に gofmt-before-save (with goimports) と golint と goflymake 設定したら良くなった。
[ 5月8日全て ]

2015年5月20日 (水)

今日のさえずり: Go で書いてる CLI ツールのログ出力に golang/glog チョイスした

2015年05月20日

[ 5月20日全て ]

2015年5月21日 (木)

今日のさえずり: Go 自身のバイナリリリースは misc/makerelease というベタなのだった(Go で書かれている)

2015年05月21日

[ 5月21日全て ]

2015年5月25日 (月)

今日のさえずり: チャックおろしたら「地震です!」とかやめて欲しい

2015年05月25日

  • 13:07 TwitterFacebook Connect を切った。
  • 14:30 チャックおろしたら「地震です!」とかやめて欲しい。
  • 19:16 Go での Prolog 実装ありそうだなと思ったらやっぱりあった。
  • 20:08 セブン-イレブンにあった冷凍済みのドリンク、結局アクエリアスだった。
  • 23:06 4カ月ほぼ全てアンフォロー状態にしていた Facebook を元に戻した。なにこのざわつき。
  • 23:08 片っ端から Facebook でフォローし直すと「『購読するフィードは厳選しましょう』一度に多くのユーザーのフィードを購読すると、ニュースフィードに大量の情報が届くようになる可能性があります。フィード購読について詳しくはこちら。」というのが毎回出るようになることがわかった。
  • 23:15 なんか充実したのがいっぱい流れてきた。これで良かったのだろうか。
[ 5月25日全て ]

2015年5月27日 (水)

今日のさえずり: データの寿命を考えて自作日記システムは(記事データは)テキストファイルですって言ったら驚かれた

2015年05月27日

[ 5月27日全て ]

2015年8月22日 (土)

YAPC::Asia Tokyo 2015 2日目

naney:20794290452

今日も朝から YAPC::Asia Tokyo 2015 の2日目です。まずは一杯の無限オレンジジュースからスタート。最初はトラックCから。 C の部屋に入れたのはこれが初めてです。なるほど狭め。

「Mackerel開発におけるScalaとGo、そしてPerl」 songmu @songmu 氏 #yapcasiaC

言語の特性にあわせて様々なプログラミング言語を活用しているというトーク。サーバサイドで使われているということでちょっと Scala が気になりますが、やはりここでもコンパイルが遅いという話が出ていました。

Go は小さなシングルバイナリを作れるというところがやはり大きな利点。あとはやっぱり Perlビルドなどのためのツールを作るのに便利だよねという話でした。

Perl 5.22 and You」 Ricardo Signes @rjbs 氏 #yapcasiaA

Ricardo Signes 氏のトークを聞くのは YAPC::Asia Tokyo 2013 1日目の時(記事)以来です。

前回同様 Perl の機能追加・削除についての話が中心。直観に反するような挙動が修正されるというところは言語としての完成度があがって良いなと。一方、さらに experimental として追加される文法は、ますます変態的になっていくなという印象もありました。

ランチ

今日は一人でぶらりとTFTビルへ。

「Adventures in Refactoring」 Ben Lavender @bhuga 氏 #yapcasiaA

リファクタリングを行う理由の中で「Developer Education」という話があって、理解のためにリファクタリングをしてもらうのも良いと言っていて、ああそうだよなと思いました。リファクタリングの素養はあるけれども、チームのコードは知らないという状態の時にはいいなと思います。

あとは、基本的には Martin Fowler の「リファクタリング」を読んでいれば OK な感じです。

ちょっとうつらうつらしてました。あと「カレのヒゲ」はマイクにこすれるので通訳的に要注意のようでした。

「Parallelism, Concurrency, and Asynchrony in Perl 6」 Jonathan Worthington @jnthnwrthngtn 氏 #yapcasiaA

Perl 6 における 並列・並行・非同期処理の話。 Perl 6 では言語レベルでこのあたりのサポートがしっかり入ってくるという印象でした。昨日聞いたトークといい、やはり Perl 6 が気になってきました。

Go Debugging, Profiling, and Optimization」 Brad Fitzpatrick @bradfitz 氏 #yapcasiaA

Go の各種ツールを使って時間やメモリを消費している部分を見つけてどんどん削っていく様子をライブで実演してくれました。なるほど、ちょっとしたコードでも工夫すると劇的に最適化できるみたいです。

実演中アセンブラコードをチェックしているところや、データが 1 word から 3 words で管理されているという説明などをみて、ああやっぱり Go は C/C++ 的なマシンへの近さやコンパクトさがあるよなとあらためて感じました。

「Lightning Talks Day 2」 #yapcasiaA

YAPC::Asia Tokyo 最後のトーク(になるかもしれない)となった LT は Kuniwak (@orga_chem) 氏の「Vim script性的解析の光と闇」でした。

CONBU さんが LT の時間内で設営・撤収デモまで実演していて、その素早さに驚嘆でした。まさに神業のレベルです。会期中お世話になりました。

「Wrap Up!」 Daisuke Maki @lestrrat 氏 #yapcasiaA

今年はキーノートが無いので LT が終わるとクロージングです。

今年の参加者はなんと約2,130人。今の形での開催は最後と言われている YAPC::Asia は今後どうなっていくのでしょうか。 YAPC::Asia Tokyo 2015 は「The End.」のスライドで幕を閉じました。皆さんお疲れさまでした。

YAPC::Asia Tokyo 2015 を終えて

去年の YAPC::Asia Tokyo 2014 では Go 言語の勢いを感じ、その後ちょっとした規模ですが業務ツール開発に使ってみたりしました。

YAPC::Asia Tokyo 2015 では近年になく Perl のトークを見た気がします。しかも今回は Perl 6 のコードををよく見た気がするのは気のせいでしょうか。今回はこれを機に Perl 6 にチャレンジしていきたいと思います。

今日のさえずり: 鉄道模型かハムかパールのようなものか

2015年08月22日

[ 8月22日全て ]

2016年10月26日 (水)

ようやく日記システム DiKicker のメンテナンス開始

この日記(nDiki)で使っている自作日記システム DiKicker開発し始めたのが2003年12月末なのでもう13年物だったりします。ここ最近大きなメンテナンスはしていなかったのですが、まだこの先10年以上使えるように手を入れることにしました。一昨日から着手。

やりたいこと

  • もともと WiKicker (WikiEngine) からの派生で作ったのでが WiKiEngine の方は使わなくなったので、不要なコードを削除したい。共通部分をスーパークラス化してあるけれどもここもまとめたい。
  • WikiName の特別扱いをやめたい。
  • Perl 5.005_03 でも動くように Perl 5.8.0 未満かどうかで処理を変えているけれども、もう 5.005_03 用のコードは消したい。
  • データを Berkeley DB にトリッキーな形で入れているので SQLite あたりに変えて簡単にしたい。
  • 最終的には Go で書き換えたりして。
[ 10月26日全て ]

2017年8月20日 (日)

ちゃおサマーフェスティバル2017 (ちゃおフェス)

image-half:/nDiki/2017/08/20/2017-08-20-114940-nDiki-1200x800.jpg image-half:/nDiki/2017/08/20/2017-08-20-114956-nDiki-1200x800.jpg

パシフィコ横浜 展示ホール 1F ホールDで昨日・今日の2日間開催のちゃおサマーフェスティバル2017(ちゃおフェス)に行ってきました。

世田谷区たまがわ花火大会に昨日行っていたら今日はお疲れで行かないかなと思っていたのですが、花火大会が雨で中止となったため今日は体力ばっちりで出掛けられることになりました。ちゃおフェスを知ったのは4年前の2013年8月の開催当日ちゃおを買ってみたのが2015年6月、そしてとうとう今年ちゃおフェスに参加です。

Twitter検索してみると始発で会場を目指している方もいていったいどれぐらい混雑しているのだろうと心配しつつ会場に向かったのですが、10:30 到着で入場自体は待つこともなくすんなりホールに入ることができました。

プリパラやアイカツスターズ!など大きいお友達が気になるメーカーブースもあるものの、少女漫画雑誌イベントだけあって、やはり小学生から中学生ぐらいの女の子連れの家族が来場者の中心でした。男の子が少ないこともあり、混んでいる場所でも落ち着いた雰囲気でまわりやすかったですね。アイカツスターズ! の S4 の服を着ている女の子とかがいたのにはビックリしました。

入口近くの原画展・色紙絵展示を楽しんだ後に会場をぶらぶら、各ブースは10〜60分待ち、あるいは時間指定の整理券制なので遠目からこんなのがあるのということで眺める感じで済ませました。中学生以下は入場の際にいろいろなノベルティの入ったビニール袋と Let's Go! スタンプラリーの用紙がもらえるので、スタンプラリーをしながら会場を回るのが楽しそうです。

ちゃおは「12歳。」以上に「プリプリちぃちゃん!!」推しっぽいですね。それから「ねこ、はじめました」もグッズがあったりしてだんだん力を入れてきてるようです。

最後にキャラ☆コレクショングッズコーナー(物販コーナー)で買い物をして会場を出ました。1時間強ぐらいいたかな。ちゃおフェス、満足です。

[ 8月20日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.511627s / load averages: 0.39, 0.58, 0.53
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker