タグ

golangに関するtjmtmmnkのブックマーク (35)

  • Goとマルチコアスケール実装

    マルチコア化の未来予測 半世紀前にSF映画「2001年宇宙の旅」に登場するコンピューターHAL-9000が並列コンピューティングの未来を示しました。マルチコアで構成されたコンピューターの物理コアを取り除いてもすぐにクラッシュせずに性能ダウンして処理が継続するという演出がありました。 当時ですらシングルコアコンピューティングの限界が予想されていて、現状のコンピューティングがマルチコア化しているという未来をしっかり予測できていたことがわかります。 演出はコア数に応じてコンピューティング性能がスケールしていることを表現しています。これはマルチコアスケールするソフトウェア実装の未来を示していたと思います。 シングルコア性能向上の頭打ち 2003年以降あたりはCPUの動作周波数が伸び悩み出したところ。 https://queue.acm.org/detail.cfm?id=2181798 より その

    Goとマルチコアスケール実装
  • Deep Dive into The Go's Web Server

    Gonet/httpパッケージはとてもよくできており、Webサーバーを動かすのに必要になる「httpコネクションを確立してリクエストを読んでルーティングして……」という手続き的な処理を気にせずとも誰でも簡単にWebサーバーを立てられるようになっています。 ですが、そのnet/httpが代わりにやってくれている「裏側の処理」の部分が気になる、何やっているんだろう?と不思議に思っている方はいませんか? このでは、実際に筆者がnet/httpパッケージのソースコードを読み込んだうえで、「GoのWebサーバーがどのような仕組みで起動・動いているのか」というところについて、図を使いながら解説しています。

    Deep Dive into The Go's Web Server
  • GoのHTTPサーバーの実装 - 技術メモ

    はじめに Goは標準パッケージとしてHTTPサーバが組み込まれており、net/http パッケージを用いると簡単にHTTPサーバを動かすことができます。今回は net/http パッケージの一部(HTTPサーバの内容)の実装を読むことで、HTTPサーバが動く裏側を見てみたいと思います。困ったら 公式ドキュメント を見ましょう。 なお、読んでいるコード Go1.13 のものです。 はじめに Doc type Handler type HandlerFunc func (HandlerFunc) ServeHTTP type ServeMux Examples func ListenAndServe func Handle func HandleFunc 見通しを良くするために type ServeMux type Handler type HandlerFunc Implementation

    GoのHTTPサーバーの実装 - 技術メモ
  • 他言語プログラマが最低限、気にすべきGoのネーミングルール

    概要 タイトルの通り、他言語から入門した人が最低限気にするべき、ネーミングルールをまとめました。 対象読者 Goの基構文を理解している人を対象読者としています。 この記事で説明すること、説明しないこと 説明すること Goのファイル名、変数名などの名前付けに関するルールや慣例などを説明します。 説明しないこと 名前付け以外で気をつけるべきGoの書き方[1] がいくつかあります。 しかし、それらに関してはこの記事では説明しません。 筆者のバックグラウンド プログラマ歴はもうすぐ8年程で、Goの他には以下のような言語の経験があります。 JavaScript TypeScript PHP Ruby Java Scala Goは少し前に書いて、一時期書かない時期が続いていましたが、最近また書いています。 トータルするとGoの経験は1年半程度です。 意識すべき名前付けルール package名 利用し

    他言語プログラマが最低限、気にすべきGoのネーミングルール
  • Goの苦手な領域

    Goの利点を使って実装するコツやノウハウを書くことがコミュニティにとってプラスになると思っているのでそれに専念したいという考えはありますが、Goの苦手な領域にGoを採用してしまってヘイトを溜め込んでしまう事例を見かけたりします。 こういう悲劇の起こる可能性を少しでも減らせたらという思いで、Goの現状の苦手な領域について解説しようと思います。Goを学び始めにこれらの領域に手を出すのは避けましょう。 Cgo is not Go GoCGO連携でC/C++資産を利用することができますが、メモリアロケータの異なる処理系を繋ぐ関係上、お互いに呼び合う際のパラメータや戻り値はほとんどのケースでコピーが必要になります(Cの型でメモリ確保しCの型のまま受け渡しする場合はOK)。なので高頻度に呼び合うような用途には不向きであるというのはSWIGなどのような複数の処理系を連携させる仕組みと同様です。 また、

    Goの苦手な領域
  • Reducing Memory Allocations in Golang

    Go’s place between C and Python in terms of abstraction and garbage collection memory management model has made it attractive to programmers looking for a fast but reasonably high level language. However, there is no free lunch. Go’s abstractions, especially with regards to allocation, come with a cost. This article will show ways to measure and reduce this cost. Measuring On posts about performan

  • Go の sql.DB がコネクションプールを管理する仕組み

    Godatabase/sql パッケージ の DB 構造体 は、データベースへのコネクションプールを管理し、かつスレッドセーフ (goroutine セーフと言ったほうが良いのだろうか…?) にそれらの接続を使用できることを保証している。 ドキュメント にも次のように書かれている。 DB is a database handle representing a pool of zero or more underlying connections. It’s safe for concurrent use by multiple goroutines. こちらの基的な実装内容と、動作を制御するパラメータについて調べてみた。 基礎知識のおさらい database/sql パッケージはデータストアの実装によらない一般的な SQL のインタフェースを提供している。具体的なデータストアへの接

    Go の sql.DB がコネクションプールを管理する仕組み
  • Go Modules Cheat Sheet

    Go Modules Cheat SheetA handy reference for common operations with Go modules.

    Go Modules Cheat Sheet
  • Go言語低レイヤー入門 Hello world が 画面に表示されるまで (GoConforenceTokyo2021)

    Go言語低レイヤー入門 Hello world が 画面に表示されるまで @DQNEO (ドキュネオ) Go Conference Tokyo 2021 2021-04-24

    Go言語低レイヤー入門 Hello world が 画面に表示されるまで (GoConforenceTokyo2021)
  • 検索エンジン自作入門 Go Conference 2021 Spring

    Go Conference 2021 Springの登壇資料です アウトライン 1. 検索エンジンとは ~ 一般的な検索エンジンの仕組みと構成要素 2. 自作した検索エンジンの紹介 ~ 具体的に自作した検索エンジンの構成要素と動作例 3. 自作した検索エンジンの実装 ~ アルゴリズムとデータ構造、ライブラリ 4. おわりに ~ 検索エンジンを自作した感想

    検索エンジン自作入門 Go Conference 2021 Spring
  • Goから学ぶI/O

    GoにはI/Oに関わるパッケージが数多く存在します。io, os, bufio, fmtなどなど……。これらの立ち位置や、I/O実行の裏で何が起こっているのか当に理解していますか?このでは、この問への答えをまとめました。

    Goから学ぶI/O
  • Understanding Allocations in Go

    Cleaning up heap allocations in GoThis is the 18th article of the Eureka Advent Calendar 2020. Yesterday we had a post from Jun Ernesto Okumura on diversity in Spotify’s recommender systems. IntroductionThanks to efficient in-built memory management in the Go runtime, we’re generally able to prioritise correctness and maintainability in our programs without much consideration for the details of ho

    Understanding Allocations in Go
  • Containerize Your Go Developer Environment - Part 1 | Docker

    When joining a development team, it takes some time to become productive. This is usually a combination of learning the code base and getting your environment setup. Often there will be an onboarding document of some sort for setting up your environment but in my experience, this is never up to date and you always have to ask someone for help with what tools are needed. This problem continues as y

    Containerize Your Go Developer Environment - Part 1 | Docker
  • Re: 結局、Go言語をやめる理由はなかった件 - Hateburo: kazeburo hatenablog

    すみません、ISUCONのアレに火がついてしまったので..。 Advent Calendarとはとくに関係がありません。 qiita.com qiita.com こちらの記事をみて、気になってしまったので interpolateParams の追加とMySQLチューニングをしてベンチマークを回してみました。 ベンチマークの環境が公開されているのは素晴らしいですね。 github.com 8vCPU/16GB Memのc5a.2xlargeなEC2のインスタンスを起動して、以下の手順にしたがってdockerdocker-composeをインストールしました。OSはUbuntu 20.04を使いました。 docs.docker.com docs.docker.com 上記のbenchmarkのrepositoryをgit cloneし、compose build && compose upし

    Re: 結局、Go言語をやめる理由はなかった件 - Hateburo: kazeburo hatenablog
  • goimportsのソースコードを読んでみた - knqyf263's blog

    概要 go generate用のツールを作る時にパッケージを自動でimportしたくなったので、goimportsのソースコードを読んでみました。 Goの標準ツールということで凄い技術でやっているんだろうな...と漠然と思っており、自分なんかに理解できるだろうかという不安があったのですが、読んでみたら泥臭いことを丁寧にやっている感じでした。 コードは綺麗だし参考になるところだらけなのですが、割と普通のことをやっている感じなので必要以上に恐れずに一度読んでみると良いのではないか、と思いました。 せっかく読んだので重要そうに感じたところだけまとめておきます。 大分省略したにも関わらず長くなって誰にも読まれない文章に昇華されてしまって残念です。自分用のメモということで。 バージョン 自分が読んだときのコミットハッシュは以下です。 コミットハッシュ:3c07937fe18c27668fd78bba

    goimportsのソースコードを読んでみた - knqyf263's blog
  • golang で外部コマンドを実行して標準出力を取得する - tkuchikiの日記

    執筆時に使用した go version は、go1.3 です。 golang で外部コマンドを実行して、 標準出力の結果を受け取る方法です。 Go Playground では試すことができませんのでご注意ください。 ※追記1 id:mattn さんにご指摘いただいた、Cmd.Output の例を追記しました。 標準出力だけ取れれば良いなら、非常に簡潔に書くことができます。 ありがとうございました。 ※追記2 ドキュメントを読みなおしたところ、 Cmd.CombinedOutput という、 標準出力と標準エラー出力両方とれるものがありましたので、 追記しました。 ※追記3 最初に書いた標準出力一括取得は、それほど使わなさそうだと思いましたので、 削除して、末尾にStdinPipe の例を記載しました。 ※追記4 id:id:hnakamur3 さんに教えていただきました記事へのリンクを追加

    golang で外部コマンドを実行して標準出力を取得する - tkuchikiの日記
  • Arrays, slices (and strings): The mechanics of 'append' - The Go Programming Language

    Tips for writing clear, performant, and idiomatic Go code

    Arrays, slices (and strings): The mechanics of 'append' - The Go Programming Language
  • Big Sky :: golang 1.5 の internal パッケージの使い方。

    golang 1.5 がリリースされました。 Go 1.5 is released - The Go Blog Go 1.5 is released 19 August 2015 Today the Go project is proud to release Go 1.5, the sixth major s... https://blog.golang.org/go1.5 内容かなり盛りだくさんです。その中でも目を引くのが internal パッケージです。 golang ではパッケージ内のシンボルを外部から参照可能にする為に名称の先頭を大文字にする必要があります。しかしながら、そうしてしまうと無関係のパッケージからも参照可能になってしまう問題がありました。 ライブラリパッケージを作っていて内部の共通関数を切り出したい、しかしながらライブラリ以外の物からは使わせたくない、そういう場合に

    Big Sky :: golang 1.5 の internal パッケージの使い方。
  • Go標準のflagパッケージと比べてみようサードパーティflagライブラリ - Qiita

    tl;dr GoでCLIのツールを作るとき、皆さんフラグをどう実装しますか? 標準のflagパッケージでシンプルにしますか? それともCLIコマンドライブラリで複雑でリッチなモダンコマンドにしますか? 今回はいくつもあるCLIコマンドライブラリから、フラグを制御するライブラリに着目しようと思います。 まず手始めに標準のflagパッケージを見た上で、各ライブラリは何を解決したいのか。どのような方法で解決しようとしているのか。 この機会にちょっと眺めて遊んでみようと思います。 Go標準flagパッケージ Go製のCLIツールを見ていくと、どうもサードパーティライブラリを使っている方が多く印象を受けます。 このコマンド、中身どうなっているかな。 と見に行くと、ほとんどのツールは標準flagパッケージではなく、サードパーティライブラリをつかっています。 Go公式ツールや、古くに作られたツールなどは

    Go標準のflagパッケージと比べてみようサードパーティflagライブラリ - Qiita
  • Go言語のイケてない部分 - ぐるぐる~

    最近色々あって仕事Go言語を使っています。 色々割り切っている言語なので、こんなこと言ってもしゃーないんですが、言語設計はミスってるんじゃなかなぁ、と思わざるを得ない点が多々あります。 使い始めて1か月くらいなので間違ったことを書いているかもしれませんので、何かあれば指摘していただけるとありがたいです。 文ではネガばかり羅列していますが、ランタイムとツール周りは気に入っています。 Goのランタイムを使う、もっと洗練されたAlt Go的なものがあるといいのに(もしくはジェネリクスのったGo2を早くリリースしてほしい)、と思う日々です。 追記: なんか意図とは違った受け取られ方をしている方もいるので追記します。 この記事はあくまで、「Go言語を学ぶにあたって躓いた点」を列挙し、まとめ、理由を考えてみる(教えてもらう)ために書いたものです。 Go言語自体はDisってますが、Go言語ユーザーを

    Go言語のイケてない部分 - ぐるぐる~