タグ

golangに関するbokuwebのブックマーク (17)

  • Golangにおけるinterfaceをつかったテストで mock を書く技法 - haya14busa

    いい記事に感化されて僕も何か書きたくなった。 Golangにおけるinterfaceをつかったテスト技法 | SOTA リスペクト: Big Sky :: golang で終了を確認するテストの書き方 GolangAPI Clientを実装する | SOTA Big Sky :: GolangAPI Clientを実装する、の続き 今週のやつではなく先週のです.今週のは特に知見がなかった…grpc-goとか使えたらクライアント勝手に生成されるしいいよねgrpc流行ると便利そう(感想) くらい Golangにおけるinterfaceをつかったテスト技法 | SOTA めっちゃいいなーと思ったんですが,テスト用 の mock を気軽に作るテクニックはあまり詳しく紹介されてなかったのでそのあたりの1つのテクニックを書きたい. 前提 僕もテストフレームワークや外部ツールは全く使わない.標準のt

  • Goのreflectパッケージはいつ使うのか

    Goを書いていて、実際のユースケースに遭遇するまでメリットが実感できないものとして、reflectパッケージが挙げられると思います。 実際のところ、reflectパッケージで取れる情報についてはいろんな記事でまとまっているものの、じゃあそれを使って何ができるんだ、実益があるのかという点を体感する機会は人によりけりです。 よくある説明と違和感「メタプロ的なことができるぜ」「構造体の情報を取得してあれこれできるぜ」という説明を受けることがありました。 ただ、僕的にはいまいちイメージが掴めずにいました。おまけにパフォーマンスに負の影響があるから基的には使わないものとして認識している方が多いと思います。 lestrratさんの少し前の資料とかを見て、そんな感じのイメージでいました。 Goを学習した時に、goroutineとかは利用場面に比較的に早くから遭遇できる一方、reflectパッケージはい

    Goのreflectパッケージはいつ使うのか
  • 物理サーバを選定する際のポイント – Eureka Engineering – Medium

    Eureka EngineeringLearn about Eureka’s engineering efforts, product developments and more.

    物理サーバを選定する際のポイント – Eureka Engineering – Medium
  • golangでAPIなど外部にアクセスするロジックのテストをする - $shibayu36->blog;

    golangで、例えばGithubAPIを叩くような、特定のAPIにアクセスするロジックを書いた時、何も考えずにテストを書くと、テストを実行する際にもそのまま外部のAPIにアクセスしてしまう。この場合、色んなパターンのテストを書きづらい、依存している外部サービスが落ちたらテストも一緒に落ちるなどの問題が起こる。 このような問題から、統合テストではなくユニットテストのときは手元のみで完結して、外部サービスに依存しない状況でテストを書きたくなることがある。そこで今回は外部にアクセスするロジックを、手元で完結させた状態でテストする方法を試したので、その方法について書いてみる。 テストしたいコード 例えば以下のようなコード。Githubの https://github.com/shibayu36/shibayu36 の最新のリリースタグを取得し、そのリリースタグ名を出力する。これはGithub

    golangでAPIなど外部にアクセスするロジックのテストをする - $shibayu36->blog;
  • GitHub - coderick14/ARMed: A terminal-based emulator of the ARM instruction set written in Golang

  • golang でループを手っ取り早く並列化する方法 — KaoriYa

    func execLoop(list []Item) { for _, item := range list { do_something(item) } } list に格納された各 item に対して do_something() を適用する、よくあるタイプのループ処理です。 goroutine で並列化、その副作用 golang ではこの do_something() の適用を超お手軽に並列化できます。あ、もちろん do_something() はリエントラントである前提ですね。

    bokuweb
    bokuweb 2017/10/25
    “リエントラント”
  • GoとBazel

    最近、メインの仕事ではGoで書かれたサーバをいじっていて、ビルドするのにBazelを使っている。使っているとBazelなかなかいいやつだな、と好感を持つのだけど、でもGoの場合、標準ツールとの相性というのがなあ、という微妙さもある。 その辺の個人的な雑感です。 Bazelとは Googleが公開しているオープンソースのビルドシステム。もともと社内に存在していたビルドシステムのオープンソース版という位置づけ。社内版と何がどう違うのかはよく知らない。BUILDという名前のファイルにビルドレシピを書く。構文はそこそこ簡潔で、わりと宣言的に書ける。ちなみに構文はPythonのサブセットなのだけど、Bazel自体はJavaで書かれている。なぜ……いやまあそれはべつにいい。 社内版ビルドシステムと構文が同じなので、社内版プロダクトがわりとそのまま(もしくは構文解析後のノードの簡単な書き換えによって)オ

    GoとBazel
  • シュッと golang に入門する話 - ちなみに

    photo by ajstarks なんか最近みんな書いてる golang 。OSS へのコントリビュートチャンスも増えてきました。自分でバリバリ書くには時間も自信もない。でも、バグ修正くらいならやってみたい。それくらいの目的のために最低限必要な知識を書いてみました。 この記事では、自分ではバリバリ書けないけれど、golang の OSS プロジェクトには貢献したいという人向けに、出来るだけシュッと学べるように重要なポイントのみ絞って紹介していきます。 初心者向けの優しい解説記事という訳ではないので、自分で調べるためのキッカケとしての読み方を想定しています。また、自分自身が想定読者のため、間違ったことを書いている可能性もあります。という逃げも書いておきます。 開発環境 基的に Mac OSX + HomeBrew + Atom を前提とします。といいつつ、golang も Atom もす

    シュッと golang に入門する話 - ちなみに
  • Go で API サーバーを開発してきて1年が過ぎました | カメリオ開発者ブログ

    白ヤギの開発者の森です。 白ヤギでは Go 言語でニュース記事のキュレーションをする カメリオ API というサービスを開発しています。約1年2ヶ月前、Go を使って開発し始めたときに当時調べた内容を整理して以下の記事を書きました。 Go言語で API サーバーを開発する 1年以上に渡り開発を継続してきて変わったこと、変わってないことなどをざっくばらんにまとめてみます。たまたま過去の記事のはてブコメントを見返していて 以下のコメント を見つけました。 最近 golang 導入事例増えて来たけど、導入後一年くらいのメンテナンスフェーズな事例について聞いてみたい。継続的デリバリーみたいなの。まだ早いのかな? まだまだメンテナンスフェーズにはなっていなくて現在も活発に開発中ですが、継続的デリバリーについて白ヤギでは特別なことをしてなく、ansible を使ってデプロイしているのみです。Go 1

    Go で API サーバーを開発してきて1年が過ぎました | カメリオ開発者ブログ
  • Goでスケールする実装を書く

    スケールする実装を書くためのガイド スケールするために 並列度とアムダールの法則 べき等参照透過性 Lock-FreeとWait-Free アトミックアクセス ロックの局所化 並列度とアムダールの法則 時間単位の場合は繰り返し処理のトータル時間に対し、 並列処理を妨げない処理時間の割合を「並列度」という。 (コードプロファイルを使って求める場合もあるが、 比較的単純なコードでないと計算が複雑になりやすい。) p 並列度 n 並列数 性能比 1/((1-p)+p/n) p=0.9のとき4倍の性能を得るにはn=6が必要。 n=5で4倍の性能を得るにはp=0.938が必要。 n=無限大とすると、性能比は以下の式におちつく。 理論上の性能向上限界 = 1/(1-p) 並列度90%の処理をどれだけ多数コアに分散しても理論上10倍処理効率が限界。 並列度95%の処理をどれだけ多数コアに分散しても理論上

  • Go言語のパッケージのテストでプライベートな関数や変数を呼び出すには - memoメモ

    Go言語でパッケージのテストを書く時に、プライベートな関数(隠蔽した関数)や定数を呼び出したいことがたまにあります。 これを実現する方法をメモ。 プライベートって? パッケージの内容は以下のような構成になっているとします: eg.go eg_test.go ここで: eg.go: package eg import () func foo() string { return "foo" } という実装があります。関数名のはじまりを小文字fooにし、意図的に関数を外部から隠蔽しています。これでプライベートになります。(というか、基は小文字で隠蔽し、公開したい場合は大文字にするといった使い方になるはずです) さて、テストコードから隠蔽したメソッドを呼ぶにはどうしたらいいでしょう。 関数名のはじまりを大文字にし、Fooとして公開(エクスポート)したくなります。が、公開する必要がないのに公開する

    Go言語のパッケージのテストでプライベートな関数や変数を呼び出すには - memoメモ
  • golangのチャンネルでセマフォ的なナニカ - okzkメモ

    mattnさんのエントリに触発されて、某所で使用したちょっと変わったgolangのチャンネルの使い方をご紹介します。 mattn.kaoriya.net 特定の処理の並列度をある程度までに抑えたい、みたいなコトありますよね? 例えばCPUヘビーな処理の並列数をたかだかコア数くらいまでに抑えたい、とか。 そんなときはバッファ付きチャンネルを用意しておいて、当該処理の前後でそのチャンネルにwrite/readをすることで、セマフォ的な制御ができます。 以下のようなカンジです。 package main import ( "fmt" "sync" "time" ) var ch chan int = make(chan int, 4) // 並列度を4に制限 func heavyFunc(i int) { ch <- 1 // チャンネルのバッファがイッパイになっていたら、ブロックする defe

    golangのチャンネルでセマフォ的なナニカ - okzkメモ
  • 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入門

    Takuya UedaSouzoh, Inc. (affiliated by Mercari, Inc.) - Go Engineer

    Go入門
  • Goで毎分100万リクエストを処理する | POSTD

    Malwarebytes は、驚くべき成長を見せています。1年以上前にこのシリコンバレーの会社に入社して以来、私の主な仕事は急成長するセキュリティ企業の力となるシステムの設計と開発です。日々数百万人が利用する製品をサポートするために必要な、全ての基盤をつくります。私は12年以上、アンチウイルスとアンチマルウェアに関わるいくつかの会社で働いてきました。毎日処理する膨大なデータのせいで、これらのシステムがどれだけ複雑なものになるかを理解しています。 面白いことに、ここ9年ほどで私が携わったWebのバックエンド開発のほとんどは、Ruby on Railsが使われていました。誤解されないように言っておきますが、私はRuby on Railsが大好きですし、すばらしい環境だと思っています。しかし、Rubyでシステムを設計し始めると忘れてしまうのは、マルチスレッド化や並列化、高速化、メモリオーバーヘッ

    Goで毎分100万リクエストを処理する | POSTD
  • Golang周辺のツールをいろいろ使いながらGin Web FrameworkでAPIを作る - とよぶ

    Golangで開発する上でライブラリの依存関係解決どうするとか、Object Relational Mapping(ORM)どうするとか、hot deployしながら開発するのどうするとかあると思うんですがその辺りを軽く書きながらAPI作っていきたいと思います。 Docker使って開発するあたりの解説は以前のブログを参照されたい。 takasing104.hateblo.jp できること Golangで依存ライブラリの管理(と現場言っていいものかは微妙) ORMを使ったDBアクセス Mac上でソースコードを変更した際、Dockerコンテナに修正が反映されてフレームワークがリロードされる Webフレームワークを利用したAPI開発 ツールと環境 Mac OSX 10.9.5 Mavericks Vagrant 1.7.2 Fresh (c4a501e4002c78dfd6bd519001a58

    Golang周辺のツールをいろいろ使いながらGin Web FrameworkでAPIを作る - とよぶ
  • golangでいい感じにwebサービス書くの考える(1) - web学習記録

    2015-02-25 golangでいい感じにwebサービス書くの考える(1) golang golangらしく書きたい 半年くらい前からgolang趣味で書いていましたが Readabilityスキルが皆無であったので ひどいコードを量産してしまいました。(Qiitaにその残骸があります)Goに入ってはGoに従え。golangらしいコードを書きたいです。 薄いパッケージ・フレームワークが良さそう フルスタックなフレームワークより薄いパッケージのほうがいい感じになりそうです。 いろいろと漁ってみたところ以下のパッケージが良さそうかなと思いました。 zenazn/goji · GitHub 薄いwebフレームワーク。 Routing、middleware、Graceful shutdownとかをやってくれる。 russross/meddler · GitHub 薄いORM。 tag情報

    golangでいい感じにwebサービス書くの考える(1) - web学習記録
  • 1