タグ

golangに関するshagのブックマーク (172)

  • 料率計算における小数点数の扱いについて | メルカリエンジニアリング

    Merpay Advent Calendar 2020 の3日目です。 メルペイでバックエンドエンジニアをしている iwata です。 メルペイスマート払いの開発をしている Credit Design というチームに所属しています。 私は2019年の入社以来、「メルペイスマート払い(定額払い)」(以下、定額払い)の開発を担当しており、今年の7月にようやくリリースすることができました。 この定額払いの手数料計算のために、「1万分の1を1とする単位」であるベーシスポイントを扱うGo言語のパッケージ go.mercari.io/go-bps を作成しました。 ちょうど1年前に、 mercari.go #12 で「料率計算における小数の扱いについて」として発表しましたが、当時はオープンソースとして公開していませんでした。 今回オープンソースとして公開しましたので、改めてパッケージを紹介します。 料

    料率計算における小数点数の扱いについて | メルカリエンジニアリング
    shag
    shag 2021/01/14
  • Go言語で扱えるデータフレーム厳選4つ - Qiita

    はじめに データサイエンティストでなかったとしても、数値データを使って様々な解析をする際には CSV ファイル等ファイルを読み込み、数値の配列としてメモリに保持して、それらをループ等で利用して解析を行っておられると思います。 その際、配列は1次元目に行、2次元目に列、を格納するのが一般的です。多くのケースではこの方法で事足りるのですが、解析を行ううちに「列としてデータの固まりを扱いたい」「ラベル付けされた列を扱いたい」と感じる事が出てくると思います。 これを簡単にしてくれるのが「データフレーム」です。 データフレーム4種 記事では Go 言語から扱えるデータフレームを4つご紹介します。 QFrame https://github.com/tobgu/qframe QFrame は、フィルタリング、集計、およびデータ操作をサポートするイミュータブルなデータフレームです。 QFrame での

    Go言語で扱えるデータフレーム厳選4つ - Qiita
    shag
    shag 2019/12/18
    QFrame 覚えておこう。
  • Go のライトバリアに関するバグを修正した話 : DSAS開発者の部屋

    Goのランタイムのバグを踏んで解決しました。解決までの過程を記事にします。 同じようなランタイムのバグを踏んで、小さい再現コードを作れない場合の参考にしてください。 自分のプログラムを疑う あるSlackチャンネルで Go で書かれたサーバーのクラッシュが話題になっているのを見つけました。その時に共有してもらったトレースバックです。 runtime: pointer 0xc007b8af97 to unused region of span span.base()=0xc004000000 span.limit=0xc004002000 span.state=1 fatal error: found bad pointer in Go heap (incorrect use of unsafe or cgo?) runtime stack: runtime.throw(0xc046ca,

    Go のライトバリアに関するバグを修正した話 : DSAS開発者の部屋
    shag
    shag 2018/12/27
    golang の issues のやりとりとこれ合わせて無料で読めちゃうっていう。インターネットは相変わらずゴイゴイスー。
  • goroutineはなぜ軽量なのか - Carpe Diem

    概要 以前の記事で christina04.hatenablog.com Goはスレッドよりはるかに軽量なgoroutineでC10K問題を解決する、という話をしましたが、goroutineが軽量なのはなぜか?という理由を深掘りしたことがなかったのでしてみました。 環境 golang 1.11.1 Darwin 17.7.0 軽量と呼ばれる理由は2つ 大きく分けると以下の2つのポイントがあります スレッドに比べてメモリ使用量が低い スイッチングコストが低い それぞれ説明していきます。 goroutineがスレッドに比べてメモリ使用量が低いのはなぜか スタックとヒープのメモリの使い方を理解すると分かります。 ヒープはメモリの下層、プログラムコードのすぐ上にあり、上に向かって成長します。一方スタックは仮想アドレス空間の一番上にあり、徐々に下に成長していきます。 ref: イベントループなしでの

    goroutineはなぜ軽量なのか - Carpe Diem
    shag
    shag 2018/10/29
  • 「Go言語らしさ」とは何か? Simplicityの哲学を理解し、Go Wayに沿った開発を進めることの良さ - エンジニアHub|Webエンジニアのキャリアを考える!

    エンジニアHub > 記事一覧 > 「Go言語らしさ」とは何か? Simplicityの哲学を理解し、Go Wayに沿った開発を進めることの良さ 「Go言語らしさ」とは何か? Simplicityの哲学を理解し、Go Wayに沿った開発を進めることの良さ プログラミング言語には作者の設計思想が強く現れますが、Go言語もまた後発であることを生かし、しっかりとした思想に基づいて開発されています。公式のドキュメント等で語られているSimplicityの哲学を理解し、Go言語らしさ、Go Wayに従って開発する良さについて、はてなチーフエンジニアの松木雅幸(Songmu)さんが解説します。 id:Songmuと申します。はてな東京オフィスでチーフエンジニアを務め、Mackerelというサーバー監視のSaaS開発においてプロダクトマネージャーを担当しています。 筆者が勤めている株式会社はてなでは、2

    「Go言語らしさ」とは何か? Simplicityの哲学を理解し、Go Wayに沿った開発を進めることの良さ - エンジニアHub|Webエンジニアのキャリアを考える!
    shag
    shag 2018/07/03
  • Linuxのユーザーランドをinitから全てまるごとgolangで書く - Qiita

    gokrazy を試してみました。 gokrazyとは https://gokrazy.org/ "gokrazy is a pure-Go userland for your Raspberry Pi 3 appliances" Linuxのユーザーランドをinitから全てまるごとgolangで書いてあるシステムで、しかもコマンド一発でRaspberry Pi 3用にビルドして、ブートするSDカードを作成してくれます。 Quick startの手順通りにSDカードを作って動作することを確認しました。 (ただし、host名gokrazyの解決ができなったので、別の方法でラズパイのIPアドレスを特定してIPアドレス直接指定で、そこで動くWebサーバに接続しました。) びっくりする小ささ SDカード上に作られたルートファイルシステムを見てみました。 $ df -h . Filesystem S

    Linuxのユーザーランドをinitから全てまるごとgolangで書く - Qiita
    shag
    shag 2018/03/29
  • ZOZO Technologies TECH BLOG

    2020-06-05 ZOZOSUITからZOZOMATへ - CQRSによる解決アプローチ Scala DDD CQRS AWS はじめに こんにちは、計測プラットフォーム部バックエンドチーム、テックリードの児島(@cozima0210)です。この記事では、ZOZOSUITとZOZOMATの違いにより生じたバックエンド開発における課題と、その解決のためにCQRSアーキテクチャを採用した経緯、そして… ZOZOSUITからZOZOMATへ - CQRSによる解決アプローチ 2020-05-29 深層学習×集合マッチングによるコーディネート選択 ディープラーニング 機械学習 ZOZO Researchの斎藤です。私たちはファッションコーディネートの推薦や生成の基礎として、深層集合マッチングという技術を研究しています。記事では、深層集合マッチングを理解する上で必要な諸概念の説明と、ファッショ

    ZOZO Technologies TECH BLOG
    shag
    shag 2018/02/26
  • Big Sky :: Golang 1.8 でやってくる database/sql の変更点

    golang 1.8 では database/sql に幾らかの新機能が追加されます。 キャンセル可能なクエリ データベースの型の可視化 複数の結果セット サーバへのping トランザクション分離レベル 名前付きパラメータ database/sql changes - Google ドキュメント https://docs.google.com/document/d/1F778e7ZSNiSmbju3jsEWzShcb8lIO4kDyfKDNm4PNd8/edit# 記事では Golang 1.8 で追加される database/sql の変更内容と、go-sqlite3 での対応状況、利用する上での注意点等を書いていきます。 キャンセル可能なクエリ 実行が長いクエリがキャンセルできるようになります。各 API に Context のサフィックスが付いた物が提供されます。具体的には Que

    Big Sky :: Golang 1.8 でやってくる database/sql の変更点
    shag
    shag 2018/02/26
  • Example Go GitLab CI setup (no root/sudo required)

  • GoでSlackへ通知してみた - Qiita

    状況整理 やりたいこと システムのアラートやチケットトラッカーの通知をSlackに集約したい。 現状 社内のSlackに通知できるものが少しずつ増えてきた 社内のSlackのメンバーも増えてきた 現状イメージ 問題 SlackのIncoming WebHooksが増え続けて面倒だ 毎回Incoming WebHooksを登録するのは面倒だ 変えたいイメージ こんな時Slackに通知が欲しい Datadogで特定のメトリックが閾値超えた サーバサイドが503吐いた 定期バッチでこけた 番サーバにrootで入られた。 などなど、ほぼリアルタイムで検知したい。 やってみた。 API Gatewayを作り、SlackのIncoming WebHooksに流す ついでにAPIキーを使ってアクセス制限もかけてみる。 cURLで投げてみる。 curl -H 'x-api-key:[API_GATEWA

    GoでSlackへ通知してみた - Qiita
    shag
    shag 2017/11/21
  • Big Sky :: net/http でレスポンスの内容を確認したいなら io.TeeReader を使おう

    « Golang で物理ファイルの操作に path/filepath でなく path を使うと爆発します。 | Main | VimConf2017 に参加してきた。 » printf デバッグは便利だ。技術の後退と言われようと printf でないと解決できない事はまだまだたくさんあります。 今日は net/http でクライアントが得たレスポンスの JSON を確認したいといった場合に、どうデバッグしたらいいかを書いてみたいと思う。 Go のインタフェースは大よそ io.Reader もしくは io.Writer を使う様に設計されている。こうする事でプログラムがメモリを一度に沢山確保してしまわない様にしています。 package main import ( "encoding/json" "fmt" "log" "net/http" ) type Foo struct { ID  

    Big Sky :: net/http でレスポンスの内容を確認したいなら io.TeeReader を使おう
    shag
    shag 2017/10/27
  • GitHub - schollz/PIanoAI: Realtime piano learning and accompaniment from a Pi-powered AI 🎹

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

    GitHub - schollz/PIanoAI: Realtime piano learning and accompaniment from a Pi-powered AI 🎹
    shag
    shag 2017/09/07
  • Big Sky :: Re: Goでコマンドライン引数と環境変数の両方からflagを設定したい

    Goでコマンドライン引数と環境変数の両方からflagを設定したい - Qiita Goで実装したプログラムでオプションをコマンドライン引数から取るには標準の `flag` パッケージを使いますが、値を環境変数からも読みたいことがあります。(特に Docker で動かす場合) htt... http://qiita.com/sfujiwara/items/f177d85e9c10f4c34fb6 実は結構簡単に出来ます。github.com/namsral/flag に依存したくない場合や github.com/namsral/flag が実は flag 互換で無かった、なんて問題が見付かった場合に使えるハックです。 オリジナルのコード package main import ( "flag" "fmt" ) func main() { var age int flag.IntVar(&ag

    Big Sky :: Re: Goでコマンドライン引数と環境変数の両方からflagを設定したい
    shag
    shag 2017/06/14
    go いいな
  • 償いの時計

    狂った愛ゆえに最愛の女性を殺してしまったストーカー。 彼が途方に暮れていると、大通りの不思議な男から不思議な時計をうけとった。その時計は「償いの時計」というらしい。

    償いの時計
    shag
    shag 2017/05/22
  • ブラウザでも動く簡易 2D ゲームライブラリ Ebiten を Go で作った - Qiita

    Ebiten (海老天) 概要 年末年始休みを費やして Goゲームライブラリ Ebiten の新バージョン 1.1.0-rc1 をリリースしました。特徴は以下の通り: Go を使ったゲーム開発 楽しい! シンプルな API スクリーンもテクスチャも全部 ebiten.Image 構造体で表されます。 Ebiten における描画は ebiten.Image に ebiten.Image を描画する形だけでほぼすべて表現されます (v1.1.0-rc1 時点)。また、 ebiten.Image 構造体は image.Image インターフェイスを実装しているため、例えば描画中の画面を PNG にデコードして保存なども簡単にできます。 2D グラフィックス アルファブレンディング 行列演算による描画 (幾何変換および色変換)、いずれもシェーダ (GLSL) で実行されるので高速 オフスクリー

    ブラウザでも動く簡易 2D ゲームライブラリ Ebiten を Go で作った - Qiita
    shag
    shag 2017/05/22
  • Ebiten - A simple 2D game library in Go

    Redirecting… Click here if you are not redirected.

    Ebiten - A simple 2D game library in Go
    shag
    shag 2017/05/22
  • Moving from PHP (Laravel) to Go

    Published Apr 17, 2017 on Permalink Earlier this year, I made an arguably bad business decision. I decided to rewrite the Laravel application powering Boxzilla in Go. No regrets though. Just a few weeks later I was deploying the Go application. Building it was the most fun I had in months, I learned a ton and the end result is a huge improvement over the old application. Better performance, easier

    shag
    shag 2017/04/24
    なんか追記されてるので正しいベンチが知りたいところではある。"Edited on April 19"
  • Re:golang の http.Client を速くする

    先日mattnさんの記事を読みました。 golang の http.Client を速くする nettというパッケージを使って 名前解決の結果をキャッシュすることで、http.Clientを早くするというものです。 この記事に関して、ちょっと疑問に思ったことがあったので、検証してみました。 疑問 疑問に思ったのは以下の点です。 名前解決遅すぎでは? ベンチマークの結果を見ると5億ns(=500ms)ほど速度が改善しています。 3つのURLに対してリクエストを投げているので、初回を除く2回DNSのキャッシュがヒットし、 名前解決2回分の速度改善になるはずです。 と、いうことは、名前解決1回あたり250msかかっている計算になります。 googleのsearchは302でリダイレクトがかかるので、Client.Getの呼び出し1回あたり2回リクエストが飛ぶ、 ということを計算に入れても100m

    shag
    shag 2017/01/16
    golang 低レベル向け言語だと思ってたけど、高レベルで便利なライブラリが豊富なぶんこういうこともあるのか。まあでもしばらくしたら解決しそうな雰囲気を感じる。
  • Goについて思うこと 2016

    あんまりこういう内容のポエム的なものは広まってほしくないなあ・・と思うのでこっちにひっそり書くことにする。 今年は僕にとってはGoの存在がとても大きい年だった。 5年前、僕が書くのはWebアプリケーションが中心で、PHPをメインで触っていた。それが気がつけばエンジニアリングのレイヤが広がったなあという所感があって、ここ最近Goがそれを加速してくれた。第二の言語としてのGoはとても良くできていて、小回りが聴くし、ミドルウェアをちょろっと書くにも心地よい。やっぱり最近の言語ならではの良さがある。たとえば、 * テストが標準ライブラリに組み込まれている * net/httpがとても良くできている。フレームワークを必要としない場面も多い。 * concurrencyを堅牢に扱える(うまい言葉が見当たらない) * そしてそれなりに速い というのがあげられる。特にgo toolの充実はすごい。Race

    shag
    shag 2016/12/27
    全然おっさん限定しなくて良いはずなんだけどね。
  • Go 1.8 の HTTP Server Graceful Shutdown を試す - Qiita

    Go 1.8 で net/http パッケージに Server.Shutdown メソッドが追加されます。 シグネチャはこちら: srv := &http.Server{Addr: ":8080"} // サーバはブロックするので別の goroutine で実行する go func() { if err := srv.ListenAndServe(); err != nil { log.Print(err) } }() // シグナルを待つ sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGTERM) <-sigCh // シグナルを受け取ったらShutdown ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) if err :

    Go 1.8 の HTTP Server Graceful Shutdown を試す - Qiita
    shag
    shag 2016/12/26