golang
最近、仕事でCookie使ったGo言語コードを見かけた際に gorilla/securecookie が使われていたので、このライブラリに関してを調べてみました。その時に調べた内容を書きたいと思います。 gin や echo といったGo言語でよく使われているWebフレームワークの内…
以下の記事ではGo言語のライブラリ slack-go を使ってSlackのリクエスト署名検証を行うサンプルアプリを作成しましたが、今回はその検証処理の詳細を確認していきたいと思います。 simple-minds-think-alike.moritamorie.com なお、Slackのリクエスト署名に…
Slack連携アプリのセキュリティを高めたくて、リクエストの署名検証に関して調べてみました。また、調べた内容を元にサンプルアプリを作ってみました。 モチベーション 全体像 Slackでのアプリ設定 ショートカット設定 スコープ追加 ワークスペースとチャネ…
以下の記事でgo-oidcというサードパーティライブラリを使用してOpenID ConnectでAuth0連携アプリケーションを構築する記事を書きましたが、JWT(JSON Web Token)署名に非対称暗号アルゴリズムを使っているRS256の対応方法だけしか書いていませんでした。今回…
仕事でOpenID Connect(以降OIDC)連携の実装した際、勉強のためにAuth0連携のサンプルアプリを作ってみたので、その一連の手順をまとめてみたいと思います。 手順は基本的にAuth0のチュートリアル通りなのですが、補足文章をつけて書いてみたいと思います。 …
PDFファイルにデジタル署名ができるGo言語のライブラリ( UniPDF )を使ってみました。 今年(2021年)4月頃に従量課金プランにフリー層ができたとブログ記事に掲載があり、月100件は無料で使える状態になったようです。 以下の公式のブログ記事を参考にサンプル…
「プログラミング言語Go」オンライン読書会で学んだ第9章「共有された変数による平行性」に関して共有したいと思います。 並行的に安全(concurrency-safe)とは 実装 並行的に安全ではない理由 対処方法 変数を単一のゴルーチンに閉じ込める 相互排他(mutual …
apitestとは GoのAPIテスティング用のライブラリの1つです。 github.com apitestは シンプルな記法 GraphQLのテストも書ける 外部APIコールをモックできる ドキュメントがしっかりしている という特徴があり、個人的に好きでAPIのテスト書くのに使っています…
Go言語で作ったアプリケーションのGithubリポジトリでGithub actionsワークフローを設定し、 codecov にカバレッジを送る設定方法を紹介したいと思います。 codecov は、テストのコードカバレッジを取得してくれるツールです。テストスイートを実行した時に…
go-sqlmock を使ったことがなかったので、Gormを使ってデータベースにアクセスするアプリケーションをテストするコードを書いてみました。 go-sqlmock の READMEに sqlmock is a mock library implementing sql/driver. Which has one and only purpose - to…
Golangのプログラムのテストを書く際、 testingパッケージ の関数 Error / Errorf と Fatal / Fatalf の違いが分からなくなる時があるので整理してみました。 まとめの表 Error / Errorf / Fatal / Fatalf は簡易関数で、以下の ログ出力の処理(Log、Logf) F…
本番環境にデプロイしたビルド済のバイナリのバージョンを確認したいことがあります。 また、開発環境で使うちょっとしたツールを作る場合、ほとんどの場合いくつかのコマンドラインオプションを受け取れるようにしたいです。 これらのバージョン表示、コマ…
pdfcpu という golang で書かれたコマンドラインツールを使って、複数のPDFファイルを1つにまとめるという作業をたまに行っているのですが、ふとOSSだしPRを送ってみようかと思い立ったのでやってみました。 github.com Pull Requestの内容 まずは簡単なPull…
cobra の中のフラグの実装はspf13/pflagという cobra と同じ方が作られている別のライブラリが使われています。このライブラリは標準の flag パッケージと似ているので、使ったことある方は使用感に違和感は感じないかと思います。 以下の記事で作った簡単な…
Go言語でコマンドラインツール(CLI)を作る際cobraというライブラリを使うと、ヘルプや設定ファイルの読み込みなど一般的な機能を持ったCLIを簡単に作れるようになっていて便利です。 kubernetesのkubectl docker/cli Github CLI hugo といった様々なツールが…
先日、初めてGo Language Specification 輪読会 (#14) 2021/1/27開催に参加した感想と、型アサーションとスライス式に関して学んだことを書いてみたいと思います。 Go Language Specification 輪読会に参加した感想 The Go Programming Language Specificati…
前回のスライスと配列の特徴、違いについての記事に引き続き、今回はスライスの様々な操作の挙動に関して整理していきます。 simple-minds-think-alike.hatenablog.com 新しいメモリ領域の確保は比較的重い処理なので、できるだけ行われないように工夫してプ…
スライスはGo言語の中でもっとも利用されるデータ構造だと思いますが、挙動が複雑で仕様を把握するのが難しく、利用頻度が高いがゆえによく分からず使っているとパフォーマンスの低下を招き易い機能と言えるかと思います。 スライス及び配列の特徴を把握する…
Go言語で正規表現のコードを書く際に、どういう表現ができるんだっけ?と思う時がありますよね。 Ruby(Ruby on Rails)の正規表現のコードを書く際はRubularというツールを使う方は多いと思いますが、Golangでも同じようなRegoという正規表現チェックツールが…
go言語で実装したWebアプリケーションサイトのDBマイグレーションツールとしてgolang-migrate/migrateを使っていて、そこそこ便利につかえているので紹介してみたいと思います。 migrateを使うメリット migrateを使うことにした背景 環境/前提 インストール …
以前Goで開発をしている時に、インタフェースと構造体の理解が曖昧でハマることがあったので、理解を深めるためのサンプルコードを書いてみました。 要件 サンプルコードは、掃除機の共通のインタフェース(操作) ①電源を入れる(TrunOn) ②電源を切る(TrunOf…
前々回、前回の記事でHerokuでGolangプロジェクトを動かすのと、Heroku Container RegistoryにDockerイメージをPushし、web dynoにリリースするというのをやりました。 今回は、Github Actionsを使ってHerokuに自動デプロイしてみます。 simple-minds-think-…
Golangでスクレイピングする時はとりあえずgoquery使っておけば良さそうーと思って、あまり別のライブラリを使おうとしてこなかった。けれど、高機能なスクレイピング用ライブラリでCollyというのがあって、スクレイピング処理の中でgoqueryのHTMLElementを…
前回の記事で、Herokuで動くようになったGolangプロジェクト(フレームワークはEcho)を今回Dockerコンテナで動くようにしてみました。 simple-minds-think-alike.hatenablog.com 前提 Dockerfileの作成 実行バイナリファイルを作るイメージ 変数ENV_CGO_ENABL…
Go modulesが入って、GolangのHerokuへのデプロイがだいぶ簡単になっていたので、備忘録のためプロジェクトの作成から確認までの手順を書いておきます。 環境 前提 ローカルで動くまで プロジェクトディレクトリ作成 簡単なリクエストを受け付けるGolangのコ…
最近仕事で使い始めた Golang ( net/http 標準ライブラリ)とWebフレームワーク Gin のリクエストハンドリングについてどのような仕組みで行っているのかをまとめてみます。 前提 Golang マルチプレクサとは goデフォルトのマルチプレクサ goカスタムのマルチ…