redisを扱うコードをユニットテストする #golang
はじめに この記事は、Go3 AdventCalendarの1日目の記事です。 RedisやMySQLを扱うような技術的実装については、interfaceで抽象化するといった使用コード側のユニットテストノウハウはよく見られますが、技術的実装自体をテストする方法はノウハウがあまり見られないなと思いますので、今回はそういう場合のテストの方法について紹介できればと思います。...
View Article標準パッケージから見るパッケージ構成のパターンの解説
こんにちは!これはGo3 Advent Calendar 2018、2日目の記事です。 1日目は、higasgtさんのredisを扱うコードをユニットテストするでした。 TL;DR Goのパッケージ構成は、標準パッケージでも複数パターンの構成が存在している 習う際は、いくつかのパッケージ構造を比較してどのように実装するかを決めるのが良い io と database/sql...
View ArticleGoで簡易なプロトコルの実装をしてみた
こちらは、Go3 Advent Calendar 2018 の 3 日目の記事です。 昨日は、@takochuu さんの 標準パッケージから見るパッケージ構成のパターンの解説でした。 (標準パッケージでも、様々な構成があって勉強になりました。) 概要 Go で非常に簡単なプロトコルを実装してみました。 (本当に簡単なのでご容赦ください。) 対象 プロトコルってどうやって作るのか気になる方...
View ArticleGoでサーバー開発するときのMakefileを晒してみる
はじめに この記事は、Go3 Advent Calendar の4日目の記事です。 Goで開発する際にはテストの実行やlintの実施といった細々としたコマンドを Makefile にまとめることが多いと思います。...
View ArticleGo標準のflagパッケージと比べてみようサードパーティflagライブラリ
tl;dr GoでCLIのツールを作るとき、皆さんフラグをどう実装しますか? 標準のflagパッケージでシンプルにしますか? それともCLIコマンドライブラリで複雑でリッチなモダンコマンドにしますか? 今回はいくつもあるCLIコマンドライブラリから、フラグを制御するライブラリに着目しようと思います。...
View ArticleGo + Google Cloud Pub/Sub で GAE SE (gen1) から Publish するときの注意点
Go3 Advent Calendar 2018 6日目を担当する avvmoto です。よろしくお願いします。 この記事では、Go (gen 1) on Google App Engine SE (GAE SE) から Google Cloud Pub/Sub で Publish するときの注意点を解説します。 なお、go 1.11 以降の gen2 はこの記事の対象外です。 はじめに GAE...
View ArticleGo でアプリケーションとクライアントのミドルウェアを作成する方法知ってますか?
世の中に沢山の「ミドルウェア」が存在しますが、ここで紹介するミドルウェアは、あるメインロジックを大きく変更することなく、その前後に挟む処理のことを指します。 アプリケーションを作成する場合に、メインロジックのハンドラを mainHandler として、ミドルウェア A, B, C を使用していた場合の挙動は以下の順序の通りになります。 request -> A -> B -> C...
View Article「例外」がないからGo言語はイケてないとかって言ってるヤツが本当にイケてない件
この記事は、Go3 Advent Calendar 2018 の8日目の記事です。 7日目は @codehex さんによる「Go でアプリケーションとクライアントのミドルウェアを作成する方法知ってますか?」でした。 本日はネタ全開でお送りいたします。 Disclaimer(免責事項) はじめに言い訳というか、これを書いた経緯というか。...
View ArticleGoの開発環境でDockerを利用する
Go3 Advent Calendar 2018の9日目を担当するtheoden9014です。よろしくお願いします。 Makefileについて書こうと思ったのですが、内容が同じような記事が先に出てしまったようなので、少し趣向を変えたタイトルにしました。...
View Articleひとりかんばん的な ToDo 管理アプリ「hashira」を Go で作っているぞ
この記事は、Go3 Advent Calendar 2018 の 10 日目の記事です。 どうもいつも元気な @pankona です。 長い話を短くすると 現在製作中な ToDo 管理アプリの紹介です。名前は「hashira」。Go で作ってます。 見た目はこんな感じです。 柱が 4 本立ってるっぽく見える気がするので hashira という名前にしました。 ターミナル上で動作する (TUI)...
View Articlegoroutineとスレッドの違いって?
この記事は、Go3 Advent Calendar 2018 の11日目の記事です。 はじめに Goにはgoroutineという並行処理を簡単に実行できる機能があります。 goroutineは「goroutineとは軽量スレッドである」と説明されていますが、結局goroutineとスレッドって何が違うのかということを調べてみました。 まず最初に言うとgoroutineの実体はスレッドです。...
View ArticleGo でテキストエディタを開発しよう!!
この記事は Go3 Advent Calendar12日目の記事です。 Target この記事のターゲットは以下です。 テキストエディタを開発することに必要なことを知る Go でテキストエディタを開発することに必要なことを知る 筆者がテキストエディタ開発で体験したこと(得られたこと)を知る Background 私は、テキストエディタが好きです。...
View Article最速でGoのAPIサーバを公開する方法
はじめに Web系の開発やってるとサクッとWebAPIサーバ建てたい・・・!けどめんどくさいことは抜きにしたい!というときありますよね? コールバック先を指定したいけどいい感じの公開サーバがないときとか・・・ どっかのサーバからリクエスト流してもらって中身確認したい時とか・・・ シンプルに開発中のサーバを一回公開したいとか・・・...
View Article安全にサーバオペレーションするための、バックアップするだけの簡易コマンドをGoで作った
この記事は Go3 Advent Calendar15日目の記事です。 サーバオペレーション用に作成したツールについて語ります。1 作った経緯 AWS上でサーバ構築のオペレーションをやっていたときに 設定を変更する前に設定ファイルのバックアップをとりわすれることが度々あって、 それを解消したいと思ったからです。 最近でしたらInfrastructure as Codeを推進する動きもあるので...
View ArticleGolangのコードをPythonへ移植した話
この記事はGo3 Advent Calendar 2018の16日目の記事です。Golangで書かれたコードをpythonへ移植したときに得られた気づきを共有します。 背景 snakebiteというSpotifyで開発されたpure pythonのhdfsクライアントに copyFromLocal の機能がなかったので自分で実装することにしました。...
View ArticleRealize が Go 1.11 の Modules で使えない
去年、 [Go] Realizeが便利なので、もう少し仲良くなってみる という記事を公開してから今でもたまにいいねしていただけるのですが、ホットリロードツールとしては本当に realize は使いやすいですよね。 ※ もうこの時点で 「いや、こっちのツールのほうがいいよ」 などありましたら、ぜひコメントで教えていただけると泣いて喜びます しかし、 Go 1.11 から組み込まれた Modules...
View ArticleGolangで書かれたStatefullなVirtual Web BrowserライブラリのSurfでJavascriptが処理出来るようにしてみたかった
はじめに これは Go3 Advent Calenderの22日の記事です。 大分遅れて申し訳ありません…。 TL; DR; 出来る限り頑張りましたがottoとwebloopでは実現することが出来ませんでした…。orz 今後ottoとwebloop以外の方法もトライしてみたいと思います。 今回Advent...
View ArticleFo言語のご紹介
この記事はGo3 Advent Calendar23日目の記事です。 Go3アドベントカレンダーなんですが、 あんまりGoの話が出てきません。 Foの話をします。 Foとは Foとは、Goに関数型言語の機能を追加したプログラミング言語です。 いくつか特徴的な点があります。ひとつずつ見ていきます。 ジェネリクス Foでは、ジェネリクスを定義することができます。 type A[T] []T type...
View Article君は全てのケースに備えているか? 〜コード静的解析のススメ〜 #golang
動機 こんなカンジの型と定数リストがあったとします。 a/a.go package a type TestKind int const ( TestKindHoge TestKind = iota TestKindFuga TestKindPiyo ) いわゆる列挙というか区分みたいなヤツですが、これに対してswitch文とか書きますよね。 sample.go switch v { case...
View Articlegrapi : #golang で interface driven かつボイラプレートに悩まされない API 開発
Go Conference 2018 Spring にて, Go で快適に Web API 開発をするための CLI + ライブラリである grapi について話した. 本記事では,grapi で典型的なAPIをどう実装するかのワークフローとともに,grapi の特徴や思想を紹介する. 記事中では grapi v0.3.2 について扱う. grapi の特徴・やること 開発者は gRPC IDL...
View Article