Go Conference 2014 spring で発表した資料。 受託開発に持ち込んだ事例紹介。 http://connpass.com/event/6370/
Go Conference 2014 spring で発表した資料。 受託開発に持ち込んだ事例紹介。 http://connpass.com/event/6370/
(以下はgo 1.2.x時点での話です。将来的に仕様がかわるかどうかはわかりません) これを読んでいて、こういうの気にしてない人多いんだろうなーと思って、書いてみます。元のポストはdeferの挙動について語っているように見受けられるけれども、これは要は複数スレッドで実行されるコードについて、プログラム終了時に同期とか取りたくない、という話だと思ったので、このポストのdeferを正しく動かすには…というところからどういう形でgoroutine同士で同期を取る方法があるのか、一例を書き出していきます。 TL;DR; goでいくらgoroutineが気軽にかけるからと言って、複数スレッドで処理が行われているので同期はキチンとやらないとダメですよ。 deferの基本 goではLLのノリでコードを書けるのが売りの一つですが、メモリ管理はしてくれるものの、様々なリソース解放も全て自動というわけではあり
SoundCloudが2年半ほどGo言語を利用したプロダクトを本番で運用した知見をGopherConで発表していた(“Go: Best Practices for Production Environments”).その中で“CodeReviewCommentsというGoogleでのGo言語のコードレビューにおいてよくあるコメントをまとめたサイトが紹介されていた. 最近Go言語を書くようになり,使えそうなのでざっと抄訳してみた.“リーダブルコード”的な視点も含まれており,Go以外の言語でも使えそう. gofmtでコードの整形をすること コメントは文章で書くこと.godocがいい感じに抜き出してくれる.対象となる関数(変数)名で初めて,ピリオドで終わること // A Request represents a request to run a command. type Request str
本日、mackerel-agentをオープンソース化しました。リポジトリはGitHub上のmackerelio/mackerel-agentです。 mackerel-agentはGo言語で記述されています。現状は、CentOS及びDebianでの動作を対象としています。 特定の環境で動作しないなどの不具合や各種メトリックの対応など、問題や要望がありましたらぜひPull RequestやIssueによりご報告ください。(お手数ですが、英語でお願いします。) 今後配布するmackerel-agentの開発は、このリポジトリ上で行なう予定です。現在公開されているソースコードはmackerel-agentの次バージョン(0.6.0)の予定で、現在配布中のバージョン(0.5.1)には含まれていないコードも含まれています。 また、セキュリティ的な問題は support@mackerel.io に直接ご
Qiitaは2ヶ月ぶりです。 GopherCon2014でSoundCloudの方がプロダクションでGoをどう使うかというところで発表されていたようです。その内容がブログで公開されていたので、僕の勉強も兼ねて翻訳することにしました。 英語は得意でないのですが、ザクッと訳してみました。きっと間違い有るので、どうかご指摘ください。 元ネタ:http://peter.bourgon.org/go-in-production/ スライド:https://github.com/gophercon/2014-talks/blob/master/best-practices-for-production-environments.pdf SoundCloudでは、たくさんのクライアントに対してAPIの形でプロダクトを提供するようにしています。ですから、ウェブサイトやモバイルクライアント、モバイルアプリの
golang が提供するインタフェースの中で代表的な物の使い方をまとめてみる。 io.Reader type Reader interface { Read(p []byte) (n int, err error) } ご存じ io.Reader。このシグネチャの Read を実装しておけば golang のありとあらゆる入力機能に対して自分のコードを提供する事が出来る。 例えば永遠に「おっぱい」と言い続ける Reader だと以下の様な実装になる。 package main import ( "io" "os" ) var text = []rune("おっぱい") type OppaiReader struct { n int } func (r *OppaiReader) Read(p []byte) (int, error) { in := len(p) nw := 0 for i
まずはツールの紹介 昨今、注目を浴びているアプリケーションコンテナを作ったり管理したりできるDocker。 そろそろ中身も理解しておきたいところ。特に最近はlibcontainerというのができて、lxc依存すら切り離されているとの噂。 ただ、結構ソースコードの量も大きくなっているので(2014/4月現在 テストコード除いて70000行弱)、 さっと大まかに理解するためのツールを書いてみました。 このツールはgoのastからパッケージの間の依存関係を読んで、graphvizの解釈するdot言語に吐き出すツールです。 たとえば、最近話題のgo-xslateの全体像をつかもうと思ったら、 のようにすることで、 拡大 こんな感じにパッケージ間の依存関係を図示することができます。 これだけでも何となくどんな構造になってるかわかってきそうですね。 不安定性の表示 govizにはdot言語の出力の他に
1.Goの環境設定 1.1. Goのインストール 1.2. GOPATHとワーキングディレクトリ 1.3. Goのコマンド 1.4. Goの開発ツール 1.5. 概要 2.Go言語の基礎 2.1. こんにちは、Go 2.2. Goの基礎 2.3. フローと関数 2.4. struct型 2.5. オブジェクト指向 2.6. interface 2.7. マルチスレッド 2.8. 概要 3.Webの基礎 3.1 webでの作業方法 3.2 Goで簡単なwebサーバを立てる 3.3 Goはどのようにしてweb作業を行うか 3.4 Goのhttpパッケージ詳細 3.5 概要 4.フォーム 4.1 フォームの入力を処理する 4.2 フォームに入力された内容の検証 4.3 クロスサイトスクリプティングの予防 4.4 フォームの複数回送信の防止 4.5 ファイルのアップロード処理 4.6 概要 5.デ
いまや高速パターン検索といえばag(The Silver Searcher)ですが、検索対象がUTF-8のテキストを前提としているため、EUC-JPやShift-JISといったファイルを検索するのに課題があります。 これまで、それらの日本語文字セットを検索できるようにするため、色々とagの改造、公開を行っていました。 ag(The Silver Searcher)でEUC-JP/Shift-JISのファイルも検索できるようにしてみた 日本語圏特化型ag -白金- の配備が完了しました しかし、特定の国の文字コードだけに特化した修正というのをmasterに取り込んでもらうわけにもいかず、派生ブランチとして追随するのも、やはり面倒… そこで年始にGo言語を触ったのをきっかけに、Go言語でパターン検索ツールをつくってみました。 せっかくなのでポストagを目指して、プラチナサーチャー(The Pl
http://matt.aimonetti.net/posts/2013/11/30/sharing-rails-sessions-with-non-ruby-apps/1 comment | 0 pointsSpliceのFounderのMatt Aimonettiが、Railsアプリとセッションが共有できる仕組みをGoアプリ用に提供しています。他の言語への移植にも利用できるようです。 RailsとGoのアプリでセッションを共有、具体的には、認証されたRailsのユーザがGoで書かれたエンドポイントにJavaScript APIでコールすることを試してみた。まとめると、 実現可能。こちらのGoパッケージを参照されたし。 Rails 4.0以降にアップグレードすべし。 Railsのセキュリティには批判があるが、最近のソリューションではエキスパートが工夫をこらしている。 RailsはRub
Docker はひとつの Linux システムの上で、複数の Linux システムを動かすためのソフトウェアだ。システムの分離には Linux Containers (LXC) を、ファイルシステムまわりには Advanced multi layered unification filesystem (Aufs) をつかっている。 Docker は Go で書かれている。ソースコードは全体でだいたい15,000行で、そのうちおよそ 2/3 が本体、1/3 がテストとなっている。 % cat **/*.go | wc -l 14976 % cat $(ls **/*.go | grep -vi test.go) | wc -l 9797 % cat $(ls **/*.go | grep -i test.go) | wc -l 5179 % Docker Init, Docker Daemo
本稿では、Goを含む複数種類の言語により実装されたソフトウェア(具体的には、シャドウプロキシサーバ)のベンチマークを行うことで、各言語間の差異について考察します。 シャドウプロキシサーバとは? Webアプリケーションのテストをいくら入念に整備したとしても、実際に起こり得るすべての可能性を網羅することは難しいのはもちろん、同じコードを複数の環境(言語やフレームワーク、ミドルウェア等のバージョン)で同じように動作することを保証するのは至難の業です。そこで、ユーザの実リクエストを複製して、稼働中の環境とは別に用意したテスト用の環境にもリクエストを送ることで検証をするというアプローチがとられます。そのために使われるツールのことを、シャドウプロキシサーバ(shadow proxy server)と呼びます。 最近では、気軽なMySQLバージョンアップ - まめ畑において、MySQLのバージョンアップ
この記事は Go Advent Calendar 2013 の 10 日目の投稿です。 はじめに 業務のツールや連携させる一部の機能として golang を使い出している方もチラホラ現れ始めました。 golang でウェブアプリケーションを書く人も多いですが、実はコマンドラインアプリケーションやバックグラウンドサーバを書くのに非常に役立ちます。 本記事では、golang を使うとどの様に簡単にバックグラウンドサーバや UI が書けるのかを紹介したいと思います。 非同期処理 例えば長い処理の終了を判定して画面を更新したいとします。長い処理を行っている間、キーボードイベントの判定や別の入出力処理、タイムアウト判定等を実行出来る様にする場合、C言語で書くと結構なコード量になり得ます。 しかし golang を使う事でこういった複雑な処理を簡単に実装出来てしまいます。 golang の特徴と言えば
この記事は Go Advent Calendar 2013 の 9 日目の投稿です。 今回は、 Go の testing というパッケージの使い方を解説しようと思ったのですが、 それだとつまらなすぎるので、合わせて Go が test というか assert についてどういうスタンスをとっているかを書いてみます。 Go でテスト さて、「テストのないコードはレガシーコード」などと言われて久しく、様々な言語が test (主に Unittest) について言語レベルでサポートしたり、デファクトなライブラリが確立したりといった状況が、今日では至って普通のこととなっています。 そんな言語や環境で、息をするようにテストを書いてきたみなさんが、はじめて Go でコードを書く時に見るべきは testing パッケージです。 http://golang.org/pkg/testing/ 命名規則 では、
Introduction to Go 1.2 Since the release of Go version 1.1 in April, 2013, the release schedule has been shortened to make the release process more efficient. This release, Go version 1.2 or Go 1.2 for short, arrives roughly six months after 1.1, while 1.1 took over a year to appear after 1.0. Because of the shorter time scale, 1.2 is a smaller delta than the step from 1.0 to 1.1, but it still has
普段 vim-jp や色んな所で jekyll を使っているのだけど、どうも遅くて困っていました。 Windows だと ruby 本体の起動も重いのに、たかだか数十ページの生成に十数秒、PCの負荷が高い時には30秒近く掛かったりしていました。 何とか出来ないかなーと思って、golang を使ってクローンを作ってみました。 mattn/jedie - GitHub jedie - static site generator, jekyll replacement, in golang https://github.com/mattn/jedie インストールは以下の様に行います。 $ go get github.com/mattn/jedie jekyll と同様にひな形の出力も出来ます。 $ mkdir mysite $ cd mysite $ jedie new . markdown
Treasure Data の REST API をコールするライブラリを書いた。 REST API | Treasure Data REST API The user can control Treasure Data using the public REST API. This article will explain how... http://docs.treasure-data.com/articles/rest-api mattn/go-treasuredata ・ GitHub https://github.com/mattn/go-treasuredata 使い方はこんな感じ。 client := treasuredata.NewClient("TREASUREDATA-API-KEY") job, _ := client.JobIssueHive("mydb", "se
golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその groutine と通信する為の仕組みと考えると分かりやすいです。 package main import ( "fmt" "time" ) func main() { task := make(chan string) taskquit := make(chan bool) workerquit := make(chan bool) go func() { loop: for { select { case <-taskquit: workerquit <- true break loop case job := <-task: fmt.Println(job) } } }() go func() {
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く