タグ

golangに関するnminoruのブックマーク (19)

  • Goのnet/httpのServer側デザインの良さについて語る(Listen編)

    Gonet/httpのServerのデザインの良さ net/httpのコードリーディングをしていてepollとscheduler、goroutineがうまく協調してデザインしてあり上手く回っているものだな・・・と思ったので紹介します。 といっても下記の記事で解説されているので、ここではもうちょっと全体の流れをソースコードを詳しく見てみて追っていきます。 参考 最初に全体像の説明 上記画像の感じですね。 epollとかGoRoutineとかが絡んできます。 上記画像はコネクション処理編での動作なのでListen,Acceptはそれまでの溜めみたいなものとなっています。 Listen編 -> Accept編 -> コネクション処理編と続きます。 epoll is 何 下記の解説が詳しいです。ざくっと言うと非同期IOを実現させるためのものです。(厳密な非同期IOの定義とは違うかもしれませんが容

    Goのnet/httpのServer側デザインの良さについて語る(Listen編)
  • GolangでハイパフォーマンスなTCPサーバーを実装する(下準備編) - Qiita

    6月からDMM.comラボでミドルウェアを作るエンジニアインターンをしている@kawasin73です。 DMM.comラボではluaで実装されたKVS(キーバリューストア)を利用しています。 これは、TCPの上で独自プロトコルで通信しており、URIのPathがKeyとなり最長共通接頭辞検索をするKVSで、社内でluaの皮を被ったC言語で実装されたものが運用されています。 この度、このKVSをGo言語で再実装することになり、設計は既存のミドルウェアを踏襲した形で DMM.com ラボの方が行い、実装は僕がすることになりました。 Go言語の実装手法(goroutine や channel等)については僕が学びながらそれについて都度相談するというスタイルで行なっています。 その開発記を連載しています。 第2回の今回は、TCPサーバーを実装する時にパフォーマンス上気をつけるべきことと、開発の手順を

    GolangでハイパフォーマンスなTCPサーバーを実装する(下準備編) - Qiita
  • Goでの並行処理を徹底解剖!

    並行処理をうまく使うのは難易度が高めです。 それゆえに、go文とチャネルについて基的な文法書で知った後「並行処理ちゃんとできる!」の段階まで自力でたどり着くのは大変でしょう。 このは、 *「並行処理ってやって何が嬉しいの?」 *「ゴールーチンとかチャネルとかって一体何者?」 *「ゴールーチンやチャネルを使ったうまいコードの書き方が知りたい!」 *「Goランタイムで並行処理をどううまく処理しているか知りたい!」 といった要望にお答えする、「Goでの並行処理」に関連した事柄について網羅的・徹底的に書きまくったものです。

    Goでの並行処理を徹底解剖!
  • GitHub - OpenAPITools/openapi-generator: OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)

    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 - OpenAPITools/openapi-generator: OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
  • golang methods that will yield goroutines

    nminoru
    nminoru 2021/04/03
    goroutineをyieldする方法
  • Golangのパッケージ完全に理解した

    Golang のパッケージがよくわかってなかったんで自分なりにまとめてみました。 この記事は Go7 Advent Calendar 2019 3日目の記事です。 Go7のカレンダー | Advent Calendar 2019 - QiitaGo7のカレンダーページです。https://qiita.com/advent-calendar/2019/go7 この記事中で使われる環境は以下の docker-compose.yaml で用意しました。 使わなくても検証できますが、実行環境がない人やホスト環境を汚したくない人は使ってください。 info当該Docker環境での $GOPATH は /go に設定されています。import 文基的な構文であるimport文についても軽く整理しておきます。 Golangでは自身とは異なるパッケージを利用できるようにするために import文を使いま

    Golangのパッケージ完全に理解した
  • 結局、Go言語をやめる理由はなかった件 - Qiita

    この記事は Go 2 Advent Calendar 14日目の穴埋め記事です。 はじめに @okdyy75 さんによる Go 5 Advent Calendar 14日目の の記事「だから僕はGo言語を辞めた」 が「ベンチマークっていうのはこうやるんだよ」というのを説明するために反面教師的な意味で良い教材だと思ったので、反証記事を書きたいと思います。 ベンチマークを取りながらコードを改善して、最終的にGoは遅くないからやめる必要はないということ、そして、なぜ遅いという結論になってしまったのかを掘り下げていきたいと思います。 下準備 幸いなことに、ベンチマークのソースコードがGitHubにある ので、こちらを実行しながら問題点を改善していきましょう。 ちゃんとコードが上がっているのは素晴らしいですね! 一方で、元記事には測定環境が明記されていませんでしたので、同じ環境で測定することはできま

    結局、Go言語をやめる理由はなかった件 - Qiita
  • JavaプログラマーのためのGo言語入門 | フューチャー技術ブログ

    JavaプログラマーのためのGo言語入門こちらはJava to Go in-depth tutorialの日語訳です 原文の著者に許諾を得て翻訳・公開いたします。 このチュートリアルは、JavaプログラマーがすばやくGo言語にキャッチアップできるようにすることを目的としています。 目次 Hello stack 主な違い シンタックス(文法) 定数 構造体 ポインタ スライス 値の作成 メソッドとインターフェース エラー PanicとRecover ゴルーチンとチャネル Hello server Hello stack 1まずはじめに簡単な例を見ていきましょう。この例ではシンプルな抽象データ型をGoで実装しています。 // collectionパッケージはstring型を格納できるスタックを実装している package collection // Stackのゼロ値はすぐに使用できる空のス

    JavaプログラマーのためのGo言語入門 | フューチャー技術ブログ
  • Let's EncryptがはまったGolangの落とし穴 - ぼちぼち日記

    0. 短いまとめ 300万以上の証明書の失効を迫られたLet's Encryptのインシデントは「Golangでよくある間違い」と書かれているようなバグが原因でした。 1. はじめに、 Let's Encryptは、無料でサーバ証明書を自動化して発行するサービスを行う非営利団体として2014年に設立されました。 2015年にサービス開始されると証明書の発行数はぐんぐん伸び、先月末のプレスリリースでは累計10億枚のサーバ証明書を発行したことがアナウンスされました「Let's Encrypt Has Issued a Billion Certificates」。CTLogの調査から、2020年2月末の時点では有効な全証明書の38.4%がLet's Encryptの証明書であるとみられています「Certificate Validity Dates」。 無料の証明書を提供してもらえるのは非常に嬉し

    Let's EncryptがはまったGolangの落とし穴 - ぼちぼち日記
    nminoru
    nminoru 2020/03/09
    まあ落とし穴ではあるな。
  • Go言語でシンプルに構造体⇔バイナリの相互変換 - Qiita

    構造体をサクッとバイナリに変換したい! そんなときはencoding/binaryパッケージを使います。 構造体→バイナリ binary.Writeメソッドに構造体を渡すと上から順番にフィールドが並んだバイナリになります。 package main import ( "encoding/binary" "encoding/hex" "os" ) type A struct { Int32Field int32 ByteField byte } func main() { // 構造体つくる a := A{Int32Field: 0x123456, ByteField: 0xFF} stdoutDumper := hex.Dumper(os.Stdout) defer stdoutDumper.Close() // 構造体をバイナリにする binary.Write(stdoutDumper,

    Go言語でシンプルに構造体⇔バイナリの相互変換 - Qiita
  • The State of Caching in Go - Dgraph Blog

    So, we can conclude that none of the cache libraries meet all the requirements. GroupCache and FreeCache fails on requirement 4 whereas BigCache fails on requirement 5. So, what are we left with? Well, nothing really. We are not aware of a smart memory-bounded cache in Go that can meet the entire list of requirements. If you know of one, do let us know in the comments. Meanwhile, we came across Ca

    The State of Caching in Go - Dgraph Blog
  • Go言語(Golang) はまりどころと解決策

    Go の言語仕様はシンプルで他の言語に比べてはまりどころが少なくて学習コストが小さめな言語のように思います。しかし、それでもはまるところがないわけではないので、自分がはまって時間を無駄にしてしまったことを書き留めておきます。 念の為誤解のないように追記しておくと、この文書の目的は Go を批判することではなく GoGo であるがゆえに C++/Java/Python など利用者が Go を使い始めるときに困惑あるいは誤解するであろうポイントをまとめておくことで初めて Go を触る人がスムーズに Go を使い始められるようにすることです。私個人は Go はバランスがとれた良い言語でだと思いますし、気に入っています。 目次 interface と nil (Go の interface は単なる参照ではない) 文献 メソッド内でレシーバ(this, self)が nil でないことをチェ

  • EmacsでGoの開発環境構築 / fujimisakari blog

    今さら感がありますが、最近よくGoを使っててあらためてEmacs環境を整備したのでざっくりまとめてみます。 メジャーモードの導入(go-mode)まずGo言語のためのメジャーモードのgo-modeで入れます。 シンタックスハイライトやインデント、goコマンドをelispインタフェース通して利用できるようになります。

  • チョットできるGoプログラマーになるための詳解GoDoc - Qiita

    上の2つがCLIで、下の2つがブラウザです。歴史的な経緯を見てみましょう。 〜1.1: go docはバンドルされているツールで、ソースもgo体に同梱 1.2: go docは別のリポジトリにわけられてgodocになり、go体から外れた 1.3: godocで-analysisオプションが追加 1.5: 新しい"go doc"コマンドがgo体に同梱 1.11: godocがウェブだけになるため、go docを使えというアナウンスが出るように 1.12: godocが-httpだけをサポートしてCLIの機能は削除予定 1.13: godocのwebサーバーが同梱されなくなって手動でのインストールが必要に 1.13~: 既存のgodoc.orgから、go modのプロキシサーバーの情報をもとにドキュメントをホスティングするpkg.go.devが運用開始 わかりましたか?よくわかりませんよ

    チョットできるGoプログラマーになるための詳解GoDoc - Qiita
  • Emacs でGo lang を利用する方法 - Qiita

    Emacs にGo lang 環境を設定する方法はいくつかあるのですが、Goの環境変数やその他設定の漏れがあったりと、まともな記事がなかったので完全保存版を作ってみました。 前提 ubuntu (Linux Mint) zshを利用していること emacsがインストール済みであること Go langのインストール Go langをインストールします。

    Emacs でGo lang を利用する方法 - Qiita
  • Go言語のコードレビュー

    SoundCloudが2年半ほどGo言語を利用したプロダクトを番で運用した知見をGopherConで発表していた(“Go: Best Practices for Production Environments”).その中で“CodeReviewCommentsというGoogleでのGo言語のコードレビューにおいてよくあるコメントをまとめたサイトが紹介されていた. 最近Go言語を書くようになり,使えそうなのでざっと抄訳してみた.“リーダブルコード”的な視点も含まれており,Go以外の言語でも使えそう. gofmtでコードの整形をすること コメントは文章で書くこと.godocがいい感じに抜き出してくれる.対象となる関数(変数)名で初めて,ピリオドで終わること // A Request represents a request to run a command. type Request str

  • Go 言語のコーディングスタイル(コーディング規約) | まくまく Hugo/Go ノート

    Go 言語には、標準のコーディング規約が用意されており、それに合わせた組み込みのコードフォーマッター (go fmt) も提供されています。 Go 言語のコーディング規約Go 言語におけるコーディングスタイルは、下記のドキュメントが参考になるでしょう。 Effective Go - The Go Programming Languageポイントを簡単にまとめておきます。 インデントにはハードタブ(タブ文字)を使用 し、ソフトタブ(半角スペース)を使用しない。1行あたりの文字数に制限はない。もちろん、長すぎる場合は改行してもよい。連続した変数定義やコメントは縦に揃える

    Go 言語のコーディングスタイル(コーディング規約) | まくまく Hugo/Go ノート
  • Effective Go — プログラミング言語 Go ドキュメント v0.1 documentation

    イントロダクション¶ Goは新しい言語です。既存の言語からいろいろなアイディアを借りてきていますが、効果的なGoプログラムは、関連するような言語のプログラムとはかなり異なる性質を持っています。C++JavaなどのプログラムをそのままGoに変換しても、満足できるような結果にはなりません。所詮はJavaで書かれたプログラムであって、Goらしいプログラムにはなりません。一方、Goの視点からプログラムについて考えてみると、うまくいく可能性はありますが、既存のプログラムとは違う結果になるでしょう。言い換えると、Goらしいプログラムをうまく書くためには、Goの特性やイディオムを理解することが重要になります。また、命名規則、フォーマット、プログラムの構造などの、Goでプログラミングをするための適切な習慣を知ることも大切になります。そうすることで、他のGoプログラマが簡単にあなたのプログラムを読むことが

  • GitHub - fzipp/pythia: Browser based user interface for the Go source code guru

    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 - fzipp/pythia: Browser based user interface for the Go source code guru
  • 1