Golang

Golangでインメモリなキャッシュを実装する

アプリケーション

概要Golangのインメモリキャッシュのライブラリは良さそうなものが存在するが、軽量でシンプルなもので十分だったので自前で実装してみた。 実装要件 複数のデータを保持することができる。 期限付きのデータをメモリに保持することができる。期限が来たらメモリから破棄されること。 キャッシュへの同時参照、更新を考慮し、データのロックが意識されていること。 初期設計※github.com - bmf-sa...

Golang キャッシュ

Go CodeReviewCommentsのまとめ

アプリケーション

概要github.com - CodeReviewCommentsを読んでメモしておきたいことをまとめる。 Comment Sentences コメントの終わりはピリオドで終わるようにする。 golang.org - commentary Copying 別のパッケージから構造体をコピーするときは、予期しない参照に気を付ける。 メソッドがポインタの値に関連付けられているならTではなく*Tを使うよ...

Golang コードレビュー 

gRPCとはーGolangでgRPCに入門するー

アプリケーション

概要GolangでgRPCに入門する。 gRPCとはgRPCとは、Googleが開発したRPC※実現のためのプロトコル。HTTP/2の利用を前提としている。 gRPCではGoogleが開発しているProtocol BuffersというIDL(インターフェース定義言語)でAPI仕様を定義するシリアライズフォーマットを使用する。 gRPCの通信方式にはHTTP/2の仕様に則った4つのパターンがある。 ...

Golang gRPC マイクロサービス HTTP/2 RPC

Golang×chromedp×slack botでslackの絵文字自動生成ボットをつくってみた

アプリケーション

概要Golang×chromedp×slack botでslackの絵文字自動生成ボットをつくってみた。 作ったものslackでbotにパラメータを付けたメンションを飛ばすと画像を生成してくれるだけのもの。内部的には、パラメータを元にcanvasで画像を生成、ヘッドレスブラウザでスクショを撮って画像を保存、slackに投稿、といった感じ。 github.com - emoji-generator-...

Golang Slack chrome chromedp emoji slack-bot

vscodeでgoのLanguage Serverを有効にしたらコード定義元ジャンプができなくなった

アプリケーション

概要vscodeでgoのLanguage Serverの設定を有効にしたらコード定義元へのジャンプができなくなってしまったので原因を調査した。 settings.json "go.useLanguageServer": true, 結論go.modがプロジェクトのルートに存在している必要がある。 cf. stackoverflow - How to properly use ...

Golang gocode gopls Language Server vscode

VPS×Docker Compose×Docker Machine×Golang×Nginx×Let's Encryptでの本番運用

ポエム

概要GolangのアプリケーションをVPSでDocker-Composeを使って本番運用してみたかったので、トライしてみた。 環境実際に自分がトライした環境をまとめておく。 VPS(Conoha) お名前ドットコム(ドメイン管理) Docker Compose(本番とローカルの構成を別ファイルで構築) Docker Machine(デプロイで使う) Let's Encrypt(TLS/S...

Docker Docker Compose Golang Let's Encrypt Nginx Docker Machine VPS

GolangでgoblinというURLルーターを自作した

アプリケーション

概要GolangでURLルーターを自作したので実装するまでの過程をメモしておく。 準備URLルーターを実装する際に行った下準備をまとめる。 データ構造とアルゴリズムURLをどのようにマッチングさせるか、というロジックについて検討する。 多くのライブラリでは、データ構造として木構造がよく扱われているので、どんな種類の木構造を採用するかを考えてみた。 文字列探索に特化した木の中で、時間的・メモリ的計算...

Golang URLルーティング

GolangのHTTPサーバーのコードリーディング

アプリケーション

概要この記事はQiita - Go6 Advent Calendar 2019の20日目の記事です。 GolangでHTTPサーバーを立てるコードの詳細を追ってコードリーディングします。 参考実装コードリーディングしていく実装はこちら。 package main import ( "net/http" ) func main() { mux := http.NewServeMu...

Golang

Golangでトライ木を実装する

アルゴリズムとデータ構造

概要トライ木のアルゴリズムと実装についてかく。 bmf-san/road-to-algorithm-master  トライ木とはトライ木(プレフィックス木ともいう。英語はそれぞれ、trie、prefix tree)は文字列の集合を扱う木構造の一種。 各ノードは単一または複数の文字列あるいは数値を持ち(ノードは必ずしも値を持つ必要はない)、根ノードから葉に向かって探索して値をつなげていくことで単語を...

Golang 基数木 トライ木

Golangでクリーンアーキテクチャに入門する

アプリケーション

概要GolangでClean Architectureの実装に挑戦したみたので整理しておく。 内容は概ねスライドの内容を踏襲している。 理解しきれていないところがあったり、自分の解釈、考えを記述しているので、正しくない部分もあるかもしれない。 スライドLTをする機会があったのでスライドを貼っておく。 Dive to clean architecture with golang ソースソースはこれ。...

Clean Architecture Golang DIP