go項目使用gentool生成model的gen.go問題

Gen Tool 是一個沒有依賴關系的二進制文件,可以用來從數據庫生成結構。

使用方法:

go install gorm.io/gen/tools/gentool@latest

在項目根目錄,執行連接的數據庫中指定某幾張表結構生成數據庫model層

gentool -dsn "root:123456@tcp(localhost:3306)/go-demo-2025?charset=utf8mb4&parseTime=True&loc=Local" -tables "demo,user" -outPath "./gen_model/dao/query"

操作示例:

image-20250102171013926

生成的model文件如下:

image-20250102170943384

現在遇到的問題:使用此方法,如果只指定其中幾個表,那么其它已有的表的gen.go會被覆蓋。

比如,現在我再次使用上面的命令,生成一個新的表:

gentool -dsn "root:123456@tcp(localhost:3306)/go-demo-2025?charset=utf8mb4&parseTime=True&loc=Local" -tables "common_config" -outPath "./gen_model/dao/query"

此時,剛才生成的 gen.go 里面之前生成的表的結構體就沒有了,程序也就跑不起來了:

image-20250102171300798

出現這個情況,可能是這個工具的一個bug。如果改為生成全部表名,也不太方便,因為有時候其他小伙伴改動了某個表,不能隨著當前版本上線,就會很被動。除非每次執行這個命令的時候,都要把之前已經有的數據表名都帶上,會很麻煩。

目前暫未找到合適的解決方案,因此改為下面的方式:

在項目根目錄下面創建 gen.tool 文件,寫入內容如下:

version: "0.1"
database:dsn : "root:123456@tcp(localhost:3306)/go-demo-2025?charset=utf8mb4&parseTime=True&loc=Local"db  : "mysql"tables  : ["demo","user","common_config"]outPath :  "./gen_model/dao/query"# 默認: gen.gooutFile :  ""# generate unit test for query codewithUnitTest  : false# generated model code's package namemodelPkgName  : ""# generate with pointer when field is nullablefieldNullable : false# generate field with gorm index tagfieldWithIndexTag : false# generate field with gorm column type tagfieldWithTypeTag  : false

這樣一來,如果需要生成新的數據表的model,只需要在 tables : 后面追加你想要新增生成的表名,已有的表名不要動!

然后在項目根目錄執行下面的命令就好了:

gentool -c "./gen.tool"

這樣生成的多個數據表的model就沒有問題了。

image-20250102172120450

參考資料:

https://gorm.io/zh_CN/gen/gen_tool.html
https://insight.xiaoduoai.com/intelligent-frontiers/tech/gorm-use-gentool-tool-to-generate-structure-from-database.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64856.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

路由基本配置實驗

路由器用于實現不同類型網絡之間的互聯。 路由器轉發ip分組的基礎是路由表。 路由表中的路由項分為直連路由項、靜態路由項和動態路由項。 通過配置路由器接口的ip地址和子網掩碼自動生成直連路由項。 通過手工配置創建靜態路由項。 熱備份路由器協議允許將由多個路由器組…

產品原型設計

🤣🤣目錄🤣🤣 一、Axure原型設計(Axure RP 9 )1.1 軟件下載安裝1.2 產品原型展示1.3 產品原型下載1.4 視頻課程推薦 二、磨刀原型設計2.1 軟件下載安裝2.2 產品原型展示2.3 產品原型下載2.4 視頻課程推薦 什…

Android反編譯

安卓反編譯要用到三個工具, 工具1:apktool反編譯出來資源文件和源碼 工具2:d2j-dex2jar生成classes_dex2jar.jar文件工具3:jd-gui.exe 打開classes_dex2jar.jar文件查看java代碼一、 反編譯得到資源文件(工具1&#xf…

計算機網絡 (17)點對點協議PPP

一、PPP協議的基本概念 PPP協議最初設計是為兩個對等節點之間的IP流量傳輸提供一種封裝協議,它替代了原來非標準的第二層協議(如SLIP)。在TCP/IP協議集中,PPP是一種用來同步調制連接的數據鏈路層協議(OSI模式中的第二層…

Tailwind CSS 實戰:表單設計與驗證實現

在 Web 開發中,表單就像是一位盡職的接待員,負責收集和驗證用戶的輸入信息。記得在一個企業級項目中,我們通過重新設計表單交互流程,將表單的完成率提升了 42%。今天,我想和大家分享如何使用 Tailwind CSS 打造一個既美觀又實用的表單系統。 設計理念 設計表單就像是在設計一…

信息系統項目管理師——第8章章 項目整合管理 筆記

8 項目整合管理(最后反過來看) 項目整合過程:①制定項目章程(啟動過程)、②制訂項目管理計劃(規劃過程)、③指導和管理項目工作、管理項目知識(執行過程)、④監控項目工…

MLP、CNN、Transformer 的區別解析

親愛的小伙伴們😘,在求知的漫漫旅途中,若你對深度學習的奧秘、Java 與 Python 的奇妙世界,亦或是讀研論文的撰寫攻略有所探尋🧐,那不妨給我一個小小的關注吧🥰。我會精心籌備,在未來…

WebRTC線程的啟動與運行

WebRTC線程運行的基本邏輯: while(true) {…Get(&msg, …);…Dispatch(&msg);… }Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);… }在執行函數內部,就是一個while死循環,只做兩件事,從隊列里Get取…

CSS 學習之 padding 與圖形繪制

padding 屬性和 background-clip 屬性配合,可以在有限的標簽下實現一些 CSS 圖形繪制效果,我這里舉兩個小例子,重在展示可行性。 例 1:不使用偽元素,僅一層標簽實現大隊長的“三道杠”分類圖標效果。此效果在移動端比較常見&…

yolov5核查數據標注漏報和誤報

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、誤報二、漏報三、源碼總結 前言 本文主要用于記錄數據標注和模型預測之間的漏報和誤報思想及其源碼 提示:以下是本篇文章正文內容,…

UnityRenderStreaming使用記錄(四)

測試把UnityRenderStreaming部署在docker,劇透一下,嘎了…… 當然webserver運行的妥妥的 那么打包出的程序運行log Mono path[0] /home/unity/Broadcast/Broadcast_Data/Managed Mono config path /home/unity/Broadcast/Broadcast_Data/MonoBleedingE…

salesforce addMonths()的問題

如果使用 Salesforce 的 addMonths(1) 方法,將 1月30日 或 1月31日 加一個月,都會得到 2月28日(或 2月29日,如果是閏年)。這是因為 Salesforce 的 addMonths 方法在跨月份時會自動調整日期,確保結果是有效日…

3. C語言 數據類型

本章目錄: 前言:C語言中的數據類型分類1. 基本數據類型1.1 整數類型1.2 浮點類型1.3 字符型常量1.4 字符串常量 2. 枚舉類型3. void 類型void類型的使用示例: 4. 類型轉換4.1 隱式類型轉換4.2 顯式類型轉換類型轉換的注意事項 5. 小結 前言&a…

JUnit注解,枚舉

一、JUnit注解(Annotations) JUnit 是 Java 中用于編寫和運行單元測試的框架。JUnit 提供了許多注解,用于控制測試的執行順序、測試生命周期、斷言結果等。以下是一些常用的 JUnit 注解及其作用: 1. Test 用于標記一個方法是測…

富芮坤FR800X系列之軟件開發工具鏈(如IDE、編譯器、調試器等)

文章目錄 一、IDE(集成開發環境)二、編譯器三、調試器四、其他輔助工具五、小結 FR800x系列作為一款低功耗藍牙芯片,其軟件開發工具鏈對于開發者來說至關重要。以下是對FR800x軟件開發工具鏈的詳細介紹,包括IDE(集成開…

數據賦能電商:API如何助力品牌成長

在數字時代,數據已成為電商品牌發展的核心驅動力。API(應用程序編程接口)作為數據交互的橋梁,不僅促進了數據的高效流通,更為電商品牌帶來了前所未有的增長機遇。本文將深入探討API如何助力電商品牌實現數據賦能&#…

「Java 數據結構全面解讀」:從基礎到進階的實戰指南

「Java 數據結構全面解讀」:從基礎到進階的實戰指南 數據結構是程序設計中的核心部分,用于組織和管理數據。Java 提供了豐富的集合框架和工具類,涵蓋了常見的數據結構如數組、鏈表、棧、隊列和樹等。本文將系統性地介紹這些數據結構的概念、…

LeetCode - 初級算法 數組(旋轉數組)

旋轉數組 這篇文章討論如何通過編程實現數組元素的旋轉操作。 免責聲明:本文來源于個人知識與公開資料,僅用于學術交流。 描述 給定一個整數數組 nums,將數組中的元素向右輪轉 k 個位置,其中 k 是非負數。 示例: 輸入: nums = [1,2,3,

c#集合詳解-Dictionary、List、Queue、Stack等

目錄 一,非泛型集合 1,ArrayList (1)創建和初始化ArrayList() (2)常用方法 ①Add(value) ②AddRange(value) ③Insert(index,value) ④Remove(value) ⑤RemoveAt(index) ⑥clear() ⑦Contains(v…

記一次網閘部署經歷

1.在成功獲取某大廠偉思網閘設備,并與客戶就現有網絡架構(包括防火墻與交換機)進行了詳盡的溝通與評估后,我們團隊精心構思并提出了一個創新的實施方案——采用透明網橋模式。這一模式以其獨特的優勢,即無需對客戶現有…