Env OS: MacOS Sonoma 14.5 arch: x86_64 (cpu: Intel Core i9) Rancher Desktop Version: 1.15.1 Background MacOS に Rancher Desktop をインストールして docker pull や docker login などレジストリへのネットワーク転送が発生する処理を実行した時、ti…
Goal Go の http.RoundTripper を使用して、http.Client パッケージのリクエストの前処理・後処理を追加できるようにしてみます。 Background HTTPクライアントを利用した実装において、リクエストやレスポンスに関連した処理を書きたいことはよくあります。…
/etc/zshrc を調べた時のメモ。 TL;DR /etc/zshrc は末尾でterminal別拡張zshrcを呼ぶ macはデフォルトで /etc/zshrc_Apple_Terminal を用意しているので、それが呼び出される /etc/zshrc の拡張スクリプト呼び出し /etc/zshrc は末尾でターミナル別の拡張ス…
golang/goのissues傾向を調べるため、パッケージなどprefixごとにどのくらいのissueが作られているのかを簡単&ざっくりですが調べてみました。 # Github API(v3) から愚直にpagingしつつissueを取得します # credentialなしでも叩けますが、rate limitが緩和…
Go Conference 2022 Springで、下記の資料で登壇しました。 speakerdeck.com Go Conference ってなに? gocon.jp 半年に一度行われるGoのカンファレンスです。 主にGoに関する技術的・組織的な話題についてのトークを聞くことができます。 日本語での登壇が…
Goの pprof を使うにあたり、調べた内容をメモしました。 Goプロファイリング手順 Goのプロファイリングは大きく以下の2工程に分けられます。 計測(pprofバイナリを作成) 出力(pprofバイナリを可視化) 1. 計測 Goバイナリを実行したときのCPU・メモリ等…
MinIOドキュメントに aws-sdk-go を使用したサンプルはあるのですが、 aws-sdk-go-v2 のものはないため備忘録を残しておきます。 MinIO オープンソースのオブジェクトストレージです。 S3互換のため、S3 API経由で接続することができます。 min.io MinIO の…
aws-sdk-go-v2 でS3にオブジェクトをアップロードするには PutObject が利用できます。 引数となる PutObjectInput の Body fieldに、アップロードしたいオブジェクトコンテンツを io.Reader で渡すことができます。 例えば、下記例では bytes.Buffer 型の値…
io.Pipe io パッケージの関数 io.Pipe() は io.Writer を実装した PipeReader 、 io.Reader を実装した PipeWriter ポインタを返します。 PipeWriter.Write() で書き込みを行うと、その内容を PipeReader.Read() で読みこむことができます。 pr, pw := io.Pi…
検証環境 Mac OS Catalina 10.15.6 Go1.15.6 tl;dr Unicode上でn個のコードからなる1文字を []rune に変換すると、[]rune スライス長は n になります。 前置き Goにおける文字列型 string の値は、 []byte スライスの値としても扱うことができます。 例えば…
あけましておめでとうございます。 2020年初めにブログを(半)自前運用1に移行したのですが、諸々面倒だったのでブログをはてなに戻すことにしました。 自前運用ブログの記事もこちらに移しました。 rennnosukesann.hatenablog.com ついでにデザインテーマも…
Prism Stoplight 社が提供する1OpenAPI ドキュメントからモックサーバーを起動するツール。format は OpenAPI2/3 をサポートする。 Usage Install Prism は node 上で実行されるため、node 実行環境を用意してインストールする。 Installation Docker node …
メモ。 特定のユーサーに AWS 上のリソースへの操作権限を与えたいが、操作のためのリクエストは SSL/TLS 通信に限定したい場合がある。例えば、S3 への API 経由のファイルアップロードなどをユーザーに許可する際、それを HTTPS に限定したいときなどがあ…
MeCab とは MeCab: Yet Another Part-of-Speech and Morphological Analyzer 自然言語処理界隈では ChaSen と並び有名な形態素解析エンジン。 形態素解析とは、テキストデータを文法や単語の品詞情報(辞書)を元に言語の最小単位(形態素)へと分割し、各形…
log パッケージを読みました。 src/log/log.go - The Go Programming Language log Go の log はロギング処理に使用するパッケージ。 log パッケージはテストコードを除けば log.go のみで構成されており、log.go も 400 数行からなるシンプルな構成となって…
DynamoDB local AWS は、ローカル環境上で DynamoDB を使用したアプリケーションを開発・テストするための DynamoDB local を提供している。 DynamoDB local は以下の手順でデプロイ可能。 DynamoDB local をローカルにインストールする Apache Maven リポジ…
go-sqlmock とは go-sqlmock は Go の database/sql/driver の実装で、DB ドライバの振る舞いをモック化できるライブラリ。 go-sqlmock を使用することで、DB ドライバを必要するロジックと、実際の DB ドライバ以降の処理を分離してテストできる。 go-sqlmo…
ソケット通信 ソケット(BSD)- Wikipedia ソケット通信とは、プログラムから見たときのネットワーク通信を抽象化する概念をさす。通信の終端をソケットと呼ばれるオブジェクトとみなし、ソケットに対して何かしらの入力を行うと、もう一方のソケットから出…
gqlgen gqlgen は Go の GraphQL ライブラリで、GraphQL をインタフェースとして持つ API サーバを Go で構築できる。 gqlgen はコード上に GraphQL スキーマをガシガシ書いていくライブラリとは異なり、 GraphQL ファイルに記述するスキーマ情報からコード…
TL;DR CentOS7docker コンテナで systemctl が使えない コンテナ起動時、--privileged /sbin/init を指定する $ docker run -it --privileged --name centos -d centos:centos7 /sbin/init $ docker exec -it centos /bin/bash 概要 CentOS 7 の Docker イメ…
net/http の handleFunc() handle() に登録できるパスは Path Parameter を認識しない。例えば、他の Web フレームワークのように、下記 /products/:id エンドポイント中の :id を変数として取得することができない。 // :idを変数としてパースできない http…
-race オプション Go バイナリ実行時、 -race オプションを指定することで競合状態のテストを実施することができる。具体的には go -race run go -race build のようにコード実行時、バイナリビルド時に指定できる。 ただし実行可能な環境は linux/amd64、fr…
Golang のメモリ使用量やゴルーチン数など、実行時ランタイムに関係するステータスを観測するには、 runtime パッケージを使用する。 Memory var m runtime.MemStats runtime.ReadMemStats(&m) // ヒープ上に割り当てられたオブジェクト累積メモリ量 fmt.Pri…
Go の map はスレッドセーフでない Go の map はスレッドセーフ、もといゴルーチンセーフではない。そのため、複数のゴルーチンからの同時アクセスによって整合性が保たれない状態になることがある。 例えば、以下のように map に対して複数のゴルーチンから…
TL;DR 下記コマンドで、カレントディレクトリ配下のすべての .go ファイルの import 文を整形してくれる。 $ find . -print | grep --regex '.*\.go' | xargs goimports -w -local "github.com/your/package" goimports の -w オプションでファイルを直接書…
Go における Context とは 大事なことは全部 Document に書いてある。おしまい。 context - The Go Programming Language ・・・と言ってしまうと元も子もないので、自分なりに整理してみる。 Go の Context を要約すると、 Web アプリケーションで横断的に…
PostmanはOpenAPIと互換性があり、OpenAPI Specification(以下OAS)に沿って書かれたAPIドキュメントはPostmanへimportできる。一方で、PostmanからOpenAPIへのexportはサポートされていない。これはPostmanへのFeature requestとしても挙がっており、そこそ…
SSA 形式とは 静的単一代入(static simple-assignment)形式と呼ばれ、コンパイラによって生成される中間表現のこと。 SSA は、各変数への代入が一度のみ行われる式によって構成される。 例えば、以下のような式を含むコードを見ると、一行目のコードが不要で…
proposal/6977-overlapping-interfaces.md at master · golang/proposal Go 1.14 より、重複するメソッドを持ったインタフェースの複数埋め込みが可能になった。 インタフェースの埋め込みは、あるインタフェース A を別のインタフェース B 内で宣言すること…
Go 1.11 から導入された Go Modules Go 1.11 より、Go 依存パッケージの解決のための Go Modules の概念が導入された。簡単に言うと、Go 公式でサポートされた npm のようなパッケージバージョン管理ツール。 Go プロジェクト配下に見受けられる go.mod go.s…