Go
Go のコマンドには様々なオプションが存在します。 今回は、現時点でつけておいて損がないのではないかと思ってるフラグを紹介させてもらいます。 まとめ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -trimpath -o ./api2 ./app go te…
go で初期化処理を書くために init 関数を使っている方もいるかと思うのですが、呼び出される順番を 1 回正しく整理しておきたいと思います。 [目次] まとめ 1パッケージのみ 1ファイルのみ 複数ファイル まとめ 複数パッケージ まとめ(再掲) グローバル変…
この記事は Go 言語 Advent Calendar 2023 シリーズ 2 の 10 日目の記事です。 openapi から Go のコードを生成するツールとしては、oapi-codegen, ogen などが勢いありますが、今回は openapi generator にまつわる話をします。 このライブラリで生成された…
Golang で Dockerfile を Multi-stage builds で作成した際に、 docker run すると『version `GLIBC_2.34' not found』のエラーが出ることがありました。 今回はその原因と解決策について共有します。 事象 環境 Host mac m2 Docker v24.0.7 Dockerfile buil…
まとめ GitLab の Go module には、リポジトリの終わりに .git をつける GitHub の Go module には .git をつけない
典型的な『worker pool』パターンを実装するのに便利な semaphore の紹介です。 チャネルを使った流量制御のパターンと比べ、デフォルトで ctx のキャンセルに対応していることを実動で確認します。 [目次] channel パターン sync/semaphore パターン おまけ…
HTTP サーバーってどんな仕組みで動いてるのかずっと気になっていたのですが、 『ふつうのLinuxプログラミング』に説明 + c での実装があったため、その理解を元に適当に Go でやってみました。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるg…
パイプの中身をシステムコールレベルで理解・実装する 『ふつうのLinuxプログラミング』を読んで勉強させてもらったメモになります。 コードは載ってなかったため自分で実装してみました。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べる…
k8s の cpu limit をつけることで、実行時間が見事に遅くなってしまったのでその成果発表です。 (参考記事) [目次] 背景 調べたこと k8s が CPU を割り当てる方法 マルチコアの場合 Go のコンテナで動かしてるんですが
go での panic recover 基礎 gin のケース goroutine 実行の考慮 おわりに
特に深いことは語れないのですが、安全な SQL の呼び出し方を読んで気づきがあったためメモしておきます。 まとめ SQL の構成要素(以下を意識して区別する!) キーワード(予約語): SELECT, WHERE, AND, ... 演算子など: =, >=, ... 識別子: テーブル名、…
最近は N 年間放置していた徳丸本を真面目に読み進めており、今回はその §3.3 CORS についてのアウトプットになります。 ぜひ皆さんも一緒に読み進めていきましょう。 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[固定版] 脆弱性が生まれる原理…
標準パッケージ sql は一般的な SQL のインタフェースを提供しています。 使用する際は各ベンダーの用意するドライバーと共に使うことが必要で、諸々の使い方は go の wiki にも書いてあります。 今回はこの sql パッケージで注意が必要な点(と自分が今認識…
json パッケージが最終的に Tag を解釈しているところまでに、以下のような関数呼び出しが発生します。 Marshal > marshal > reflectValue > valueEncoder > typeEncoder > newTypeEncoder > newStructEncoder > cachedTypeFields > typeFields
go 1.7 で追加された Context には『key, value 形式による情報の伝搬』と『Goroutine の適切なキャンセル』の主に2つの役割があります。 後者の『Goroutine の適切なキャンセル』が便利で、公式ブログでも並行処理パターンとして紹介されているように、各ラ…
minio の詳しい説明は公式に頼りたいところですが、minio とは s3 と互換性のある object storage です(object storage とは)。 今回はこの『s3 と互換性のある』って部分を少し深ぼって、golang の sdk から s3 にアクセスする既存コードを使い、ローカル…
Go は Makefile との親和性が高いみたく、ちょっと使ってみたので今回はその個人的な紹介です。 どの Go の本にも書いてあるので、gopher なら何かしらみんな使ってるものと思ってます。 目次 Makefile って何よ by Chat-GPT by 詳細 Go 言語 web アプリケー…
TOC なぜ Go 言語で CLI ツールを作るのか 作り方 サブコマンドを取らない場合 サブコマンドを取る場合 cobra の使用例 urfave/cli 実際にやってみる setup 初期化 サブコマンドの追加 注意点 なぜ Go 言語で CLI ツールを作るのか 以下の 4 点がぱっと思い…
前提 一度は情報を読み込めている tag プッシュしたものを反映させたい 方法 push したタグに対応する ↓ のリンクを開く https://pkg.go.dev/github.com/{user_name}/{repository_name}@{tag_version} {} には以下の情報を入れてください。 user_name: 個人…
これは自戒を込めてになるんですが、もっとよく標準パッケージを使おう(知ろう)という話です。 なければ探す。 例をいくつかあげてみます。 URL Encode 基本的な言語には、URL エンコード・デコードをするための標準ライブラリがあるはずです。 Bad val en…
今回は、push 通知の代表格である Firebase Cloud Messaging (FCM) を使って、プッシュ通知を行いました。 通知させる端末は iOS, Android を対象に、通知を行うサーバーは Go の admin-SDK を使って作成しました。 この記事を見たらなるべく迷わずに通知ま…
症状 golang で http リクエストを投げてスクレイピングしたい時、特定のサイトでは全く情報が取れない時がありました。 解決策 Header 情報に Agent の情報を入れてあげると解決しました。 req.Header.Add("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone …
[golang] ginを用いたルーティング機能 ginを用いてサーバーを構築しチャットアプリを作成したので、その際に気をつけたルーティングやその書き方についてまとめておく やったこと Ginを用いたサーバー配信 Ginが静的サイトの配信とAPIサーバーとしての役割…
WaitGroupについて syncパッケージ syncパッケージには低水準のメモリアクセス同期に便利な並行処理のプリミティブが入っている WaitGroup ひとまとまりの平行処理があったとき、その結果を気にしない、もしくは他に結果を集約する手段があるときに、それら…
Goにおける並行処理入門 この記事では、Goにおける並行処理を実現するための準備。 次回以降、実際にコードを書いて確かめていきたい。 WHY 並行処理 ムーアの法則が破綻し限界を迎えるにつれ、単純に従来のやり方ではスピードを上げ続けることができなくな…
SQLBoilerで null.String を扱う SQLBoilerを使っていて null.String 型の定義のフィールドにアクセスするのに苦労したのでメモしておく SQLBoilerとは SQLBoilerはデータベースファーストのORマッパーである あらかじめDBを生成しておくと、その定義に基づ…
標準の time パッケージを使うと、月の部分が英語表記になってうまくいかない func main() { t := time.Now() fmt.Println(t) // 2021-05-27 01:39:53.69375 +0900 JST m=+0.000173353 fmt.Println(t.Month()) // May fmt.Println(t.Day()) // 27 } Jan, Feb…
日経新聞をGoに代わりに読んでもらいたい! やりたいこと 日経新聞の記事のタイトルを収集する タイトルから単語抽出などを行い、トレンドを掴む 今回は 1 の途中くらいまで書こうと思います。(2 についてはいつかやります!) 企画の背景 社会人が始まって…