Works by

Ren's blog

@rennnosuke_rk 技術ブログです

2020-01-01から1年間の記事一覧

【OpenAPI】PrismでOpenAPIドキュメントからモックサーバーを起動する

Prism Stoplight 社が提供する1OpenAPI ドキュメントからモックサーバーを起動するツール。format は OpenAPI2/3 をサポートする。 Usage Install Prism は node 上で実行されるため、node 実行環境を用意してインストールする。 Installation Docker node …

【AWS】IAMユーザーにAWS上のリソースに対するSSL/TLS通信を強制する

AWS

メモ。 特定のユーサーに AWS 上のリソースへの操作権限を与えたいが、操作のためのリクエストは SSL/TLS 通信に限定したい場合がある。例えば、S3 への API 経由のファイルアップロードなどをユーザーに許可する際、それを HTTPS に限定したいときなどがあ…

【Go】Goで形態素解析する - mecab-golang

Go

MeCab とは MeCab: Yet Another Part-of-Speech and Morphological Analyzer 自然言語処理界隈では ChaSen と並び有名な形態素解析エンジン。 形態素解析とは、テキストデータを文法や単語の品詞情報(辞書)を元に言語の最小単位(形態素)へと分割し、各形…

【Go】logパッケージを読む

Go

log パッケージを読みました。 src/log/log.go - The Go Programming Language log Go の log はロギング処理に使用するパッケージ。 log パッケージはテストコードを除けば log.go のみで構成されており、log.go も 400 数行からなるシンプルな構成となって…

【AWS】DynamoDB local でローカル上にAWS DynamoDB 環境を作る

DynamoDB local AWS は、ローカル環境上で DynamoDB を使用したアプリケーションを開発・テストするための DynamoDB local を提供している。 DynamoDB local は以下の手順でデプロイ可能。 DynamoDB local をローカルにインストールする Apache Maven リポジ…

【Go】GoのSQL driver mock `go-sqlmock` を試す

Go

go-sqlmock とは go-sqlmock は Go の database/sql/driver の実装で、DB ドライバの振る舞いをモック化できるライブラリ。 go-sqlmock を使用することで、DB ドライバを必要するロジックと、実際の DB ドライバ以降の処理を分離してテストできる。 go-sqlmo…

【Go】GoでTCPソケット通信を実装する

Go

ソケット通信 ソケット(BSD)- Wikipedia ソケット通信とは、プログラムから見たときのネットワーク通信を抽象化する概念をさす。通信の終端をソケットと呼ばれるオブジェクトとみなし、ソケットに対して何かしらの入力を行うと、もう一方のソケットから出…

【GraphQL】gqlgenでGraphQL serverをGoで構築する

gqlgen gqlgen は Go の GraphQL ライブラリで、GraphQL をインタフェースとして持つ API サーバを Go で構築できる。 gqlgen はコード上に GraphQL スキーマをガシガシ書いていくライブラリとは異なり、 GraphQL ファイルに記述するスキーマ情報からコード…

CentOS7 dockerコンテナのsystemctlを使用可能にする

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 イメ…

【Go】net/httpのPath Parameterパース

Go

net/http の handleFunc() handle() に登録できるパスは Path Parameter を認識しない。例えば、他の Web フレームワークのように、下記 /products/:id エンドポイント中の :id を変数として取得することができない。 // :idを変数としてパースできない http…

【Go】Goの並列実行時の競合状態検出

Go

-race オプション Go バイナリ実行時、 -race オプションを指定することで競合状態のテストを実施することができる。具体的には go -race run go -race build のようにコード実行時、バイナリビルド時に指定できる。 ただし実行可能な環境は linux/amd64、fr…

【Go】`runtime` パッケージを使用したモニタリング

Go

Golang のメモリ使用量やゴルーチン数など、実行時ランタイムに関係するステータスを観測するには、 runtime パッケージを使用する。 Memory var m runtime.MemStats runtime.ReadMemStats(&m) // ヒープ上に割り当てられたオブジェクト累積メモリ量 fmt.Pri…

【Go】Go の map の非スレッドセーフ性と排他制御

Go

Go の map はスレッドセーフでない Go の map はスレッドセーフ、もといゴルーチンセーフではない。そのため、複数のゴルーチンからの同時アクセスによって整合性が保たれない状態になることがある。 例えば、以下のように map に対して複数のゴルーチンから…

【Go】goimportsでプロジェクト配下のimport文すべてをパッケージ種類別に整形する

Go

TL;DR 下記コマンドで、カレントディレクトリ配下のすべての .go ファイルの import 文を整形してくれる。 $ find . -print | grep --regex '.*\.go' | xargs goimports -w -local "github.com/your/package" goimports の -w オプションでファイルを直接書…

【Go】Context

Go

Go における Context とは 大事なことは全部 Document に書いてある。おしまい。 context - The Go Programming Language ・・・と言ってしまうと元も子もないので、自分なりに整理してみる。 Go の Context を要約すると、 Web アプリケーションで横断的に…

【Go】APIMATIC で Postman Collection を OpenAPI Specification に変換する

Go

PostmanはOpenAPIと互換性があり、OpenAPI Specification(以下OAS)に沿って書かれたAPIドキュメントはPostmanへimportできる。一方で、PostmanからOpenAPIへのexportはサポートされていない。これはPostmanへのFeature requestとしても挙がっており、そこそ…

【Go】Go のSSA表現形式のダンプとその解析

Go

SSA 形式とは 静的単一代入(static simple-assignment)形式と呼ばれ、コンパイラによって生成される中間表現のこと。 SSA は、各変数への代入が一度のみ行われる式によって構成される。 例えば、以下のような式を含むコードを見ると、一行目のコードが不要で…

【Go】Go 1.14 の重複するメソッドを持つインターフェース埋め込みの許可

Go

proposal/6977-overlapping-interfaces.md at master · golang/proposal Go 1.14 より、重複するメソッドを持ったインタフェースの複数埋め込みが可能になった。 インタフェースの埋め込みは、あるインタフェース A を別のインタフェース B 内で宣言すること…

【Go】Go ModulesのGo依存パッケージ管理

Go

Go 1.11 から導入された Go Modules Go 1.11 より、Go 依存パッケージの解決のための Go Modules の概念が導入された。簡単に言うと、Go 公式でサポートされた npm のようなパッケージバージョン管理ツール。 Go プロジェクト配下に見受けられる go.mod go.s…

【Go】Go 1.13 モジュールミラーリングサーバーとチェックサム DB

Go

Go 1.13 より、Go モジュール関連のサポートが強化された。主な機能は以下の2つ。 パッケージをより高速にインストール可能なミラーリングサーバの設定 モジュールの信頼性を向上するチェックサム機構 依存モジュールのミラーリング Go 1.13 では、モジュー…

【Go】Go1.13 errors ライブラリによるerror値の取り扱い

Go

error のラッピング Go 1.13 より、 fmt.Errorf が error インタフェースを実装する値のラッピングをサポートした。この機能により、ある error 値を別の error に内包する事ができる。 func UpdateHoge(hoge: Hoge) error { err := app.UpdateHoge(hoge) if…

【Go】 関数引数 - 値渡しとポインタ渡しの指針

Go

Goでの値渡しとポインタ渡しの指針 Goにはポインタの概念がある。なので、C/C++同様に関数引数型を値型・ポインタ型の2つが指定できる。 func print(s string) { fmt.Println(s) } func printPtr(s *string) { fmt.Println(*s) } 値型で引数を渡した場合、…

【Go】エスケープ処理とその解析

Go

Go の memory allocation Go は C/C++などと異なり、いい感じに変数のメモリ領域を割り当ててくれる。例えば、以下のようなコードでも Golang は動作する。 type Hoge struct {} func NewHoge() *Hoge { h := Hoge{} return &h } NewHoge() 内で生成される構…