2020-09-29 01:53:39
概要Golangのインメモリキャッシュのライブラリは良さそうなものが存在するが、軽量でシンプルなもので十分だったので自前で実装してみた。
実装要件
複数のデータを保持することができる。
期限付きのデータをメモリに保持することができる。期限が来たらメモリから破棄されること。
キャッシュへの同時参照、更新を考慮し、データのロックが意識されていること。
初期設計※github.com - bmf-san/go-snippets/architecture_design/cache/cache.goに置いてあるが、転載。
最初に思いついた感じで実装したもの。
package main
import...
アプリケーション
Golang
キャッシュ
2020-09-15 00:31:41
概要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
概要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の絵文字自動生成ボットをつくってみた。
作ったもの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の設定を有効にしたらコード定義元へのジャンプができなくなってしまったので原因を調査した。
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
概要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でURLルーターを自作したので実装するまでの過程をメモしておく。
準備URLルーターを実装する際に行った下準備をまとめる。
データ構造とアルゴリズムURLをどのようにマッチングさせるか、というロジックについて検討する。
多くのライブラリでは、データ構造として木構造がよく扱われているので、どんな種類の木構造を採用するかを考えてみた。
文字列探索に特化した木の中で、時間的・メモリ的計算量がよりベストなものを選定しようとすると、基数木というのが良さそうに見えるので最初はそれを採用しようとしていたのだが、実装が難し過ぎて挫折をした。
もう少し身近でシンプルなものをということでトライ木を...
アプリケーション
Golang
URLルーティング
2019-11-03 11:03:15
概要この記事は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
概要トライ木のアルゴリズムと実装についてかく。
bmf-san/road-to-algorithm-master
トライ木とはトライ木(プレフィックス木ともいう。英語はそれぞれ、trie、prefix tree)は文字列の集合を扱う木構造の一種。
各ノードは単一または複数の文字列あるいは数値を持ち(ノードは必ずしも値を持つ必要はない)、根ノードから葉に向かって探索して値をつなげていくことで単語を表現する。
ネットワークのレイヤーならIPアドレスの探索、アプリケーションレイヤーならhttpのルーティングに、機械学習とかの文脈であれば形態素解析といったところでトライ木の応用が見受けられる。
言葉...
アルゴリズムとデータ構造
Golang
基数木
トライ木
2019-08-18 18:05:25
概要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