Gocon 2015 Summer のLTで発表した資料です。 Goのパッケージ構成で 試行錯誤してみた話
![Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer](https://cdn-ak-scissors.b.st-hatena.com/image/square/dcdb32832e9857f4fc480baf466ed485db74f895/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fgo-150621102503-lva1-app6892-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds)
Goで文字列結合をする時、通常の+=は遅いから[]byteをappendした方が高速という話があったので、実際にどの程度の差が出るのか検証してみた。 Goでは文字列連結はコストの高い操作 - Qiita テストケース 以下のような9文字*10要素の文字列の配列要素を","で結合し、最後に","を追記するコードを実装した。得たい出力はstringなので、[]byteやbytes.Bufferを使う場合、最後にstringへのキャストを実行した。 var m = [...]string{ "AAAAAAAAA", "AAAAAAAAA", "AAAAAAAAA", "AAAAAAAAA", "AAAAAAAAA", "AAAAAAAAA", "AAAAAAAAA", } func BenchmarkAppendOperator_(b *testing.B) { for i := 0; i <
EchoHigh performance, extensible, minimalist Go web framework Optimized RouterEcho boasts a highly optimized HTTP router that operates without dynamic memory allocation. This router intelligently prioritizes routes for efficient routing and processing of incoming HTTP requests. The absence of dynamic memory allocation contributes to better performance and resource utilization. ScalableEcho framewo
@tenntennです。 現地時間の2016年7月11日〜13日にアメリカのコロラド州デンバーにて開催されたGopherConにて発表をしてきました。 GopherConとは? GopherConは、毎年デンバーで開催される世界でもっとも大きいGo(Go言語)のカンファレンスです。 今年で3回目の開催になります。 GopherConと名前の付くカンファレンスは、デンバーで開催されるGopherConの他にもGopherCon IndiaやGopherCon Chinaがあります。 GoのWikiに世界各地で行われているカンファレンスまとめてあるのでそちらを見ると分かりやすいかなと思います。 今年のGopherConの参加者は1500名を超えているらしく、3トラックに分けて発表が行われました。 他のカンファレンスと比べても非常に規模が大きいことが分かります。 GopherConで発表するまで
golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその groutine と通信する為の仕組みと考えると分かりやすいです。 package main import ( "fmt" "time" ) func main() { task := make(chan string) taskquit := make(chan bool) workerquit := make(chan bool) go func() { loop: for { select { case <-taskquit: workerquit <- true break loop case job := <-task: fmt.Println(job) } } }() go func() {
次回予告「並列ダウンロードするHTTPクライアントをバンド幅制限するサーバをGoで実装した」 / “高速でダウンロードできるツールを Go で実装した。 - Qiita” https://t.co/6NfEyJCwbu — Kazuho Oku (@kazuho) July 13, 2016 並列ダウンローダを使うと幾らかサーバに負荷が掛かってしまいます。golang のサーバ側で帯域制限を行う場合には2つ方法があります。 転送量制限する 接続数制限する まずは転送量制限。転送量の制限には throttled が便利です。 GitHub - throttled/throttled: Package throttled implements rate limiting access to resources such as HTTP endpoints. README.md Throttle
Golangが一番パフォーマンスが良いかと予想していましたが、全く逆の結果になってしまいました。 Golangが遅い理由 遅い原因をいくつか考えて改善できないか試してみました。詳細は省きますが、以下の点については問題なさそうでした。 goroutineはリクエスト単位で起動している コネクションプールは有効になっている BeegoのORM特有の処理は主原因ではない(標準ライブラリのsql関数と大差なし) DB側のCPU使用率は100%になっているが、CPU使用率とメモリ使用量はPHP環境と同程度の負荷になっている ここまで確認して、プロファイラを使った方が良さそうに思えたので、いったんプロファイラで状況を確認するために、標準で提供されていて手軽に使えそうなpprofを使ってみました。topで確認すると次のような結果がでました。 (pprof) top 20 -cum 920ms of 15
golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればどう実装すればいいか分からないなんて事もあったと思います。しかし golang の goroutine/channel は、やっている内容の割にとても容易にスレッド間通信やキューイング、処理の受け待ち等を実装できる様になっています。尚、channel をどの様に適用したら良いかについては以下を参照下さい。 Big Sky :: Golang の channel の使い所 golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその grout... http://mat
Goのtimeパッケージのフォーマットは独特だ。普通のUnixのstrftimeとかだとフォーマット文字列は%Yとか%mといった文字列なのだけど、Goの場合はそのかわりにある種の「サンプル文字列」を与えるという仕組みになっている。 たとえば次の文字列はGoでは時刻の正しいフォーマット文字列だ。 %Y(年)の代わりに"2006"、%b(月の名前)の代わりに"Jan"と書くといったルールになっている。"%Y-%m-%d"の代わりに"2006-01-02"と書くのは見た目にわかりやすいといえばわかりやすいが、"2006年1月2日15時04分05秒"以外の時刻は正しいフォーマット文字列としては認識されない。2006の代わりに2007とか書いても意味がない。 では一体この2006年1月2日という特別な日は、なんの日なのか? 最初は1970年1月1日(エポック)から特定の時間が経過した日だとか、あるい
はじめに 以前投稿した「IntelliJ IDEAを使ってGAE/GoのHelloWorldする」のGAE/Goで作ったWebアプリを、CircleCIからGoogleAppEngineへdeployする手順の説明です。 前提条件・環境 GoogleAppEngineでアカウントが登録済み CircleCIでアカウント登録済み GAE/GoのWebアプリのリポジトリがGithubにある CircleCIの設定 プロジェクト直下にcircle.ymlを追加 今回は、appengineのバージョン1.9.12の例。 machine: timezone: Asia/Tokyo dependencies: pre: - curl -o $HOME/go_appengine_1.9.12.zip https://storage.googleapis.com/appengine-sdks/featur
以下のツイートにもある通り、一見 golang は struct を定義しないと JSON を扱えないように見えます。他にも似たようなツイートをチラホラと見かけましたが、それらは全部誤解です。そこでこの記事では、golang でゆるふわ (structを定義せず) に JSON を扱う方法を紹介します。 golang。rubyのようにゆるふわにJSONは扱えない? https://t.co/olsryDHc5G — bamchoh (@bamchoh) 2016年6月24日 この記事では入力の json.Unmarshal() を取り扱いますが、出力の json.Marshal() にも応用できます。 TL;DR json.Unmarshal() には *interface{} を渡せます interface{} は dproxy を使うと、値のアクセスで楽ができます json.Unmar
@tenntennです。 今年度の新卒研修でGo研修を担当しました。 スライドで100ページを超えるボリュームの資料を14時間かけて、じっくり網羅的に講義を行いました。 内容は今まで私が外部で発表したスライドをまとめて補足を足していった形になってます。 資料はSlide Shareに公開してあるので、ぜひチェックしてみてください。 また、資料中に扱っているソースコードもGithubで公開していますので、そちらも参考にしてください。 資料 ソースコード 研修をやってみて 新卒の反応は、普段触れない言語に触れて新鮮だったという反応やゴールーチンとチャネルが難しいなどさまざまでした。 スパルタ気味で進め方が少し早かったせいか、ついていくのが大変だったみたいです。 それでも、自主的にpingコマンドを作ってくる強者もいたり、いい刺激になったんじゃないかと思います。 裏話 実は最初はGoで簡易ゲーム
はじめに 藤本です。 最近、仕事じゃないことでGo言語を書く機会が増えています。 業務上、プログラムを触ることがそんなに多くないせいか、記憶力が弱いせいか、基本的にプログラミングはIDEがないと辛いです。 私がIDEに特に期待することは、以下となります。 自動補完 デバッグ ジャンプ(というのかな?EclipseでCtrl + Clickで飛ぶやつ) IntelliJ IDEAやEclipseのGo言語Pluginを試してみましたが、EclipseによるJava開発やPyCharmによるPython開発のような感動は得られず、Atomエディタで開発していました。 そんな中、Visual Studio CodeでGo言語Extensionがあり、使い易いとの噂を聞いて、早速試してみました。結果、今のところはあまり不満ありません。 Visual Studio Codeについては下記記事をご参照
環境構築するまでに知りたかったこと Golangの最新バージョンは? 1.16.6 (2020/07/12リリース) Goのインストール方法は? macOS の場合は brew で OK この場合、goのsdkは /usr/local/Cellar/go/<バージョン>/libexec にインストールされます。 IntelliJ IDEA や GoLand にような IDE に「GOROOT」というものの指定を求められたら、このパスを使います。 brew で入らないバージョンの go が必要だったり、いくつかのバージョンを併用したい場合は $ go get golang.org/dl/go1.14.4 $ go1.14.4 download # 1.xx.0 の場合 $ go get golang.org/dl/go1.15 $ go1.15 download # 上記でgo getしたg
5年前に買った『Java並行処理プログラミング ―その「基盤」と「最新API」を究める―』をようやく読んだ。買った頃には Perl やシンプルな JavaScript ばかり書いていたので並行プログラミングなんてほとんど気にすることがなく、実感がなくて読むのも途中で止まってしまっていた本で、家を掃除しているときに見つけたもの。その後も趣味で Android アプリを書くなど Java に触れる機会はあったけれど、せいぜいが AsyncTask を使うくらいで、マルチスレッドを強く意識してコードを書くこともなかった。 Java並行処理プログラミング ―その「基盤」と「最新API」を究める― 作者: Brian Goetz,Joshua Bloch,Doug Lea出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/11/22メディア: 単行本購入: 30人 クリック: 442回
JenkinsでgolangプロジェクトをCIするときに少しハマったので、同じミスをしないで済むようにここにメモする。 Jenkinsでgolangを使えるようにする。 何はともあれ、これをしないことには始まらない。特に理由が無ければ、Jenkinsのプラグインを使うのが良い。 “Jenkinsの管理” > “プラグインの管理” > “利用可能”タブ へ進み、フィルターで”golang”と入力すれば、Go pluginが見つかる。チェックを入れた後、”ダウンロードして再起動後にインストール”を押下する。 再起動後、”Jenkinsの管理” > “システムの設定”へ進むと、”Go”のセクションが追加されていることが確認できるはず。 もしシステムの管理で”ロード中”から復帰しない場合、”Jenkinsの管理” > “プラグインの管理” > “高度な設定”タブ へ進み、画面右下の”更新”ボタンを
golangではmysqldriverでmysqlにアクセスできますが、 一つ一つ構造体に入れないといけなかったりと、けっこう辛いものがあります。 goでmysqlを使う そこでいろいろ探していたところ、 ActiveRecordのように構造体を使ってDBにアクセスできるORMがありました。 https://github.com/jinzhu/gorm 自動でテーブル作ってくれたり、変更してくれたりと、他のORマッパーよりかはActiveRecordっぽいです。 リレーションも勝手に貼ってくれるみたいです。 ただし、取り出すときは元のオブジェクト→リレーションのオブジェクトと、 順に取ってくる必要があり、自動でリレーション先のオブジェクトの取得はしてくれるわけではありません。 (使わない場合は無駄なアクセスになるので、正しいと言えば正しいですが) package main import (
Object relation mapping with GORM Sun, Nov 15, 2015 What is object-relation mapping (ORM, O/RM, and O/R mapping)? Object-relational mapping in computer science is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a “virtual object database” that can be used from within the programming language. source: W
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く