2016/09/27 Cache Night http://gunosy-beer.connpass.com/event/40945/ で発表した、 Goとmemcachedとマイクロサービスの話です。キャッシュ戦略やライブラリ選定、紹介の話がメインです。Read less
はじめに タイトルの通りvimで作るGoの開発環境が便利なのでまとめたものです。 特にコードリーディングに便利な設定を紹介します。 参考 本稿を書くに当たって参考になった記事です。 日付が新しい順に並べていますので下の方は古い記述を含んでいます。 vim-go-extra を公開致します。 http://vim-jp.org/blog/2014/09/02/vim-go-extra.html Go 1.2.1 の環境構築 Homebrew + Vim 編 (2014.03) http://qiita.com/methane/items/4905f40e4772afec3e60 Big Sky :: Vimを使ったGo言語開発手法 http://mattn.kaoriya.net/software/vim/20130531000559.htm goのvimコマンド「Fmt」が、実はquick
6. GoでWebアプリを開発する メリット ● インタプリタと比較して 高速・軽量 ○ Railsより50倍の速度と10倍の省メモリという話も[1] ● 並列処理 が簡単 ○ goroutine(スレッド)と channel(メッセージパッシング) ○ go func() のように go を使うだけ ● シングルバイナリ でデプロイ ○ コンパイルしたバイナリをアップロードするだけ ○ ライブラリのインストールなどが不要 ○ コンテナ や マイクロサービス との親和性が高そう 16/02/27 6 [1] https://plus.google.com/+MattAimonetti/posts/PeZk8FY3PWY 7. GoでWebアプリを開発する メリット ● コーディング規約 を統一 ○ gofmt(goimports)で強制的に直される ○ 可読性が上が
Go使いたくなる理由の一つに、マルチスレッドプログラミング的なものを高速な言語で安全に実装したいというのがある。Goにおいてそれを支えるのが、自前で実装した軽量スレッドといえるgoルーチンと、mutexなどのロックの代わりに使えるChannelという概念だ。 実際に実装するときに、Goルーチンは難しくないが、Channelを使うのは割と知識と経験が必要なのでここでは、Channelについてすこし詳しく書いてみる。 Message Passing まずは理論から。 Goのチャネルなどのロックを使わない方法の並行処理はMessage Passingと呼ばれている。 以下の英語版Wikipediaにあるように数学的な理論にもなっているしっかりした枠組み。 ErlangのActor Modelなどもこの仲間。GoのチャネルとActor Modelは、実は、同等の概念で表現方法が違うだけらしい。 (
Go言語を一通り学べるgoogle設えのA Tour of Goというチュートリアルをやっている。 A Tour of Go Go言語の最大の特徴であるgoroutineやchannelも含めて、Go言語をとりあえずウォークスルーできるから、趣味や仕事でGo言語に入るための第一歩としてとても良い。 しかしながら、このチュートリアルを通して、Go言語自体へのムクムクとした不満が、季節外れの入道雲のように立ち昇ってきた。 それは、省略がヒドいというもの。 Channel 実際に見てみよう。まずは、goroutineやその呼出元の間で値をやりとりするために使われるchannnel。これがロック機能も備えていることで、非同期処理どうしで同期的なロジックを簡単に組み込める素晴らしい仕組みなのだけれど、これを生成する処理が……。c := make(chan int) 出典はA Tour of Goの6
Go言語のDependency/Vendoringは長く批判の的になってきた(cf. “0x74696d | go get considered harmful”, HN).Go1.5からは実験的にVendoringの機能が入り,サードパーティからはDave Chaney氏を中心としてgbというプロジェクベースのビルドツールが登場している.なぜこれらのリリースやツールが登場したのか?それらはどのように問題を解決しようとしているのか?をつらつらと書いてみる. Dependencyの問題 最初にGo言語におけるDependecy(依存解決)の問題についてまとめる.Go言語のDependencyで問題なのはビルドの再現性が保証できないこと.この原因はimport文にある. Go言語で外部パッケージを利用したいときはimport文を使ってソースコード内にそれを記述する.このimport文は2通りの
Intro この記事は Go Advent Calendar 2014 の 15 日目の記事です。 例えばネットワークのフレーム処理的なものを書いている場合、以下のようなコードがよくでてきます。 There are many codes like this, while writing a Network Frame Parser program. var type uint8 err = binary.Read(r, binary.BigEndian, &type) if err != nil { return err } var length uint32 err = binary.Read(r, binary.BigEndian, &length) if err != nil { return err } ... 関数の中では、各要素の長さ毎に読み込んで、読み込みに失敗したらエラーを
概要 k0kubun/ppという、pretty printライブラリを作った。 任意の型のオブジェクトをpp.Print()に渡すと色つきでpretty printしてくれるという非常にシンプルなもの。 作った背景 fmt.Printf("%#v", ...)等ではわかりづらい複雑なmapやstructをdebug printするときは、pretty printを使うと便利。既存のpretty printライブラリには、GitHubで人気なものだとdavecgh/go-spewやkr/prettyなどがある。 いままではGoでデバッグのために複雑な構造をダンプするときこれらを使っていたのだが、必要以上に型の情報が書かれていたり、大きなものだと白黒なのでパッと見てわかりづらいなどの問題があった。 そこで、型やフィールドごとに別の色をつけることで視認性を高め、ビルトインの型情報は色にまかせて省
Intro Go にはベンチマークを取る仕組みが標準で備わっています。 テストを書く仕組みも標準で備わっており、 testing モジュールと go test コマンドで行いますが、 ベンチも同じような形で実行することができます。 今回は簡単なベンチ取り方を紹介します。 テストについては、そのうちちゃんと触れます。 参考ソースとして、こちらを使います。 https://github.com/Jxck/swrap 対象のコード 例えば以下のようなコードがあって、そのベンチを取るとします。 // swrap.go type SWrap []byte func (sw *SWrap) Add(a byte) { *sw = append(*sw, a) } func (sw *SWrap) Len() int { return len(*sw) } Slice にメソッドを生やしただけです。 ベ
ゴール 前回のエントリでは、PaaSの代表格であるHerokuをとりあえず使ってみた 今回はHerokuでGo言語製ウェブフレームワークのひとつであるRevelを動かしたい 番外「サブドメインをかっちょよくしたい」 記録 とりあえず新しいRevelプロジェクトつくる % revel new myapp % cd $GOPATH/src/myapp gitリポジトリにする % git status fatal: Not a git repository (or any of the parent directories): .git % git init # なにかmodifyしたかったらここで何かして... % git add . % git commit -m "Initial commit だよーん" RevelをHerokuで動かす用のBuildPackを指定しつつ、herokuイン
この前herokuにgolangのアプリを初めてデプロイしたんですが、絶対に忘れそうな手順だったので、次にやるときにここ見ればできるようにメモっておきます。 手順 1. .godirを用意する。 プロジェクトのルートにgo get先を記した.godirを用意します。 $ echo "github.com/yosuke-furukawa/goweb-sample" > .godir2. Procfileを用意する。 $ echo "web: goweb-sample" > Procfilego buildで作られるバイナリを実行する形式で指定しておく。 3. goのbuildpackを入れてheroku createする $ heroku create -b https://github.com/kr/heroku-buildpack-go.git goweb-sampleheroku-bu
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く