Kyoto.go #50 LT https://kyotogo.connpass.com/event/313309/
![Go製Webアプリケーションのエラーとの向き合い方大全、あるいはやっぱりスタックトレース欲しいやん / Kyoto.go #50](https://cdn-ak-scissors.b.st-hatena.com/image/square/e208ea799124715e27c4152859766abdb66e99c8/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F8a590e217dc3470ab50bd4a50b3a582e%2Fslide_0.jpg%3F29915952)
アジャイル系男子の日常 Go Ginとは❔❔ 自動生成手順📚 1. ファイル構成 2.openapi/openapi.yml 3.生成コマンド 4.★うわぁ。できたぁ。★ Go言語に高階関数が見当たらない🔍 Go Generate との出会い 新解体実行手順 ~Go2まで耐え抜く編~ 解らないし高階関数ジェネレーターを適当に作っちゃおう(業務で作ったやつコピペ)🔨🔨 型変換も一行でやりたいよね。作っちゃお(業務で作ったやつコピペ)🔨🔨 1.ファイル構成 2. openapi/model.mustache 3.生成コマンドをもう一度 4. go generate 5.★うわぁ。できたぁ。2★ とりあえず適当なレスポンス返してみる。🌶 main.go go/api_api1.go 実行👼 確認👼👼 Gitで管理する際のテンプレート .gitignore .openapi-g
Go のエラーハンドリングについて考えてみます。ここではライブラリの中で扱うようなエラーハンドリングではなく、Web アプリケーション、とりわけ API サーバとして振る舞うようなアプリケーションでのエラーハンドリングについて考えます。前提として Error handling and Go は読んでいるものとします。また標準ライブラリで構成するサーバを想定し、WAF を用いたハンドリング方法は紹介しません。 例として、以下のような 2 つのパスを持つ API サーバを考えます。 /user/create /user/delete package main import ( "database/sql" "log" "net/http" ) type UserHandle struct { db *sql.DB } func (u *UserHandle) Create(w http.Res
ここ2年くらい、仕事では大体 Go を書いている。jmuk さんが Go言語は、なんというか「ちょうどいい」言語だな、と思っている。異論は認める。 と書いていたけれど、私はやっぱり Scala や Kotlin あたりが好きで、これは変わらなそう。 例えばコレクションを map しているのをみると、私は「なるほど、ここではコレクションの要素数は変わらないんですね」と思う。filter だったら「コレクションの要素数は変わるけど、個々の要素は変わらないのか」ということを、あるいは Result を map していたら「ここではエラーのほうは触らないのね」ということを読みとっている。 こういう意図が、素朴な for ループと、if err != nil だと読みきれなくて、いや真面目に字面を追っていけばわかるんだけど、私が「map するか」と思いながら for ループを書いて、その for ル
ある仕事でそれまでRubyで書かれていたサーバーサイドをGo言語ですべて書き直すことになって、それまでRubyのコードを書いていた僕はそのままGo言語を書くことになった。その仕事そのものはお客様(僕は外部委託のエンジニアとして参画していた)との関係も良好で素晴らしい仕事をさせてもらうことができたと思っているが、Go言語だけは好きになれなかった。 はじめは流行っている言語だから何か素晴らしい魅力があるのではないかと期待していた。しかし書き始めるうちにどうも自分には合わないなと思うようになり、2年ほど書いて案件の契約が終わる頃にはGo言語でサーバーサイドを書くことは危険だとさえ思うようになった。 あれから数年がたちますますGo言語の案件は増えている。サーバーサイドを書く選択肢としてGo言語を選択する会社も増えている。しかし本当にそれでいいのか?ただ流行っているからという理由だけで選択するにはあ
go toolにはyaccというものがある。 これはunixの言語処理系で広く使われるyaccというパーサジェネレータのGoバージョンである。 本稿はその使い方を説明するチュートリアルである。 対象読者 goyaccを使う - Qiitaという記事があって、これはgoのyaccを使って簡単な言語の構文解析をして使い方を説明している。 しかし、yaccについての基本的な説明が完全ではなく(例えば%%とか)、yaccを触ったことがない人には若干難しい。 従って、私のようなGoの文法は理解しているがyaccを使ったことがない人向けにごく簡単な使い方を説明する。 参考資料 yacc - The Go Programming Languageが公式のドキュメントっぽいが、これもyaccの文法自体は他に任せている。 RHGの速習yaccがとても参考になると思う。 本稿はあくまで取っ付き易いチュートリア
If you prefer video over blog posts, here is my talk on this at GopherCon 2016: https://www.youtube.com/watch?v=KyuFeiG3Y60 One of the strongest sides of Go programming language is a built-in concurrency based on Tony Hoare’s CSP paper. Go is designed with concurrency in mind and allows us to build complex concurrent pipelines. But have you ever wondered - how various concurrency patterns look lik
この投稿は、私が去年OSCONで行ったプレゼンテーションを基に作成しています。プレゼンよりは簡潔に編集し直し、プレゼン後にいただいたいくつかのフィードバックに応える形で記事を書いています。 Go言語に関してよく言われるのは、Go言語はサーバでうまく機能し、静的なバイナリや強力な並行処理、高いパフォーマンスを見せくれるということです。 この投稿では、その後半の2つの項目に関して焦点を当てます。プログラマとってGo言語とそのランタイムは、スケーラブルなネットワークサーバをスレッド管理やブロッキングI/Oを気にせずに書くのにどんなに有効かを説明していきます。 効率的なプログラミング言語に関しての議論 技術的な話に入る前に、Go言語をターゲットにしたマーケットを説明する2つの議論に関してお話したいと思います。 ムーアの法則 画像は以下より引用; 2005年5月にHerb Sutter氏が書いたDr
Google グループでは、オンライン フォーラムやメール ベースのグループを作成したり、こうしたフォーラムやグループに参加したりすることで、大勢のユーザーと情報の共有やディスカッションを行うことができます。
普段 vim-jp や色んな所で jekyll を使っているのだけど、どうも遅くて困っていました。 Windows だと ruby 本体の起動も重いのに、たかだか数十ページの生成に十数秒、PCの負荷が高い時には30秒近く掛かったりしていました。 何とか出来ないかなーと思って、golang を使ってクローンを作ってみました。 mattn/jedie - GitHub jedie - static site generator, jekyll replacement, in golang https://github.com/mattn/jedie インストールは以下の様に行います。 $ go get github.com/mattn/jedie jekyll と同様にひな形の出力も出来ます。 $ mkdir mysite $ cd mysite $ jedie new . markdown
Dec 9, 2014 この記事はDocker Advent Calendar 2014の9日目です。 書こうと思ってたことが完全にネタかぶりしたので今日はどうでもいい小ネタを書きます。 dockerのイメージをDockerfileで作るにはベースイメージが必要ですよね。例えばgoを使ったWebアプリケーションを作ろうと思ったら公式のgolangイメージを使う人が多いだろうと思います。 公式の安心感もあるし基本的にそれでいいと僕も思うんですが、サイズが大きいんですよね。今手元でdocker pull golang:latestしたら448MBあるみたいです。 僕が欲しいのはgoでビルドしたらバイナリの実行環境であって全てが揃った完全なdebianではないのです。 ということで、今日のテーマは可能な限り小さいdockerイメージを作ることです。 scratchイメージ 公式にscratchと
職場が認証付きプロキシを越えないと外に出ていけない環境なのだけど、ツールによって認証付きプロキシのための設定が面倒だったり、そもそも無理だったりして何かとうっとうしいので、リクエストに認証情報を付加するプロキシを書いた。 こいつをローカルで動かして、各ツールのプロキシには localhost:1080 を指定する。 squidとかでできるでしょという話もあるんだけど、squidの設定ファイル書くよりコード書くほうが楽しいし。 package main import ( "encoding/base64" "fmt" "io" "log" "net" "net/http" "net/url" ) var ( port = 1080 proxyHost = "proxy.example.com:3128" proxyUser = "iwata" proxyPass = "mypassword"
この記事ははてなエンジニアアドベントカレンダー2014の8日目です。 今回は、Go言語でサーバ管理ツール Mackerel のコマンドラインツールmkr を作るときに調べたこと、考えたこと、やったことについて紹介します。(mkr は現時点では開発版での提供になります。) コマンドラインツールについて コマンドラインツールを作るにあたって、@deeeet さんの YAPC Asia 2014 での発表資料が非常に参考になります。 書籍 UNIXという考え方ーその思想と哲学 の内容をベースに、コマンドラインツールはどうあるべきかということが丁寧に説明されています。 上記資料から引用させていただくと、コマンドラインツールにおいて重要なポイントは以下の7つであるとされています。 1つのことに集中している 直感的に使える 他のツールと連携できる 利用を助けてくれる 適切なデフォルト値を持ち設定もでき
簡単なチャットプログラムは、ネットワークプログラミング用のフレームワークでは定番のサンプルプログラムです。 echo サーバーが Hello World とするなら、チャットは FizzBuzz といったところでしょう。 とりあえず動くだけのチャットならだれでもすぐに作れるようになりますが、まじめにチャットを作ることで、 ネットワークプログラミングで考えないといけない点やエラー処理の重要な基礎を学ぶことができます。 ということで、 Go でシンプルなチャットを実装してみました。 (ソースコード) 以降、何を考えてどういう設計を採用したのかを解説していきます。 考慮すべきポイント 特定のクライアントへの送信に長時間待たされた場合に、他のクライアントへの送信が遅れないようにする。 クライアントを切断するのは、 (1)ルーム側から kick する場合, (2)受信エラー, (3)送信エラー の3
追記 はてブでつっこみもらいました が、実行するカレントディレクトリは /var/lib/docker/execdriver/native/$id を使うのが正しいようです。(情報読み違えてた。)こちらには container.json があるので、ソースツリーからコピーしてくる必要ないですね。 また、コンテナ ID 取得は、docker ps -q --no-trunc の方が良い、とも教えていただきました。 つっこみにしたがって、最後の方の説明とシェル関数書き換えました。 つっこみありがとうございます! tl; dr タイトルまま 経緯 Docker でつくったコンテナの中に入って状態を確認するために、コンテナ内で sshd を立ち上げてアクセスする、ってなことを以前やってたんですが、コンテナ内で sshd を立ち上げる、というやり方がいまいちだし、そもそもコンテナの仕組みから考えれば
Go言語でGUIしたいかー?! おー!! とまあ、そんなノリで始まります。 Go言語でGUIするには? Go言語でGUIするライブラリは意外と色々あります。 go-ui 「Go言語 GUI」でググった時に、おそらく一番情報の多いライブラリ。ただ情報はあるけど大して気合の入ったライブラリではない模様。 go-uiなんて大層な名前をしてるけど、その実態はQtバインディングだったりする。 開発はもう終わったみたいで、 GoQt というのが後継らしいけど、 GoQt の方はまだリポジトリを作っただけのような状態だった。 Windowsで導入するのがほぼ無理ゲー。(最重要事案) go-gtk mattn氏が開発の中心となっているGo言語のGtk+バインディング。多分Go言語のGUIライブラリで一番開発が活発。 Windowsでも動くらしいけれど、Win64な環境ではしったこっちゃないし、そもそもGt
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く