MySQLの場合、--safe-updatesオプションを利用することでこういった不慮のUPDATE/DELETEを防げるようです
タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。
自分の本業は10年物のMVCプロジェクトなのでClean Architecture忘れがちです。 なので、慣れてるGoでパッとClean Architectureの復習を行ってみました(2年前にPythonでやった事はあるんだけど・・・)。 このスクラップでは単語とか作りどころとかを整理するのですが、また後でRustで作ってそっちは前例がほぼないので記事にします。 Go + Clean Architectureは結構記事あるんですが、Swaggerつけたしたのと自分なりに納得いくディレクトリ構成にオリジナリティを出しました。ちなみにgo-swagger使うと本当は凄く楽に作れるのですが(ついでにフロントはopenapi-generator)、今回はClean Architectureを理解するのが主目的なので、サーバーは手書きでopenapiのyamlも1から自作しました。 ↑ postに
7月に株式会社カミナシに入社したくらさわです! カミナシでは、現場DXプラットフォーム「カミナシ」の開発をしています! よろしくお願いします!!! きっかけ 検証バージョン 結論 コード書いて確認してみた ドキュメント読んでみた コード読んでみた go-sql-driver/mysql のコード GORM のコード まとめ きっかけ 現在、カミナシの開発では、サーバサイドの言語は Go 、ORマッパーとして 「GORM」 を使い、DB には Amazon Aurora MySQL を使っています。 ある日、開発中に GORM が吐いてくれるログで query を調べていると、アプリケーションの実行中は結果が取れていないのに、その query をコピーして、手動で MySQL に投げると結果が取得できるということがありました。 パッとわからなかったので、それについて調べたことを記事にしてみま
これはGo3 Advent Calendar 2019の2日目の記事です。 昨日はimotyさんの「とにかく要素一覧の取得が高速な、要素が削除可能であるリストを実装する」でした。 昨年後半から仕事で Go を書く機会が増え、使用している DB ライブラリ GORM を使う事が多かったので いちユーザーの視点から今年の動きについてつらつらと書きたいと思う。 GORM v1.9.2 以前 GORM は Go の ORM のひとつで、使い方などについては日本語での紹介記事も複数あるため改めて書く事もないが、 リポジトリスター数の多さなど知名度の面では Go ORM の中では上位に入るのではないだろうか。 …が、自分が仕事で使い始めてからは PR の消化も滞り気味で、2018年11月にリリースされた v1.9.2 を最後に新しいバージョンも出ず、 少し触っているだけでバグではないかという挙動もいく
この記事はテックタッチアドベントカレンダー3日目の記事です。2日目は国定による「TypeScript 4.1 に更新しました」でした。 SREチームの taisa です。「愛の不時着」をきっかけに韓国ドラマにハマっています。最近は「スタートアップ」と「梨泰院クラス」をみています。Netflix な毎日です。 今回は「GORM v2 Major Features 編」ということで、今年8月にリリースされた GORM v2 の新機能をリリースノートに従って簡単に動かしてみたので紹介します。テックタッチのバックエンドは Go で実装していて ORM には GORM v1 を利用しています。v2 の Major Features と Breaking Changes をチェックして v2 へのアップデートも検討したいところです。 公式ドキュメント GORM v2 リリースノート v1 のファイル構
GORM 2.0 is a rewrite from scratch, it introduces some incompatible-API change and many improvements Highlights Performance Improvements Modularity Context, Batch Insert, Prepared Statement Mode, DryRun Mode, Join Preload, Find To Map, Create From Map, FindInBatches supports Nested Transaction/SavePoint/RollbackTo SavePoint supports SQL Builder, Named Argument, Group Conditions, Upsert, Locking, O
目次 Clean Architectureとは Clean Architectureというと、以下の図が大変有名です。 Clean Architectureの目的は関心の分離で、 これを達成するために意識すべきことが各レイヤーの依存性です。 関心の分離によりコードの可読性が向上したり、変化に強い設計になります。 この辺のメリットやClean Architectureの詳細に関しては参考記事に載っていますのでそちら参照ください。 上記の図では、円の外側から内側に向かって矢印が向けられていますが、これが依存の向きで、 外側から内側への依存は可能ですが、内側から外側は不可能です。 言い方を変えると、内側で宣言したモノを外側から呼ぶことはできますが、外側で宣言したモノを内側から呼ぶことはできないという話です。 この記事では依存の向きに注意しながら コードを紹介していきます。 各機能に関して 各機能
元号ももう令和に代わり粛々とGoの勉強を続けているのですが、今回はGOとGraphQLを使って CRUDできるAPIを作ってみました。 gin-gorm-gqlgen-sample そもそもGOに慣れていなかったり各種ライブラリの情報が少なかったりで結構時間かかりましたが、 なんとかそれらしきものができたのでリポジトリを共有しておきます。 前回の記事でも、最初にながれを説明して詰まったところを最後にまとめて終わりという形だったので 今回も同じ形でいければななんて思っています。 サンプルを作るにあたり色々と情報を漁ったのですがGormとgqlgenを組み合わせの情報が少なく苦労したので そこら…
この記事はテックタッチアドベントカレンダー13日目の記事です。 SREチームの taisa です。韓国ドラマにハマっていましたが、沢山みたので結構満足しました。最近は「よくおごってくれる綺麗なお姉さん」をみました。 今回は、前回の「GORM v2 触ってみた Major Features 編」で触れられなかった Prometheus 連携機能について書きます。 SRE 本を読んでいると Borgmon という Google 内部で利用されているモニタリングツールがよく出てきます。気になるものの Borgmon 自体は使えませんが、Prometheus は Borgmon をルーツとして元グーグルのエンジニアが作った OSS で、Borgmon に似た機能を持っているようです。触ってみたい気持ちが高まります。 ドキュメント Prometheus をセットアップする GORM v2 の Pro
Docker環境を構築し、Golang Echo v5-alphaでJWT Token認証 ホットリロード、リモートデバッグ、マイグレーション、GormのORMが入ったフルスタックフレームワークチックな環境の構築をしたGoDockerGORMGoModulegolang-migration docker環境を構築し、 Go言語のフレームワークのechoフレームワークに、 JWT Token認証 ホットリロード、リモートデバッグ、マイグレーション、 GormのORMと色々入ったフルスタックフレームワークチックな環境の構築をしてみました。 今回の記事は、この記事の作成の為に公開しました、gihubのソースの動かし方の説明になります。 ※githubのソースは記事の一番下になります。 記事の評判がよければ、ライブラリーの比較や説明、ソースコードの説明等記事を更新するかもしれません。 ※ vali
この記事はテックタッチアドベントカレンダー 17 日目の記事です。 SRE チームの taisa です。韓国ドラマの「スタートアップ」が最近 Netflix で最終話までみれるようになりましたね。最近はぼちぼち来年の抱負を考えるようになりました。懲りずにまた英語をやろうかと考え中です。 今回は「GORM v2 触ってみた Major Features 編」の続きで「Breaking Changes 編」です。 GORM v2 リリースノート Breaking Changes Tags Soft Delete BlockGlobalUpdate ErrRecordNotFound Updating with struct Migrator Count Transactions まとめ GORM v2 リリースノート 1 系から移行する場合は少なくともこちらにある内容の対応をする必要があります
はじめに Go言語で開発したWebアプリをローカルサーバーでデバッグする(VSCode)ことができましたので、 Go/Gin/Vue.js/MySQLでSPA(単一のWebページでアプリケーションを構成)を開発してみます。 ・フロントエンドはイマドキのWebアプリ風にSPAで開発したいためVue.jsを使用します。 JSフレームワークはAngular・React・Vue.jsなどがありますが、各々を比較検討し、 コンポーネント内記述がHTMLとJSとで独立しているのでソースをより綺麗に書けて、 双方向データバインディング(データと描画を同期する仕組み)と、 スモールスタートが可能なVue.jsを選定しました。 ・バックエンドはイケてる企業で流行りのGo/Ginを使用します。 Go言語のWAFは潤沢にありますが、各々を比較検討し、 比較的パフォーマンスと生産性が高く、日本語ドキュメントもある
こんにちは。バクラク請求書チームでエンジニアをしている赤羽です。 昨年の12月のLayerXにJOINしたので、今月でちょうど1年経ちました。 この記事は LayerXテックアドカレ2023 25日目の記事です。 前回はsh_komine が「相互理解の重要性と、促進するためのワークショップのご紹介」を書いてくれました。次回は@yoheiよりポストされる予定なのでご期待ください。 GORMとは GORMはGo言語の人気のあるORM(Object Relational Mapping)ライブラリです。 データベース(テーブル)とGoの構造体のマッピングを簡単に行うことができます。シンプルな構文、多様なデータベースサポート、マイグレーション、トランザクション管理など、豊富な機能が提供されています。 柔軟なクエリビルダーも提供され、開発者に使いやすいORMライブラリとなっています GORMに
❯ tree -L 1 --dirsfirst . ├── dialects ├── License ├── README.md ├── association.go ├── association_test.go ├── callback.go ├── callback_create.go ├── callback_delete.go ├── callback_query.go ├── callback_query_preload.go ├── callback_row_query.go ├── callback_save.go ├── callback_system_test.go ├── callback_update.go ├── callbacks_test.go ├── create_test.go ├── customize_column_test.go ├── delete
テックタッチアドベントカレンダー20日目担当する@smith-30です。 19日目は@kosy による Vueで日本全国ダーツの旅的なものを作ってみた でした。遊んでみたら僕は福島に行けと言われました。 弊社はまだエンジニア/デザイナが少数なので1人2回記事を書くスケジュールでしたが、毎日誰かの投稿がみれて楽しかったです。 このページについて gorm のコネクションプール周りの挙動を理解するためにパフォーマンス等色々実験したときのメモです(2019-12) なんとなく設定して使っていましたが、ちゃんと検証はしたことがなかったので動かしてみました。 といっても gorm は、 database/sql のラッパーなので実質その挙動の調査です。 内容 環境 mysql mysql> show variables like 'max_connections'; +---------------
package external import ( "github.com/maruware/gqlgen-todos/entity" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func ConnectDatabase() (*gorm.DB, error) { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { return nil, err } err = db.AutoMigrate(&entity.User{}, &entity.Todo{}) if err != nil { return nil, err } return db, nil }
package user import ( "github.com/jinzhu/gorm" ) type User struct { ID string `gorm:"primary_key"` Name string } type Repository struct { *gorm.DB } func (p *Repository) Create(id string, name string) error { person := &User{ ID: id, Name: name, } return p.DB.Create(person).Error } func (p *Repository) Get(id string) (*User, error) { var person User err := p.DB.Where("id = ?", id).Find(&person).Er
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く