タグ

golangに関するkarupaneruraのブックマーク (33)

  • Go コンパイラのコードを読んでみよう - kosui

    はじめに 記事は、 DeNA Advent Calendar 2020 の 11 日目の記事です。 突然ですが、「コンパイラのコードを読んでみよう」なんて言われても、「どうせ巨大で難解で複雑なロジックを理解しないと読めないんでしょ?」と思いませんか。 コンパイラの構造を理解しようとしても聞いたことのないような専門用語がずらりと並び、コードを読もうとしたらそれらをすべて完全に理解してないと一行も理解できないんじゃないか...。Go のコンパイラ gc のソースコードを読むまでは、私もそう思っていました。 しかし、あまりにも暇な休日のある日、思い立って gc のコードを読んでみました。すると、「コンパイル」という難解な響きの処理も、一つひとつを小さなタスクに分解することで、少しずつ読み進めることができると分かったのです! 何よりも感動したことは、 gc そのものが全て Go で書かれていて、

    Go コンパイラのコードを読んでみよう - kosui
    karupanerura
    karupanerura 2020/12/11
    力作だ
  • dive into iota: iotaはいつ誰が管理しているのか? | ebiebievidence.com

    目次 はじめに iota とは 題の前に、2つの前提 前提1: Goコンパイラ gc によるコンパイルの流れ 前提2: 「定数の宣言」の文法と各名称 「定数の宣言」がASTになるまで ソースコードが構文ツリーになるまで 構文ツリーがASTになるまで まとめ 参考記事 はじめに この記事は、Go3 Advent Calendar 2019の9日目の記事です。 普段、私たちは何気なくiotaを利用しています。 しかし、私はiotaを使っていくうちに、「誰が1ずつインクリメントしてくれているんだろう…そもそもiotaってなんなんだろう…」と不思議に思うようになりました。 const ( A = iota + 1 // 1 B // 2.. C // 3... どうやってインクリメントとされていくんだ? ) そのことが気になった私は、iotaがどのようにコンパイラによって扱われるかを調べてみるこ

    dive into iota: iotaはいつ誰が管理しているのか? | ebiebievidence.com
    karupanerura
    karupanerura 2019/12/09
    詳解だ
  • GAE/Go アプリケーションを Go 1.11 に移行するためにやったこと - えいのうにっき

    先日公開した Web API サービス Pixelaは、Google App Engine 上で Go Web Application として動いている。Go のバージョンには特に気を使わずに開発をしてたんだけど、GAE で Go の 1.11 がサポート(まだ β だけど)されたこと、そして Go 1.11 であれば GAE Standard Environment で System Package として imagemagick が使えそう(svg → png 変換がしたい)ということもあって、Go 1.11 へのモチベーションが俄然上がったので、今回移行してみた。このエントリは、その際にやったことのまとめメモ。 Before Go 1.9.4 パッケージ管理はなにもしてない状態(ひどい) After Go 1.11.1 パッケージ管理に Modules を使用 やったこと goenv

    GAE/Go アプリケーションを Go 1.11 に移行するためにやったこと - えいのうにっき
    karupanerura
    karupanerura 2018/10/29
    appengine.Mainを呼ぶといいのかなるほど
  • Go言語と暗号技術(AESからTLS)

    最近マスタリングTCP/IP SSL/TLS編や暗号技術入門を読んでいた.理解を深めるためにGo言語で標準のcryptoパッケージを触り/実装を読みながら読んだ. cryptoパッケージは他の標準パッケージと同様に素晴らしい.Go言語にはどのような暗号化手法が実装されているのか実例を含めてざっとまとめる.なお文に書ききれなかったものを含め全ての実装例はtcnksm/go-cryptoにある. 共通鍵暗号 まずは共通鍵暗号をみる.共通鍵暗号は暗号化と復号化に同じ鍵を用いる暗号化方式である.共通鍵暗号はブロック暗号とストリーム暗号の2種類に分けることができる.ブロック暗号は特定の長さ単位で暗号化を行う方式であり,ストリーム暗号はデータの流れを順次処理していく方式である. Go言語にはブロック暗号としてDES(Data Encryption Standard),DESを繰り返すtriple-D

  • More Effective Go

    More Effective Go 27 July 2016 山泰宇 サイボウズ株式会社 github.com/ymmt2005 資料について 資料はサイボウズの社内トレーニング用に作成したものです。 以下については前提知識としています。 A Tour of Go How to Write Go Code Effective Go 2 Agenda リポジトリの構成 依存関係の解決 ツール類 github.com の周辺エコシステム 重要ライブラリ 排他制御 goroutine の取り扱い方 3 題材 github.com/cybozu-go/aptutil を題材とします。 go-apt-cacher / go-apt-mirror というユーティリティを含んでおり、 内部で HTTP のリバースプロキシ、多数の goroutine の排他制御、同時 実行数の制御などを行っています

  • RubyなしでItamaeレシピを実行できる「itamae-go」を作った - k0kubun's blog

    Goとmrubyを使ってitamae-goを作った github.com Pokemon Goが流行っていたので流行に乗じてItamae Goを作った。 というのは冗談で、手元の開発環境のセットアップにitamaeを使っているのだけど、まっさらな環境でitamaeを実行したい時にRubyitamaeをどういれるかについて考えるのが面倒なので、Rubyなしで実行できるitamaeを作った。Goで実装し、mrubyレシピを読むことによりRubyなしでの実行を実現した。 インストール方法 Releasesにバイナリを置いてあるのでこれをダウンロードする。基的には環境セットアップ用のシェルスクリプトからこれをcurlなりwgetなりでダウンロードして使うことを想定している。 なんか動かなかったらgit cloneしてmakeすればその環境用のバイナリが作れるはず。 *1 使い方 普通にita

    RubyなしでItamaeレシピを実行できる「itamae-go」を作った - k0kubun's blog
  • Golangの新しいGCアルゴリズム Transaction Oriented Collector(TOC)

    http://golang.org/s/gctoc Goの新しいGCのProposalが出た.まだProposal段階であり具体的な実装はないが簡単にどのようなものであるかをまとめておく. GoのGCはGo1.5において単純なStop The World(STW)からConcurrent Mark & Sweepへと変更され大きな改善があった(詳しくは“GolangのGCを追う”に書いた).先の記事に書いたようにGo1.5におけるGCの改善は主にレイテンシ(最大停止時間)に重きが置かれいた.数値目標として10msが掲げられGo1.6においては大きなヒープサイズ(500GB)においてそれを達成していた. GCの評価項目はレイテンシのみではない.スループットやヒープの使用効率(断片化の対処)なども重要である.Go1.6までのGCではそれらについて大きく言及されていなかった(と思う).例えばスル

  • 端末の上で動かして遊べる!迷路コマンドをGo言語で書きました! - プログラムモグモグ

    迷路で遊びたくなったので作りました。Goで書いています。 github.com Homebrewをお使いの方は、次のコマンドでインストールしてください。 brew install itchyny/tap/maze そうでない方は、次のコマンドでビルドしてインストールするか、 go get github.com/itchyny/maze/cmd/maze あるいは https://github.com/itchyny/maze/releases よりバイナリーを落としてご利用ください。 mazeコマンドは、ランダムな迷路を出力します。 maze --interactive引数を渡すと、カーソルを動かして迷路を遊ぶことができます。 maze --interactive --format colorを渡すと迷路が綺麗に表示されます。--widthや--heightなどで迷路のサイズを制御すること

    端末の上で動かして遊べる!迷路コマンドをGo言語で書きました! - プログラムモグモグ
    karupanerura
    karupanerura 2016/04/05
    たのしい!
  • Perl MongerのためのGoの始め方

    Gotanda.pm #8 (2016-03-31 16:30) 37ページがおもいっきり間違っているので修正したものを後ほどUPします

    Perl MongerのためのGoの始め方
    karupanerura
    karupanerura 2016/03/31
    Goちゃんとやってる人からは突っ込みどころあるかもしれないですが、あたたかいマサカリで教えて頂けるととてもうれしいです!
  • Gotanda.pm Perl Technology Conference #8 (2016/03/30 20:00〜)

    Gotanda.pmの中にはGoという文字もありますね。ちなみにDという文字もあるな? つまりはそういうことです。お好きに解釈してください。 多様性を尊重しているのでテーマはガン無視OKです! 詳細 日時: 2016/03/30 (水) 19:40開場 20:00 〜 21:30 会場: 株式会社ガイアックス セミナールーム(東京都品川区西五反田1-21-8 KSS五反田ビル 6F) 注意事項 当日もアナウンスします 写真撮影をさせて頂きます Gotanda.pmの記録と広報の目的で、Gotanda.pmのWebサイトに掲載するための写真をカンファレンス/懇親会中にしれっと撮影させて頂きます。 写真が公開されると問題のある方はボカシ等配慮致しますので申し出て下さい。 もし、NGの方があまりにも多い場合は写真撮影を中止します。 が、五反田を盛り上げていくためにも極力雰囲気を分かりやすい形で伝

    Gotanda.pm Perl Technology Conference #8 (2016/03/30 20:00〜)
    karupanerura
    karupanerura 2016/03/25
    "Perl MongerのためのGoの始め方” って話をするので良かったら。perlでいうところのアレはGoだとこうだ!みたいなのをやります。 #gotandapm
  • 本物の golang を... 本物の Gopher を、お見せしますよ。 - Qiita

    事の始まり それはD言語くんへの嫉妬から始まった。 D言語くんの繁殖についての仮説 lsを間違えてdlと入力してしまったときに、D言語くんが通り過ぎるコマンド くっ悔しい... そしてショボいAAで2番煎じ。 lsを間違えてgolと入力してしまったときに、Gopherが通り過ぎるコマンド書いた。 こんなはずじゃない! 僕らの Gopher 君はこんなチープじゃない! 明日来てください。物の Gopher をお見せしますよ。 — mattn (@mattn_jp) December 15, 2015 (当はもうちょっと前から作ってましたが) 物のGopher君とは そして今回、これを公開するに至った。 まずはこれをご覧頂きたい。 !!!!!!!!!!!!1 こいつ・・・ 動くぞ・・・ golang で書いたデスクトップマスコットです。起動すると画面のタスクバーの上をウロウロします。たま

    本物の golang を... 本物の Gopher を、お見せしますよ。 - Qiita
    karupanerura
    karupanerura 2015/12/17
    最高
  • Go言語でPerlのテストを早くする

    Test::mysqld::Multiというモジュールを書いてみたみたいな涙ぐましい努力により5分で終わるようになったテストですが、 プロジェクトのコードも増えて人も増えた影響で、 テスト時間が約7分まで伸び、テストのキューに10個近く並んで順番待ちさせられるという状況になってしまいした。 この状況を解決すべく go-prove というものを書いてみたので、そのご紹介です。 proveが遅い理由 proveがテストの結果を読むところがブロッキングI/Oになっているらしく、そのせいで遅くなっているらしいです。 Perl-Toolchain-Gang/Test-Harness#30 実際に結果読んでいるところはこの辺ですかね。 selectとか使っていてなるべくブロッキングしないような作りにはなっていそうですが、どこかでブロッキングしてしまっているようです。 今のプロジェクトだと32コアのCP

    karupanerura
    karupanerura 2015/09/20
    すごい
  • Go言語での構造体実装パターン

    Go言語での構造体実装は、埋込や独自コンセプトのインターフェースといったGo言語独自の機能を理解して行う必要があります。 今年からGo言語を始めましたが理解が曖昧なままだと実装に迷うことが何度かありました。今回よい機会なので、Go言語での構造体実装パターンとしてまとめてみることにしました。 構造体実装パターン 実装パターンの洗い出しとして、GoFデザインパターンをGo言語で実装する手法をとりました。 その中で繰り返し現れる実装をGo言語での構造体実装パターンとしてまとめてみました。 コンストラクタ関数 エクスポートによるアクセス許可 インターフェースによるポリモフィズム 構造体によるポリモフィズム 構造体によるサブクラス・レスポンシビリティ 構造体による移譲 関数による移譲 以下、それぞれのパターンを解説していきます。 コンストラクタ関数 Go言語には構造体のコンストラクタがないため、構造

    Go言語での構造体実装パターン
  • Go言語のDependency/Vendoringの問題と今後.gbあるいはGo1.5

    Go言語のDependency/Vendoringは長く批判の的になってきた(cf. “0x74696d | go get considered harmful”, HN).Go1.5からは実験的にVendoringの機能が入り,サードパーティからはDave Chaney氏を中心としてgbというプロジェクベースのビルドツールが登場している.なぜこれらのリリースやツールが登場したのか?それらはどのように問題を解決しようとしているのか?をつらつらと書いてみる. Dependencyの問題 最初にGo言語におけるDependecy(依存解決)の問題についてまとめる.Go言語のDependencyで問題なのはビルドの再現性が保証できないこと.この原因はimport文にある. Go言語で外部パッケージを利用したいときはimport文を使ってソースコード内にそれを記述する.このimport文は2通りの

  • Go言語でGraceful Restartをする

    とあるHTTPサーバをGolangで立てようって話になったんだけど、 止まると困るので無停止でサーバ再起動をしたい。 PerlにはServer::Starterという有名モジュールがあるんだけど、 Golangはどうなってるの?ってことで調べてみました。 2017-01-22追記: Go1.8以降でGraceful Shutdownがbuild-inになるので、この記事で紹介したライブラリは不要となりました。 詳しくはGo1.8のGraceful Shutdownとgo-gracedownの対応を参照。 gracefulじゃないバージョン Golangの標準ライブラリを使ってHTTPサーバを立ててみる例。 レスポンスが一瞬で終わってしまうとよくわからないので、sleepするhandlerを追加しておきます。 package main import ( "fmt" "log" "net/ht

  • コード補完もできる Go の REPL「gore」を作った - 詩と創作・思索のひろば

    タイトルの通りです。Go は LL 的に使える、とはよく申しますが、そういう意識で使っていると REPL 的なことをしたいときに困りがちですよね。そこで作りました。gore。いい名前ですね。 motemen/gore · GitHub 以下のスクリーンキャストでだいたいの雰囲気をお察し下さい。 (スクリーンキャストは cho45/KeyCast を使って撮影しました) 特徴 gore の特徴は以下の通りです。 ラインエディタと履歴 複数行入力 パッケージのインポート、補完つき 式および文を実行可能 コード補完(nsf/gocode を利用) プリティプリント(k0kubun/pp か davecgh/go-spew がおすすめ) ドキュメントも引ける(godoc が必要) 以上のように、非常に便利なものになっております。むしろこの程度 REPL には当然あってほしい機能だとも言える。 イン

    コード補完もできる Go の REPL「gore」を作った - 詩と創作・思索のひろば
    karupanerura
    karupanerura 2015/02/19
    benri
  • GitHub - aws/aws-sdk-go: AWS SDK for the Go programming language.

    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. Dismiss alert

    GitHub - aws/aws-sdk-go: AWS SDK for the Go programming language.
    karupanerura
    karupanerura 2015/02/11
    golangで使えるやつがでてた
  • golang で streem を実装した。 - Qiita

    この記事は Go Advent Calendar 2014、16日目の記事です。 はじめに Matz さんが streem という、ストリーム指向言語の開発を始めるらしいです。 まだ文法の設計段階ではあるけど、それなのにかなりの量の pull-req がバンバンと来てて凄いなーと思いつつも「この pull-req 量だと僕には出番無いなー」と思ったので、README.md に書かれているサンプルだけを頼りに streemgolang で実装してみました。 先日はネタで streem のマネをして yacc 定義部分だけ公開していましたが、日ネタが無い中にTLがヒートアップして焦りに焦って勢いで実装してみました。いやはや異様な追い込みを感じます。。。 まずは streem を知る streem は README.md に書かれている通り並列実行を行いつつストリームを処理する言語です。

    golang で streem を実装した。 - Qiita
    karupanerura
    karupanerura 2014/12/15
    すごい
  • Go言語: ビルド時にバージョン情報を埋め込みたい - Qiita

    課題 Goでアプリケーションを作るとき、バージョン番号をコードに含めるのにいちいち書き換えてている…。 解決策 ビルドの引数に -ldflags "-X main.version=バージョン" をつける。 やりかた バージョンを代入する変数を一つ作る。

    Go言語: ビルド時にバージョン情報を埋め込みたい - Qiita
    karupanerura
    karupanerura 2014/08/09
    べんりっぽい
  • EmacsでのGo言語編集環境 - unknownplace.org

    最近Go言語を始めた。MacGoの実行環境を入れ、Emacsで編集するところまで、一通りまとめておく。 Goの導入 (for OS X) いろいろ方法があるようだけど、僕はカジュアルに brew install go で済ませた。 GOPATH 環境変数は最初プロジェクト毎に設定して使おうかと思っていたんだけど、 後述するgocodeやgo-flymakeといったツールを使う場合、手元のGOPATHは1つにしてしまったほうが便利なので、 export GOPATH=$HOME/dev/go-workspace というのをshellの設定に定義して、手元ではこの共通のPATHを使うようにした。 これは問題がでたらまた考える。 PATHを通す homebrewで入れたツールをEmacsから使うためには、 homebrewのbinディレクトリを exec-path に追加する必要がある。 (a