タグ

golangに関するtakuya-aのブックマーク (22)

  • Minimal Perfect Hash Functions | Gopher Academy Blog

    A regular hash function turns a key (a string or a number) into an integer. Most people will know them as either the cryptographic hash functions (MD5, SHA1, SHA256, etc) or their smaller non-cryptographic counterparts frequently encountered in hash tables (the map keyword in Go). Collisions, where two input values hash to the same integer, can be an annoyance in hash tables and disastrous in cryp

  • Golangのスケジューラあたりの話 - Qiita

    はじめに 今年に入ってから仕事Golang書いてるのでスケジューラあたりについて調べた。ググってもあんまり資料が多くなかったんでまとめる。ソースコードを参照する時はGo 1.9.3を見た。わかりやすさを重視してあえて雑に説明しているところがあるけどご了承ください。 多分間違ってるところあるんで詳しい人は優しく教えてください。 goroutineあたりの基的な話 goroutineはグリーンスレッド、つまりOSのスレッドは直接使ってない。なので、goroutineを作ることはネイティブスレッドを作る処理よりもはるかにコストが安い。このgoroutineを複数作るとランタイムが勝手にマルチスレッドで実行する。詳細は後述。 また、メインルーチンもgoroutineとして管理される。 スケジューリングの登場人物 重要な登場人物はM, G, Pの3人。 M(Machine) OSのスレッドに対応

    Golangのスケジューラあたりの話 - Qiita
  • Goの良さをまとめてみた

    よく知られる良さ ネイティブコード出力で実行効率が良い コードの可読性を重視している 開発でよく使うツールがバンドル クロスビルドが簡単にできる コンパイルが遅くない(LLライクにrunできる) 並行処理の抽象化を組み込み言語仕様にもつ メモリ安全である 上記の一部に解説を加えつつあまり言及されない良さを以下にまとめます。 依存解決が最小限で決定的 ここにも書きましたが、Goの依存解決は常に 最小限のダウンロード 最小の範囲でのみビルドを実行 だけが走ります。これを一度体験すると、従来のパッケージ依存管理が冗長で余計なものをビルドしすぎることに気づくでしょう。これらに相当の時間を奪われているのです。 また、Goモジュール機構によりそのバージョン選択は決定的に安定動作するバージョンに決められます。このことのメリットは数ヶ月後のリビルドで安定してビルドできることで実感できるでしょう。 開発環境

    Goの良さをまとめてみた
  • GoとSuffixArray | フューチャー技術ブログ

    フューチャー夏休みの自由研究連載の5回目です。 はじめにTIG の辻です。 Go は標準ライブラリが充実しているとよく言われます。標準ライブラリだけで、HTTP サーバを作れたり、暗号化処理や、JSON や CSV といったデータ形式を扱うことができます。go list std | grep -v vendor | wc -l としてパッケージ数を見てみると、約 200 ものパッケージが存在することがわかります。記事では、その多くの Go の標準ライブラリの中でも、個人的に面白いなと思ったライブラリを紹介したいと思います。suffixarray パッケージです。 suffixarray パッケージは Suffix Array を扱うライブラリです。suffixarray パッケージの魅力を感じるには、まず Suffix Array とは何か?を知る必要があるでしょう。 Suffix Ar

    GoとSuffixArray | フューチャー技術ブログ
    takuya-a
    takuya-a 2020/08/07
    Go の標準ライブラリに SAIS 実装されてるの知らなかった!すごい...
  • How We Sped Up Unit Test Performance by 10x at Qri

    takuya-a
    takuya-a 2020/01/24
    go testでCPUプロファイル取れるの知らなかった
  • Goで構造体の非公開フィールドにアクセスする方法 - stop-the-world

    Go の 構造体 (struct) におけるフィールドは、フィールド名が小文字始まりであれば 非公開フィールド (unexported field) となり、パッケージ外からアクセスすることができません(参考: Exported identifiers - The Go Programming Language Specification)。 組織内で管理しているソースコードなら単に修正してしまえばよいのですが、外部のライブラリなどの場合、変更してもらうのは大変です。 このような、やむを得ない理由で非公開フィールドを参照したい場合、ちょっとした工夫が必要になります。 試してみたところ、以下の2つの方法で非公開フィールドを取り出すことができました。 reflect.ValueOf と unsafe.Pointer を使う方法 go.mod でモジュールを replace する方法 1. re

    Goで構造体の非公開フィールドにアクセスする方法 - stop-the-world
    takuya-a
    takuya-a 2019/12/31
    書きました
  • Goのtestを理解する in 2019 - My External Storage

    昨年Go1.10時点でのGoのテストについてまとめた。 Goのtestを理解する in 2018 #go まとめ記事を書いた後にリリースされたGo1.11からGo1.13に含まれるテスト関連の変更をまとめる。 TL;DR Go1.10までのテスト関連の機能、基的な書き方は以下にまとめてある Goのtestを理解する in 2018 #go Goのtestingを理解する in 2018 - Examples編 #go Goのtestingを理解する in 2018 - quickサブパッケージ編 #go Goのtestingを理解する in 2018 - iotestサブパッケージ編 #go Go1.11に含まれるテスト関連の変更は以下の通り go test実行時のgo vetの挙動の修正 -memprofileオプションがデフォルトでアロケートしたメモリを記録するようになった Go1.

    Goのtestを理解する in 2019 - My External Storage
  • グレッグ・イーガン経由で知った順列生成アルゴリズム

  • 再入可能なロックの話 - from scratch

    先週、@t_wadaさんと@yosuke_furukawaさんと議論した再入可能性に関する私の経験について書きました | ロック(ミューテックス)の再入可能性 https://t.co/j3xeOUxaWt— Yoshiki Shibata/柴田芳樹 (@yoshiki_shibata) October 22, 2018 突然のロックの話 いきなりロックの話をしましたが、10月に(なぜか)一緒に働いてるメンバーとの中で大盛り上がりした話題です。もともとはリクルートテクノロジーズで行われている、柴田芳樹さんのプログラミングGo勉強会で話題になった話です。 yshibata.blog.so-net.ne.jp ここにも書いてあるのですが、 Golang では sync.Mutex を使ったロックでは再入可能ではありません。 一方 Java のロックは再入可能です。 で、この設計に関しては合理的

    再入可能なロックの話 - from scratch
  • 人生で何度目かのダブル配列TRIEを書いた - Qiita

    概要 人は人生に何度かTRIEを書くという.そんなわけで,何度目かのTRIEでsudachiのdarts-cloneをクローンしてみました.TRIEの記事は沢山あるので,ここではGoに移植してみて気づいた事をいくつか共有していきたいと思います. 今回の成果物: https://github.com/ikawaha/dartsclone darts-clone 元ネタはこちら.Java版とPython版があります. https://github.com/WorksApplications/Sudachi/tree/develop/src/main/java/com/worksap/nlp/dartsclone https://github.com/WorksApplications/SudachiPy/tree/develop/sudachipy/dartsclone 家は https:/

    人生で何度目かのダブル配列TRIEを書いた - Qiita
    takuya-a
    takuya-a 2018/12/18
    !! "これで辞書引きの下準備ができたのでボチボチとsudachiの移植をやっていきたいなと思います"
  • 自動要約アルゴリズムLexRankをGo言語で実装してみたら爆速だった - I love programming and football and family

    自動要約アルゴリズムLexRankをPython, Rubyで実装したのですが、速度に不満があり、Go言語で実装したら爆速だったという話です。 LexRankとは 自動要約について興味があり、調べていたところ以下が参考になりました。 qiita.com 実装プラン 一から実装しなくても、形態素解析には kagome、LexRank自体のアルゴリズムは tldr を活用できそうでした。 kagome は辞書が同梱らしいので、使用環境で MeCab を別途インストールする必要がなく、配布の際に非常に便利だと感じました。 tldr は英語のみ対応なのですが、日語も以下のことをしておけば使用できそうでした。 分かち書きしてスペースで区切る 文末の "。", "!", ”?” を ".", "!", ”?” に置換 いざ実装! こんな感じになりました。 github.com 思っていたより遥かに簡

    自動要約アルゴリズムLexRankをGo言語で実装してみたら爆速だった - I love programming and football and family
  • 非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog

    κeenです。最近同期/非同期、ブロッキング/ノンブロッキング、直接形式/継続渡し形式あたりが混乱してきたので個人的に整理します。 あくまで私個人の理解を纏めただけなので誤謬などに注意して下さい。 追記: @tanaka_akrさんから指摘されたのですが、用語の説明が間違っていそうだったので書き直しました。 diffはこちら 非同期とノンブロッキングはよく混同されます。また、非同期処理の記述形式として直接形式や継続渡し形式などがあります。 私自身違う言葉だなとは思いつつも混同したり違いを忘れたりしています。 非同期もノンブロッキングもナイーブなIOに比べると速い方式だな程度の理解でいてそんなに困らないと思ってますし混同や誤用に目くじらを立てるつもりもありません。 しかしながら3者を区別しないと意味を成さない文脈で3者を混同している技術を何度か見掛けたので(自分の中で)整理しようと思ったのが

    非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog
  • Linuxのユーザーランドをinitから全てまるごとgolangで書く

    Infinite Debian - Platform for mass-producing system every second

    Linuxのユーザーランドをinitから全てまるごとgolangで書く
  • GitHub - golang-standards/project-layout: Standard Go Project Layout

    Standard Go Project Layout Translations: 한국어 문서 简体中文 正體中文 简体中文 - ??? Français 日語 Português Español Română Русский Türkçe Italiano Vietnamese Українська Indonesian Overview This is a basic layout for Go application projects. It's not an official standard defined by the core Go dev team; however, it is a set of common historical and emerging project layout patterns in the Go ecosystem. Some of thes

    GitHub - golang-standards/project-layout: Standard Go Project Layout
  • 形態素解析器 Sudachi の辞書が手に入ったので Go で遊んでみた - 押してダメならふて寝しろ

    はじめに Sudachi はワークスアプリケーションズが絶賛開発中の形態素解析器で,Java で書かれています. 今一番新しい注目すべき形態素解析器で,次のような機能が特徴としてあげられています. 複数の分割単位の併用 必要に応じて切り替え 形態素解析と固有表現抽出の融合 多数の収録語彙 UniDic と NEologd をベースに調整 機能のプラグイン化 文字正規化や未知語処理に機能追加が可能 同義語辞書との連携 (後日公開予定) github.com 開発のステータスは公式には発表されていない(?)ようですが,開発中でリリースはこれからかな・・・と思います.(実際のところ,スケジュールなどはどうなんでしょうか?) 最近,Sudachi の辞書がレポジトリからダウンロードできるようになったので,kagome の辞書に加工して少し遊んでみました. 以下,公式情報ではない&開発で変更される

    形態素解析器 Sudachi の辞書が手に入ったので Go で遊んでみた - 押してダメならふて寝しろ
    takuya-a
    takuya-a 2017/10/18
    Sudachi、辞書公開してるのすごい!kuromoji.jsでも使えそうだから手が空いたら試してみたいな
  • Treasure 2017 の研修資料は Go を学ぶのに最高だった - kakakakakku blog

    Go 関連のを読んだり,サンプルコードを写経するだけではなく,もっと実践的に勉強したいなと思って調べていたら,VOYAGE GROUP の Treasure 2017 と言うインターンシップの研修資料GitHub に公開されていることを知って,さっそく挑戦してみた.数日間取り組んでみて,とにかく素晴らしかったので,紹介したいと思う.suzuken 先生,素晴らしすぎます! Go入門 GitHub - voyagegroup/talks 学べるテーマ Go研修資料とは言え,幅広いテーマで Go を学ぶことができる点が素晴らしかった.ザッと挙げるとすると以下のようになる.テーマを見るだけで,もうワクワクしてくるのではないだろうか? アルゴリズム実装とテストコード フィボナッチ数 スタック CLI net/http curl 実装 スクレイピング実装 コンカレンシー goroutine

    Treasure 2017 の研修資料は Go を学ぶのに最高だった - kakakakakku blog
  • Go言語のリアルタイムGC 理論と実践 | POSTD

    (編注:誤訳、意味の分かりづらい訳を修正しました。リクエストありがとうございました。) 毎日、Pusherは数十億のメッセージをリアルタイム、つまり送り元から宛先まで100ms未満で送信しています。どのようにしてそれを可能にしているのでしょうか。重要となる要因はGoの低レイテンシのガベージコレクタです。 ガベージコレクタはプログラムを一時停止させるものであり、リアルタイムシステムの悩みの種です。そのため、新しいメッセージバスを設計する際には慎重に言語を選びました。Goは 低レイテンシを強調している ものの、私たちは懐疑的でした。「当にGoを使えば実現できるのか? もしできるならどうやって?」 このブログ記事ではGoのガベージコレクタを、どのように機能し(トリコロールアルゴリズム)、なぜ機能し(こんなに短いGCによる一時停止時間の実現)、そして何よりも、それが機能するのかどうか(GCによる

    Go言語のリアルタイムGC 理論と実践 | POSTD
  • Go言語勉強会「そうだ Go、京都。」を4月29日(土)に京都で開催します! #golang - Hatena Developer Blog

    こんにちは。ウェブアプリケーションエンジニアの id:t_kyt です。 初夏と言えば京都、京都と言えばGoということで、4月29日(土)に「そうだ Go、京都。」と題しましてGo言語の勉強会を開催することになりました! 初回ということもあり特にテーマは絞っていませんのでGo言語に興味ある方は皆さんお越しください!発表会後には交流会も開催予定です。 また、LT枠も募集しているのでちょっと発表したいという方のご参加もお待ちしております。 京都 ✕ Go言語で最高のゴールデンウィーク初日を過ごしませんか? イベント日程と会場 イベント名: 「そうだ Go、京都。」 日時: 4月29日(土) 15:00〜 参加費: 無料 定員 参加枠: 30 LT枠: 4 会場: 株式会社はてな 京都オフィス 8F 所在地: 京都府京都市中京区高宮町御池ビル8F 注意: 当日は正面玄関が閉まっているので裏口へお

    Go言語勉強会「そうだ Go、京都。」を4月29日(土)に京都で開催します! #golang - Hatena Developer Blog
  • ANTLR のターゲットに Go が追加されたので Gogland とあわせて遊んでみる - 押してダメならふて寝しろ

    概要 ANTLR ってのは,いわゆるパーサジェネレーターです. 去年の年末に出たバージョン 4.6 からターゲットに Go が追加されました 🙌 . かなり昔に使ったことあったんですが,v4 になってだいぶ整理されて洗練された感じになってました. この記事は結構適当にやってしまっていると思うので,ちゃんとやりたいならリファレンスを読んだ方がよさそうです(ぉ. The Definitive ANTLR 4 Reference 作者: Terence Parr出版社/メーカー: Pragmatic Bookshelf発売日: 2013/01/22メディア: ペーパーバックこの商品を含むブログを見る ANTLR の簡単な紹介 入力のあるプログラム書いていると,入力が well-formed であるかどうかをチェックする必要があることがあります. 正規表現とか使って自分で入力が正しいかどうかチェ

    ANTLR のターゲットに Go が追加されたので Gogland とあわせて遊んでみる - 押してダメならふて寝しろ
    takuya-a
    takuya-a 2017/03/21
    ANTLRめっちゃ進化してる!
  • vaaaaanquishさんの名前を間違えると指摘してくれる slack bot を goa で書く - 押してダメならふて寝しろ

    概要 この記事は Go(その3) Advent Calendar の19日目に間に合わなかった今更ながらの記事です。 goa の紹介のために,slack の Outgoing-Webhooks を使って mattn さんの書かれた 「deeeetさんの名前を間違えると指摘してくれるbot」を goa で書くつもりで, 去年のアドベントカレンダー用に進めてたネタだったんですが, slack が投げてくるデータの形式が分からなくて頓挫していたのを最近解決したので,今更ながらに書いてみました. slack で vaaaaanquish さんの名前を間違えると指摘してくれる bot を作ります. おことわり これはいわゆるネタですので,slack-bot を goa で作るのをおすすめしている訳ではないことにご注意ください. goa の機能の一端を例を通しながら見ていただければ幸いです. vaaa

    vaaaaanquishさんの名前を間違えると指摘してくれる slack bot を goa で書く - 押してダメならふて寝しろ