タグ

golangに関するakaneharaのブックマーク (24)

  • Go For Perl Mongers

    Go For Perl Mongers (or, for Lightweight Language lovers) Daisuke Maki Engineer, LINE Corporation Who Is This Guy? @lestrrat LINE / Japan Perl Association / YAPC::Asia (2008~2013) STF / peco (new!) 2 俺とGo Goしてみて約1年弱 概算10~12万行くらい書いた。lived○○rBl○g の裏方にもこっそりgo入れてる 最初の4万行くらいまでに goの落とし穴にほぼ全て落ちた 自信がある 今日はその落とし穴から学んだ諸々の話 3 対象観客層 もともとPerl/Python/Ruby/PHPあたりから来た人 Goは最低限とりあえずかじった程度はやった人 かじってみたけど「Go、便利そうだけどなん

  • Go でツール書くときの Makefile 晒す - Qiita

    Go でツール書くときはタスクランナーとして make を使っています。ビルドだけじゃなくて、テストや配布用パッケージ作成も一括して make でやっています。 今回は整理も兼ねて、自分が普段どういう Makefile を使っているのか解剖していきます。 なぜ make を使うのか ビルドフラグ覚えるのが面倒だから、make は (Windows を除く) 大半のプラットフォームに入っていて使いやすいからというのが理由です。script/build みたいにシェルスクリプトを複数用意するのでもまあ良いと思いますが…。大半の Go プロジェクトは Makefile 置いてありますね。 make を使った開発フロー 基的には、リポジトリを git clone / go get -d した後に以下のコマンドを打てばアプリケーションをインストールできるようにしています。 $ cd $GOPATH

    Go でツール書くときの Makefile 晒す - Qiita
  • golang は ゆるふわに JSON を扱えまぁす! — KaoriYa

    以下のツイートにもある通り、一見 golang は struct を定義しないと JSON を扱えないように見えます。他にも似たようなツイートをチラホラと見かけましたが、それらは全部誤解です。そこでこの記事では、golang でゆるふわ (structを定義せず) に JSON を扱う方法を紹介します。 golangrubyのようにゆるふわにJSONは扱えない? https://t.co/olsryDHc5G — bamchoh (@bamchoh) 2016年6月24日 この記事では入力の json.Unmarshal() を取り扱いますが、出力の json.Marshal() にも応用できます。 TL;DR json.Unmarshal() には *interface{} を渡せます interface{} は dproxy を使うと、値のアクセスで楽ができます json.Unmar

  • Goのアンチパターン

    Go書いててなんとなく見えてきた Goでやっちゃいけないパターン WAF導入してらくらくWebアプリ WAF自体が現在群雄割拠状態。 WAF毎にハンドラインターフェースが違うので既存コードつなぐにはラッパーが必要。 どのWAFもLL言語に比べるとまだまだフィーチャーの網羅範囲が狭い。 なのでもちろんLL言語ほど楽には書けないことが多い。 リフレクション使いまくりでトータル性能はLL言語並みに遅いのもある。 Go1.7のcontextパッケージの導入で標準のHTTPハンドラが復権する可能性があり更に荒れる予想。 追記: 楽できるのを期待してWAFを導入するの「やっちゃいけない」とまでは言い過ぎだったかもしれないけれど例のsqlでPrepareを正しく使えていないで性能出なかった件とか、当面WAFを使うなら自分で概ね中身を理解して使う覚悟が必要。 構造体メソッドにロジックを詰め込む Goの思想

  • Big Sky :: golang の channel を使ったテクニックあれこれ

    golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればどう実装すればいいか分からないなんて事もあったと思います。しかし golanggoroutine/channel は、やっている内容の割にとても容易にスレッド間通信やキューイング、処理の受け待ち等を実装できる様になっています。尚、channel をどの様に適用したら良いかについては以下を参照下さい。 Big Sky :: Golang の channel の使い所 golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその grout... http://mat

    Big Sky :: golang の channel を使ったテクニックあれこれ
  • GolangのGCを追う

    Go1.5とGo1.6でGoのGCのレイテンシが大きく改善された.この変更について「ちゃんと」理解するため,アルゴリズムレベルでGoのGCについて追ってみた. まずGoのGCの現状をパフォーマンス(レイテンシ)の観点からまとめる.次に具体的なアルゴリズムについて,そして最後に実際の現場でのチューニングはどうすれば良いのかについて解説する. GoのGCの今 最初にGoのGCの最近の流れ(2016年5月まで)をまとめる. Go1.4までは単純なStop The World(STW)GCが実装されていたがGo1.5からは新たなGCアルゴリズムが導入された.導入の際に設定された数値目標は大きなヒープサイズにおいてもレイテンシを10ms以下に抑えることであった.Go1.5で新たなアルゴリムが実装されGo1.6で最適化が行われた. 以下は公開されているベンチマーク.まずはGo1.5を見る. Gophe

  • Go Kyoto(Go勉強会 そうだ京都、行こう) のハンズオン資料 (http://www.zusaar.com/event/4367004)

    README.md Go Kyoto (Go勉強会 そうだ京都、行こう) About 実施概要 2014/3/15 (土) 14:00 http://www.zusaar.com/event/4367004 前提 多言語で基的なプログラミング知識(Web 系?) がある。 Go のインストール、開発環境(エディタとか)の準備済み。 http://go-tour-jp.appspot.com/ を一通り(24, 48, 60, 69, 70 は飛ばしてよし) タスク管理ツール タスク管理ツール的なものを作りながら、 Go のひと通りの機能を触る。 Go をひと通り触るのが目的なので、ツール自体の機能とかはこだわらない。 他の言語での経験がある方が対象なので、プログラミング言語の基的な話は省略。 標準モジュールでできることのみ。 環境構築は終わっている前提。 1 ファイルで完結させる構成(

    Go Kyoto(Go勉強会 そうだ京都、行こう) のハンズオン資料 (http://www.zusaar.com/event/4367004)
  • Go Conference 2015 summer - 資料一覧 - connpass

    (未設定) Golang書き初め〜Golangではじめるセイバーメトリクス( #gocon 2015 summer 6/21)

    Go Conference 2015 summer - 資料一覧 - connpass
  • Go言語で API サーバーを開発する | カメリオ開発者ブログ

    こんにちは!白ヤギの開発者、森です。 白ヤギではいま API サーバーを Go 言語で開発しています。 皆さんも Go の話題をよく見聞きするようになっていると思います。今回は白ヤギの業務でどんな風に Go を使って開発しているかの一端を紹介します。 余談ですが、先日、大学の先生とお話ししたときにこんな話を伺いました。その先生は学生にプログラミングを教えているそうですが、何割かの学生は及第点に届かないそうです。しかし、そういった学生がプログラミングの素養がないかというとそういう訳ではなく、プログラミングを学ぶ上でその学生にとって何が理解を促すのかが違うだけなのだと仰っていました。教える側として全ての学生が習得できるプログラミング教育というのを見つけられていないのが悔しいといった話をされていました。 何かを学ぶというのを一般論では語るのは難しいということかもしれません。そのため、私はこうい

    Go言語で API サーバーを開発する | カメリオ開発者ブログ
  • Goはオブジェクト指向言語だろうか? | POSTD

    “オブジェクト指向”の意味を当に理解するには、この概念の始まりを振り返ることが必要です。最初のオブジェクト指向言語はSimulaという言語で、1960年代に登場しました。オブジェクト、クラス、継承とサブクラス、仮想メソッド、コルーチンやその他多くの概念を導入した言語です。おそらく最も重要なのは、データとロジックが完全に独立したものであるとする、当時では全く新しい考え方をもたらしたことでしょう。 Simula自体には馴染みがない方も多いかもしれませんが、Simulaからインスピレーションを得たとされるJavaC++、C#、Smalltalkといった言語は皆さんよくご存知でしょう。さらにそこからインスピレーションを得たものとしてObjective-CやPythonRubyJavaScriptScalaPHPPerlなど様々な言語があり、Simulaは現在使用されているポピュラーな

    Goはオブジェクト指向言語だろうか? | POSTD
  • GWにGo言語で作ったMeetAppというサービスの開発記録 - きょこみのーと

    GWに2〜3日くらい気だして、MeetAppというサービスをリリースしました。 フロントエンド&企画をやっていただいた@tejitakさんのブログに大体の概要が書いてありますので、こちらを併せてご覧いただければと。 GWハッカソンでMeetAppという趣味アプリ開発者のためのサービス作りました - TEJI TECH BLOG 自分の方は、Goの構成や使っているライブラリや開発中のTipsなどをまとめようかと思います。 Goの構成 使ったライブラリ guregu/kami : Webフレームワーク(先輩) unrolled/render : jsonやhtmlのレンダリング kyokomi/goroku : 今回作った(heroku用) gotsunami/go-cloudinary : CloudinaryのAPI gopkg.in/airbrake/gobrake.v1 : airb

    GWにGo言語で作ったMeetAppというサービスの開発記録 - きょこみのーと
  • Go言語でSQLのトレースをする

    ぴっぴ先輩が「Go言語で発行したクエリを確認したい」って言ってて、 「MySQL使っているならGeneral Logを吐けばよいのでは?」と返したんだけども、 もっと汎用的な方法はないものかと考えてみました。 Golangdatabase/sql はどんなDBでも対応できるよう、ドライバを自由に入れ替えることができます。 ドライバは単にdatabase/sql/driverにあるインターフェースを満たしている何かなので、 ユーザが自由に作ることができるし、interfaceを経由して直接呼び出すことも可能です。 この仕組を使って、別のドライバにそのまま渡すプロキシを作れば、ログを吐けるのでは?ということでやってみました。 go-sql-proxy 使い方 まず最初にgo-sql-proxyをドライバとして登録します。 hooks := &proxy.Hooks{ // Hook fun

  • MQTT as a Service: Sango のリリースをお手伝いしました — そこはかとなく書くよん。 ドキュメント

    MQTT as a Service: Sango のリリースをお手伝いしました¶ 日 2014年8月29日より、親会社の 時雨堂 はMQTT をインターネット上で簡単に利用できるサービスである「Sango」を提供開始しまし た。 https://sango.shiguredo.jp ダッシュボードはこんな感じで、MQTTへの接続情報が載っています。 GitHubアカウントがあれば、すぐに使いはじめることが出来ます。現在のとこ ろ無料プランだけが提供されており、加えて五百円プランを10月をめどに始め る予定です。無料プランはずっと提供する予定です。 詳細は プレスリリース を見てい ただくとして、ここでは軽く使い方と中身を紹介します。 Sangoの使い方¶ SangoGitHubアカウントで簡単にログインできます。 ログインすると MQTT接続情報 として、 - 接続先 : mqtt:/

    MQTT as a Service: Sango のリリースをお手伝いしました — そこはかとなく書くよん。 ドキュメント
  • RabbitMQ + Paho-Golang-ClientでMQTTを始める - blog::wnotes.net

    MQTT始めました リアルタイムWebという言葉をたまに聞きますが、WebSocketから始まり、WebRTCもやったし、次はMQTTやろうと思ったので、環境構築と簡単な動作メモを残します。 MQTTって何? 他のエントリで詳しく書かれているので、そちらを参照してください。↓のリンクは大体の人が見てると思います。 MQTTについてのまとめ -そこはかとなく書くよん。 以前WebRTCの発表をした時にもワードは観測していたのですが、ここ最近良く聞く用になってきたし、モバイル向けの配信基盤として有用なんじゃないかなって思います。 今回は、MQTTブローカーとしてRabbitMQ、Publish/SubscribeクライアントとしてPahoのgolangクライアントを使いました。 Rabbit MQ Paho PahoはGolang以外にもJavaScriptPythonC++もあるので、色

  • 複数プラットフォームにGoアプリケーションを配布する

    複数プラットフォームにGoアプリケーションを配布する tcnksm/jj 最近試しにGo言語でCLIアプリケーションを作成した.joelthelion/autojumpをシンプルにしただけのツールで,ディレクトリを保存して,どこからでもその保存したディレクトリへの移動を可能にする. Goの環境さえあれば,このようなGo言語のアプリケーションの配布はとても簡単で,インストールは以下のようにするだけでよい. $ go get github.com/tcnksm/jj_ これだけではなく,Goはクロスコンパイルが簡単で,様々なプラットフォーム向けにバイナリを生成することができる.つまり,Goがインストールされていない環境に対しても簡単にツールを配布することができる. Packerなどの最近のHashicorp制のツールは,Go言語で書かれており,OSXLinuxWindows,FreeBSD

  • HomeBrewで自作ツールを配布する

    HomeBrewで自作ツールを配布する 複数プラットフォームにGoアプリケーションを配布する 上の記事で,Go言語で作ったツールを複数プラットフォーム向けにクロスコンパイルし,作成されたバイナリをBintrayでホストするまではできた.あとは,ダウンロード・展開・PATHを通す,をやってもらえば,自分の作ったツールを使ってもらえる. OSX向けにツールを配布する場合はHomeBrewのFormulaを作っておけば,これをもっと簡単にできる. TL;DR 以下でインストールできるようにする. $ brew tap <ユーザ名>/<パッケージ名> $ brew install <パッケージ名> ただし作成したツールが,GithubのリリースページやBintrayにホストされていることを前提とする. Formulaの作成 Formulaとは,HomebrewでインストールするパッケージのURLや

  • 高速にGo言語のCLIツールをつくるcli-initというツールをつくった

    高速にGo言語のCLIツールをつくるcli-initというツールをつくった tcnkms/cli-initGitHub cli-initを使えば,Go言語コマンドラインツール作成時のお決まりパターンをテンプレートとして自動生成し,コア機能の記述に集中することができる. デモ 以下は簡単な動作例. 上のデモでは,addとlist,deleteというサブコマンドをもつtodoアプリケーションを生成している.生成結果は,tcnksm/sample-cli-initにある. 背景 Go言語で作られたコマンドラインツールを見ていると,codegangsta/cliというパッケージがよく使われている. これは,コマンドラインツールのインターフェースを定義するためのライブラリで,これを使えば,サブコマンドをもつコマンドラインツールを簡単につくることができる(Usageを自動で生成してくれたり,bash

  • Go言語 + cli-init でコマンドラインツールを作る | DevelopersIO

    よく訓練されたアップル信者、都元です。最近社内のメンバーがみんなGo言語の世界で楽しそうなので、私も混ざってみることにしました。最初のセットアップや基礎文法等は、私も平行して急いで学ぶGo langシリーズで勉強中です。 コマンドラインツールが作りたい と思っています。ちょっとしたものを作るとしたらPythonなのかな、と思って友達Pythonistaにインタビューをしたところ、「ちょっとしたツール作るとかって用途の人は Golangに移行した(えっ」という衝撃的なコメントを貰い、もうこの際だからGo勉強すっかという空気になった次第。 具体的な環境構築 基的には急いで学ぶGo langシリーズを読めばいいのですが、一点迷ったのがディレクトリ構成です。 Go言語で幸せになれる10のテクニックでは「GOPATHは一つだけ (Use a single GOPATH)」という指針が紹介されてい

    Go言語 + cli-init でコマンドラインツールを作る | DevelopersIO
  • 急いで学ぶGo lang#4 関数・ポインタ・制御構文 | DevelopersIO

    Goの制御構文 今回は関数やポインタ、条件分岐、ループなどを使ってみます。 動作環境 今回使用した動作環境は以下のとおりです。 OS : MacOS X 10.9.4 Go : 1.4.1 IDE : IntelliJ IDEA 14 CE ここを参考に、GOPATHとGOROOTは設定しておいてください。 Goの関数 関数定義 Goで関数はfuncを使って定義します。funcに続いて関数名、引数があれば引数を記述します。戻り値があればそれも記述します。 // func functionName ( arg1 arg1Type, ・・・) (result1 resultType・・・) func add(x int, y int) int { return x + y } z:= add(2,3) //z = 5 可変長引数 引数に...を指定すれば可変長引数をとることも可能です。 fun

    急いで学ぶGo lang#4 関数・ポインタ・制御構文 | DevelopersIO
  • Go 1.2 パフォーマンス改善のまとめ - ワザノバ | wazanova

    http://blog.gopheracademy.com/day-02-go-1.2-performance-improvements Gopher Academyがブログで、Go 1.2 のパフォーマンス改善点をまとめています。 1) 8kb stack segments goroutineはデフォルトで4,096 bytesのstack segmentsが割り当てられているが、繰り返しのある、もしくは長いcall chain(ほとんどのencoding/*パッケージはこれに当てはまる。)のstack splittingやstack straddlingのある内部ループを含むコードは、パフォーマンスが落ちることで知られていた。10月がRuss Coxが、この値を倍の8kにすることを提案。前提となるJsonEncoderのベンチマークが安定しないという問題があったが、Go 1のベンチマー