Post

Golang

2020-09-29 01:53:39

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

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

プログラミング

Golang キャッシュ

2020-09-15 00:31:41

Go CodeReviewCommentsのまとめ

概要github.com - CodeReviewCommentsを読んでメモしておきたいことをまとめる。 Comment Sentences コメントの終わりはピリオドで終わるようにする。 golang.org - commentary Copying 別のパッケージから構造体をコピーするときは、予期しない参照に気を付ける。 メソッドがポインタの値に関連付けられているならTではなく*Tを使うようにする。 Crypt Rand 鍵の生成にmath/randを使ってはいけない。crypto/randのReaderを使う。 文字列として扱いたい場合は16進数かbase64エンコードする。...

プログラミング

Golang コードレビュー 

2020-09-08 03:05:50

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

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

プログラミング

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

2020-08-11 16:43:20

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

概要Golang×chromedp×slack botでslackの絵文字自動生成ボットをつくってみた。 作ったものslackでbotにパラメータを付けたメンションを飛ばすと画像を生成してくれるだけのもの。内部的には、パラメータを元にcanvasで画像を生成、ヘッドレスブラウザでスクショを撮って画像を保存、slackに投稿、といった感じ。 github.com - emoji-generator-slack-app 使い方等はREADMEを見ればなんとなくわかるはず... 週末にハッカソン的ノリでつくったため、バグが残ってしまっている...https://github.com/bmf-san/...

プログラミング

Golang Slack chrome chromedp emoji slack-bot

2020-07-19 17:51:47

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

概要vscodeでgoのLanguage Serverの設定を有効にしたらコード定義元へのジャンプができなくなってしまったので原因を調査した。 settings.json "go.useLanguageServer": true, 結論go.modがプロジェクトのルートに存在している必要がある。 cf. stackoverflow - How to properly use go modules in vscode? vscodeでフォルダを開くときに、こうではなく、 . ├── app ├── go.mod こう開くようにしないとパスが良しなに解決されないせい...

プログラミング

Golang gocode gopls Language Server vscode

2020-06-07 11:25:58

VPS×Docker Compose×Docker Machine×Golang×Nginx×Let...

概要GolangのアプリケーションをVPSでDocker-Composeを使って本番運用してみたかったので、トライしてみた。 環境実際に自分がトライした環境をまとめておく。 VPS(Conoha) お名前ドットコム(ドメイン管理) Docker Compose(本番とローカルの構成を別ファイルで構築) Docker Machine(デプロイで使う) Let's Encrypt(TLS/SSL) Nginx(リバースプロキシ) リポジトリサンプルをつくった。github - bmf-san/go-production-boilerplate 本番環境のサーバーではユーザー作成とかポー...

ポエム

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

2020-01-26 23:57:08

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

概要GolangでURLルーターを自作したので実装するまでの過程をメモしておく。 準備URLルーターを実装する際に行った下準備をまとめる。 データ構造とアルゴリズムURLをどのようにマッチングさせるか、というロジックについて検討する。 多くのライブラリでは、データ構造として木構造がよく扱われているので、どんな種類の木構造を採用するかを考えてみた。 文字列探索に特化した木の中で、時間的・メモリ的計算量がよりベストなものを選定しようとすると、基数木というのが良さそうに見えるので最初はそれを採用しようとしていたのだが、実装が難し過ぎて挫折をした。 もう少し身近でシンプルなものをということでトライ木を...

プログラミング

Golang URLルーティング

2019-11-03 11:03:15

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

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

プログラミング

Golang net/http

2019-09-25 09:36:59

A Trie implementation in Golang

概要トライ木のアルゴリズムと実装についてかく。 bmf-san/road-to-algorithm-master  トライ木とはトライ木(プレフィックス木ともいう。英語はそれぞれ、trie、prefix tree)は文字列の集合を扱う木構造の一種。 各ノードは単一または複数の文字列あるいは数値を持ち(ノードは必ずしも値を持つ必要はない)、根ノードから葉に向かって探索して値をつなげていくことで単語を表現する。 ネットワークのレイヤーならIPアドレスの探索、アプリケーションレイヤーならhttpのルーティングに、機械学習とかの文脈であれば形態素解析といったところでトライ木の応用が見受けられる。 言葉...

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

Golang 基数木 トライ木

2019-08-18 18:05:25

Dive to clean architecture with golang

概要GolangでClean Architectureの実装に挑戦したみたので整理しておく。 内容は概ねスライドの内容を踏襲している。 理解しきれていないところがあったり、自分の解釈、考えを記述しているので、正しくない部分もあるかもしれない。 スライドLTをする機会があったのでスライドを貼っておく。 Dive to clean architecture with golang ソースソースはこれ。 bmf-san/go-clean-architecture-web-application-boilerplate MVCのパターンでの実装もtagを切って残してある。 1.0.0 - MVC 背景...

プログラミング

Clean Architecture Golang DIP