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
先日、Go Conference 2018 Springに参加してきました。キーノートはDave Cheney氏による、GoのHashmapはどのようにして効率的な実装を達成したのか、について(本記事のサブタイトルに、キーノートのタイトルを借用させていただきました)。復習も兼ねてHashmapの実装を覗いてみたので、簡単にまとめようと思います。 なお、英語のセッションだったので、正しく理解できていない部分があるかもしれません。お気付きの方は、ぜひご指摘ください。 Hashmapに関する他言語の問題点Dave Cheney氏によると、C++とJavaのHashmapには、それぞれ以下のような問題点があるとのことです。 C++: キーと値の組合せが異なるHashmapは、型としても全く別物となる。結果、コンパイル後のプログラムには、それぞれのHashmap実装が別物として含まれることになる。J
Go Advent Calender 2017(その4)の11日目の記事です。 Golangの並行処理では、共有リソースにアクセスする場合は競合が発生しないようにロックを用意する必要がある。 例えば、標準のmapはgoroutine safeではない。Write同士が競合した場合や、Write中のReadが発生するとPanicを起こしてしまう。 そのため、従来はmapとmutexを併用することでロックを用意し、複数goroutineから安全にアクセスできるようにする必要があった。 Go1.9ではsync.Mapが標準パッケージとなり、自身でRWMutexを備えたマップを書くことなく、ロック付きのマップを使用することができる。 どのように使うか 以下コードの通り(Playground)。 package main import ( "fmt" "sync" ) func main() { /
Golangの並行処理は強力である一方で同期処理を慎重に実装する必要がある.“Go 言語における並行処理の構築部材”にまとめられているようにGolangは様々な方法でそれを実装することができる.実現したいタスクに合わせてこれらを適切に選択する必要がある. この同期処理の機構として新たにgolang.org/x/sync/errgroupというパッケージが登場した.実際に自分のツールで使ってみて便利だったので簡単に紹介する. 使いどころ 時間のかかる1つのタスクを複数のサブタスクとして並行実行しそれらが全て終了するのを待ち合わせる処理(Latch)を書きたい場合にerrgroupは使える.その中でも「1つでもサブタスクでエラーが発生した場合に他のサブタスクを全てを終了しエラーを返したい」(複数のサブタスクが全て正常に終了して初めて1つの処理として完結する)場合が主な使いどころである. 実例
Recently I’ve been implementing a small side project in Go with Gin. I know how easy it is to setup tests with Go, but I was very surprised not many people had covered examples of how to test the JSON responses for your APIs. With Gin specifically. I discovered, it’s quite simple. First we want an endpoint to test so here we go. The following would return a simple {"hello":"world"} JSON response.
Ten Reasons Why I Don't Like Golang July 26, 2016 When I first started programming in Go, my summary of it was, “The good things are great and the bad things are weird and I can live with them.” After another three years and a few large projects in Go, I no longer like the language and wouldn’t use it for a new project. Here are 10 reasons why, in no particular order. Go uses capitalization to det
Untuk sebagian besar kasino online untuk membuat slot tersedia cukup pivotal karena itu adalah bagian utama dari kasino. Biasanya, situs perjudian menawarkan manfaat selamat datang murah hati yang memberi pelanggan… 最大の価値のためにあなたの財産を素早く売る方法 あなたがあなたの家のマーケティングを考えているなら、非常に最初にあなたのコミュニティのための地域の市場の問題を見てください。あなたの場所によっては、確かに実際にははるかに良い/さらに悪い機会が提供される可能性があります。オファーの準備ができている場合は、すぐ下にいくつかのハウツーの選択肢と良識のある提案があります。
依存がなく、テスト可能であり、クリーン。 Uncle Bobのクリーンアーキテクチャの概念を読んだので、これを私はGoで実装してみたいと思います。このアーキテクチャは、自分たちの会社である Kurio – App Berita Indonesia で使っていたものに似ていますが、少し違っています。大きな違いはなく、概念は一緒なのですが、フォルダ構造が違っています。 サンプルのプロジェクトとして、記事をCRUDで管理するリポジトリを https://github.com/bxcodec/go-clean-arch にpushしてあります。 * 免責条項 ここで使われているどのライブラリあるいはフレームワークも、利用を特別推奨しているものではありませんので、ご自身あるいはサードパーティによる同じ機能のものと入れ替えることが可能です。 基本的な考え方 ご存知のように、クリーンアーキテクチャで設計
When writing an HTTP server or client in Go, timeouts are amongst the easiest and most subtle things to get wrong: there’s many to choose from, and a mistake can have no consequences for a long time, until the network glitches and the process hangs. HTTP is a complex multi-stage protocol, so there's no one-size fits all solution to timeouts. Think about a streaming endpoint versus a JSON API versu
概要 結論から言うと、Streamで扱っているものはStreamのまま扱うです。 具体的にはio.Readerを毎回ioutil.ReadAllで[]byteに変換せずにそのまま使いましょうです。 なぜStreamを使うべきか Node.jsの例ですが、こちらで非常に分かりやすく説明されています。 yosuke-furukawa.hatenablog.com それを踏まえて考えてみると、Goの場合以下の2つが大きいと思います。 1. メモリの効率化 ioutil.ReadAllなどで一旦全て[]byteに変換すると、その分メモリを消費しますし、アロケーションやGCに依る速度低下が起きます。 一方io.Readerやio.Writerは各chunkの処理に同じバイトを使いまわすので、メモリの効率が良いです。 2. 標準パッケージの多くがio.Readerをサポートしてる io.Reader、
新しい言語に移行するのは常に大きな決断です。その言語をよく知る人がチームメンバーに1人しかいない時などは特にそうです。今年の初め、我々は Stream の主要言語を Python から Go に切り替えました。この記事では、なぜ私達が Python から Go に移行しようと決断したのか、その理由を説明します。 Go を使う理由 理由1 - パフォーマンス Go は速いです! Go は極端に速い。そのパフォーマンスは Java もしくは C++ に匹敵します。私達のユースケースでは、Go は Python より30倍速いです。Go と Java を比較したベンチマークはこちらです。 理由2 - 言語パフォーマンスの問題 多くのアプリケーションにとって、プログラミング言語は、単にアプリとデータベースを繋ぐものにすぎません。言語そのもののパフォーマンスは通常あまり重要ではありません。 しかしな
Unit-testing programs depend on I/O in Go @yuya_takeyama 2014/11/30@GoCon 2014 Autumn At first Mr. Pike, thank you for coming to Japan And thank you for great language 主催者の皆様、素晴らしいイベントと発表の機会をありがとうございます 楽天さん、会場をありがとうございます このスライドについて 発表に含まれるコードは GitHub リポジトリ中 にあります Pandoc はじめて使いました。便利な運用についてご存知の方教えてください... こんにちは 普段は PHP で Web アプリ運用してます コマンドラインツールは Ruby で書いてます コマンドラインツールは徐々に Go に寄せつつあります db2yaml dbya
The Go Blogの日本語訳を公開しています。修正は https://github.com/ymotongpoo/goblog-ja/ まで。 Go 2にむけて Toward Go 2 by Russ Cox はじめに (この文章は本日行われた Gophercon 2017 での私の発表の書き起こしで、Goコミュニティ全体にGo 2のための議論や計画をする中での支援を求めるものです。 動画が公開されたらこちらにリンクする予定です。) Rob Pike、Robert Griesemer、そしてKen Thompsonが新しいプログラミング言語について数日議論を重ねた後、2007年9月25日にRobが「Go」という名前を提案しました。 翌年、Ian Lance Taylorと私がチームに参加し、5人で2つのコンパイラと標準ライブラリを開発し、その成果が2009年11月10日のオープンソース
APIに対してリクエストしてレスポンスを受けるクライアントツールをGolangで作成しています。 もともとアプリケーションエンジニアでもない自分がCLIを作るには、何をすればいいのか全く分からなかったところ、下記が非常に参考になって、100回は読んだと思います。本当に感謝しかない…! GolangでwebサービスのAPIを叩くCLIツールを作ろう 一方で、この記事であったり、そもそもcobraの特性でもあったりで、物凄く素直に実装してしまうと後々困ったりして、自分がハマったところもあるので、「少しうまく作る」ポイントを紹介します。 サンプルコードは tkit/go-cmd-exampleに格納しています。 また、下記のリファクタリングにあわせてcommitしているので、都度どのように書き換えているかを分かるようにしていますので参考にしてください。 取り扱うコード cobraでは、 例えば
Essential Go is a free book about Go programming language. It's part of Essential Programming Books. It's written to provide clear and concise explanation of topics for both beginner and advanced programmers. Most examples are linked to online playground that allows you to change the code and re-run it. You can also quickly navigate to desired content using table of content on the left and search
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く