golang

Gogolang

【Go】os.OpenFileのフラグについて

Photo by Markus Spiske [https://unsplash.com/@markusspiske?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit] / Unsplash [https://unsplash.com/?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit] ※go version go1.19 darwin/amd64 ファイルを作成するGoの関数os.OpenFileは、3つの引数を取ります。 https://pkg.go.dev/os#OpenFile func OpenFile(name string, flag int, perm FileMode) (*File, error) 第2引数のflag intは以下のような値を入れられます os.OpenFile("filename.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) この縦棒でつない
Ami Yamamoto
Ami Yamamoto
2 min read
OpenAPIGogolang

OpenAPIのサーバーでインテグレーションテストを書く

自社のサービスではOpenAPIを使ってサーバーを書いています。 https://swagger.io/specification/ ほぼ全てのエンドポイントに影響のあるリファクタリングをした時に、動作確認が辛すぎたのでインテグレーションテストを書くことにしました。 できたものは以下になります。 integration-test/integration_test at main · yutakahashi114/integration-test Contribute to yutakahashi114/integration-test development by creating an account on GitHub.GitHubyutakahashi114 [https://github.com/yutakahashi114/integration-test/tree/main/integration_test] 以下、簡単に説明を書いていきます。 サンプルアプリケーション 以下のschemaを元にサーバーを実装します。ユーザーの一覧取得、ID指定の取得、登録、更
Yu Takahashi
Yu Takahashi
10 min read
Gogolanggomock

gomockでスライスのMatcherを作る

gomockでスライスを順不同で一致させるためにMatcherを自作しました。 ※追記 v1.6.0 から InAnyOrder というMatcherが用意されているので、不要になりました。 gomock package - github.com/golang/mock/gomock - pkg.go.devGo [https://pkg.go.dev/github.com/golang/mock/gomock#InAnyOrder]gomock GolangでUTを書く際に使います。 GitHub - golang/mock: GoMock is a mocking framework for the Go programming language.GoMock is a mocking framework for the Go programming language. - GitHub - golang/mock: GoMock is a mocking framework for the Go programming language. GitHubgolang [htt
Yu Takahashi
Yu Takahashi
3 min read
fibonacci numberGogolang

【高速】フィボナッチ数列をビネの公式を使いGoで実装する

結論 O(log (n))となり 1000項目めを求めるには0.000199s 10000項目めは0.000405sで求められました。 完成品 https://github.com/kooooohe/fibonacci/blob/master/main.g [https://github.com/kooooohe/fibonacci/blob/master/main.go]o 通常の再帰を使った簡単な解き方 fib_blog_1.goGitHub Gist: instantly share code, notes, and snippets.Gist 262588213843476 [https://gist.github.com/kooooohe/17818f61bcfe287eb2709466eaccbf7f]func fib(num int) int { if num <= 1 { return num } return fib(num-2) + fib(num-1) } これだとO(2^n)となるためかなり遅い。 ※メモ化については今回は割愛
Kohei Kondo
Kohei Kondo
6 min read
Firestoregolang

Firestoreの書き込み速度の検証

結論 1つのcollectionに大量のdocumentを一括書き込みする際、500件のバッチ書き込みを20並列で実行したところ、以下の時間で完了した。 Firestoreの書き込み制限 Firestoreは書き込み時にいくつかの制限があります。詳しくは https://firebase.google.com/docs/firestore/quotas [https://firebase.google.com/docs/firestore/quotas?hl=ja] にあります。 今回気になったのは4番目の制限です。ある条件下では1つのcollectionに対するdocumentの書き込みは 1秒間に500件が上限、という事です。 ※2022/05/11 追記 制限について、以下のように変更されていました。「できなくは無いがパフォーマンスが悪くなるかも」という閾値のようです。 あるシステムのパフォーマンス調査をしていて、この上限のせいで遅くなってるかも?という話になりました。書き込み速度について調べていると以下の記事を見つけました。 Firestoreに負荷試験(L
Yu Takahashi
Yu Takahashi
8 min read
Firestoregolang

Firestoreの単一documentの読み込み速度の検証

結論 単一documentを連続で読み込むと、約 300/s 程度の速度は出せそう。 読み込み速度 前回は書き込み速度を測定 [https://medium.com/anti-pattern-engineering/firestore%E3%81%AE%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E9%80%9F%E5%BA%A6%E3%81%AE%E6%A4%9C%E8%A8%BC-8e1d4595a701] しましたが、今回は読み込み速度を調べました。 環境 * Google Compute Engine、e2-medium (2 vCPU、4GB メモリ) * Ubuntu 20.04 LTS * Docker 19.03.8 * Golang 1.14.9 * cloud.google.com/go/firestore 1.3.0 検証 単一のdocumentを、1秒毎に指定したrateの数だけ取得し、全ての取得処理が完了するまでの時間を測定します。これを指定した回数(今回は60回)繰り返しました。使用したコードは以下です。(crea
Yu Takahashi
Yu Takahashi
4 min read
golangXorm

GolangのORM、Xormの使い方ざっくりまとめ

最近、GolangのORMとしてXormを使っています。GoのORMといえばGormが主流で、調べてもXormに関する記事が少なかったので、備忘録としてまとめてみました。 自分が業務で使用している機能のみをまとめたので、さらに詳しく知りたい場合は公式ドキュメントを参照ください。 環境 * Go : 1.13.1 * Xorm : 0.7.9 * PostgreSQL : 11.6 使用するテーブル create table users( id BIGSERIAL, first_name VARCHAR(20) NOT NULL, last_name VARCHAR(20) NOT NULL, first_name_kana VARCHAR(20), last_name_kana VARCHAR(20), version BIGINT NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAM
Yu Takahashi
Yu Takahashi
14 min read
golangNuxt.jsMySQL

Go,Nuxt,MySQLの環境をGCPにデプロイしてみた

開発環境から本番環境まで構築し、Google Cloud Platform(GCP)にデプロイしてみました。 環境 * フロントエンド:Nuxt.js (Firebase Hosting) * バックエンド:Go (Cloud Run) * DB:MySQL (Cloud SQL) ()内は使用するGCPのサービスです。 ブラウザからユーザーの氏名を送信するとDBに登録され、画面に全ユーザーの氏名を表示するだけの単純なアプリケーションを作成し、GCPにデプロイしました。最終的なソースは以下です。 GitHub - yutakahashi114/go_nuxt_mysqlContribute to yutakahashi114/go_nuxt_mysql development by creating an account on GitHub.GitHubyutakahashi114 [https://github.com/yutakahashi114/go_nuxt_mysql]ディレクトリ構成はこんな感じです。 . ├── client/ │ └── va
Yu Takahashi
Yu Takahashi
11 min read
Gogolanginterpreter

Top down operator precedence(再帰下降構文解析 Pratt Parser)におけるExpression(式)の解析、AST(抽象構文木)構築 処理を追う

Top down operator precedence(再帰下降構文解析 Pratt Parser)におけるExpression(式)の解析、AST(抽象構文木)構築 処理を追う Goで作る インタプリタ Go言語でつくるインタプリタ | Thorsten Ball, 設樂 洋爾 |本 | 通販 | AmazonAmazonでThorsten Ball, 設樂 洋爾のGo言語でつくるインタプリタ。アマゾンならポイント還元本が多数。Thorsten Ball, 設樂 洋爾作品ほか、お急ぎ便対象商品は当日お届けも可能。またGo言語でつくるインタプリタもアマゾン配送商品なら通常配送無料。AmazonThorsten Ball [https://www.amazon.co.jp/dp/4873118220/ref=cm_sw_r_tw_dp_U_x_E91IDbNW6D0K4] 死ぬほどおすすめなので是非、 Goの基礎とTDDの基礎、簡単なデザインパターンの理解があるとよりよい。むしろそれらを知っている人にかなりおすすめの本である。 この本に出てくる Pratt ParserによるAS
Kohei Kondo
Kohei Kondo
6 min read