手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Go

将表结构转成gorm struct

 在网上找了半天,找到两个项目与此相关

1、chrome的插件:https://github.com/mikemintang/sql2struct ,
2、go 程序:https://github.com/Shelnutt2/db2struct
 
1、chrome插件的Readme中所引用的crx文件,可能由于cdn的问题,无法下载,其实git里就有一个crx文件,点击查看详情,然后下载到本地。启用chrome extension的开发者模式,加载进来就OK了,使用方法很简单,直接将table 的ddl内容复制 到输入框里,就能够生成相应的struct。当然表前缀的问题是没法解决了,但至少你不用手写了。不是吗?
详细 教程看这个:http://idoubi.cc/2017/11/06/SQL2Struct%EF%BC%9A%E4%B8%80%E6%AC%BE%E6%A0%B9%E6%8D%AEsql%E8%AF%AD%E5%8F%A5%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90golang%E7%BB%93%E6%9E%84%E4%BD%93%E7%9A%84chrome%E6%8F%92%E4%BB%B6/,主要是这个有图,github里面没图
 
2、用官方Readme中的说法:Structures are created by querying the INFORMATION_SCHEMA.Columns table and then formatting the types, column names, and metadata to create a usable go compatible struct type.
用法其实也很简单:【Example below uses guregu's null package, but without the option it procuded the sql.NullInt64 and so on.
XML/HTML代码
  1. db2struct --host localhost -d example.com -t users --package example --struct user -p --user exampleUser --guregu --gorm  
 
有这两个工具,生成struct就方便了。如果再配合这个:https://github.com/MohamedBassem/gormgen,那就更方便了(虽然也不一定会这样使用)
 

Tags: gorm

go mod 快速使用

 我自己的用法,不知道别人是不是这样的

感觉用了go mod ,gopath可以不用设置了。
老方法:src/pkg/bin,建三个目录,然后GOPATH设置在这个外层(因为感觉go get的时候好象还是会往pkg里扔,只是pkg多了一个目录叫:mod)
在src下建一个目录,比如:blog,在blog目录里go mod init
然后就是正常的用法了。比如你要引入啥,go get 就行 了。如果是你手动写的一个路径。你引入后,还得执行go mod tidy 。
只是这样我老是不能正常。所以我每次都选择 go mod tidy && go mod vendor,会在blog里生成Vendor的目录。然后就一切OK了。
 
go mod对我来说最方便的应该就是Replace了。比如我准备要放个代码上github(或者其他),但中途可能会改,总不可能一直先commit,再go get 吧?
所以replace github.com/xxx/xxx 0.0.1 => /Users/gouki/go/xxx/xxx ,切换到本地。。那边代码有更新。我这边go mod tidy && go mod vendor就完事儿了。
 
总感觉这样目前还不是最佳的。但先弄一下吧。至少我目前够用了

go install go-sqlite3时,报错:#include nested too deeply

 安装sqlite3的时候,报:

XML/HTML代码
  1. /usr/local/include/stdint.h:2:10: error: #include nested too deeply  
  2. #include <stddef.h>  
  3.          ^  
  4. /usr/local/include/stdint.h:59:11: error: #include nested too deeply  
  5. # include <stdint.h>  
  6.           ^  
  7. /usr/local/include/stdint.h:72:11: error: #include nested too deeply  
  8. # include <sys/types.h>  
  9.           ^  
  10. /usr/local/include/stdint.h:76:10: error: #include nested too deeply  
  11. #include <limits.h>  
  12.          ^  
  13. /usr/local/include/stdint.h:82:11: error: #include nested too deeply  
  14. # include <inttypes.h>  
  15.           ^  
  16. 5 errors generated.  
开始的时候以为cgoenabled=0结果 。go env的时候发现有打开。
又以为可能是xcode-select 没装,于是执行xcode-select --install 进行工具安装 。症状依然。最后找到这里:https://github.com/SOHU-Co/kafka-node/issues/881,看来有不少人有这个问题。只是有人说,brew doctor一下就行了。光执行,并没啥用
最后有一个人提出:
XML/HTML代码
  1. mkdir /tmp/includes  
  2. brew doctor 2>&1 | grep "/usr/local/include" | awk '{$1=$1;print}' | xargs -I _ mv _ /tmp/includes  
一下子全解决了!
 
 

gorm的一些Callback

 要知道gorm的callback看代码就可以知道了:

XML/HTML代码
  1. func init() {  
  2.     DefaultCallback.Create().Register("gorm:begin_transaction", beginTransactionCallback)  
  3.     DefaultCallback.Create().Register("gorm:before_create", beforeCreateCallback)  
  4.     DefaultCallback.Create().Register("gorm:save_before_associations", saveBeforeAssociationsCallback)  
  5.     DefaultCallback.Create().Register("gorm:update_time_stamp", updateTimeStampForCreateCallback)  
  6.     DefaultCallback.Create().Register("gorm:create", createCallback)  
  7.     DefaultCallback.Create().Register("gorm:force_reload_after_create", forceReloadAfterCreateCallback)  
  8.     DefaultCallback.Create().Register("gorm:save_after_associations", saveAfterAssociationsCallback)  
  9.     DefaultCallback.Create().Register("gorm:after_create", afterCreateCallback)  
  10.     DefaultCallback.Create().Register("gorm:commit_or_rollback_transaction", commitOrRollbackTransactionCallback)  
  11. }  
类似:beginTransactionCallback 的一共有9个,事务和创建等等。一般事务的话会用的比较多一点,还有就是针对时间的beforecreate等
 
当然更多的还得看官方的文档:http://gorm.io/zh_CN/docs/hooks.html。默认会执行什么,应该执行什么,这里都有写,可以看一下下的
 
 
 

mac 修改 ulimit

下述是指在mac下面。linux 8 是这样的

 ulimit -n 运行一下,看看是多少,如果是65536就算了。不是的话,如果有需要就自己改一下。常见的ulimit -n 65536,直接运行就行了,但这只是临时的

 
其实以下内容是COPY来的。我没有细究。
 
原文来自:http://ronglei0324.blog.163.com/blog/static/676332232013122112049188/
  1. $ sysctl kern.maxfiles  
  2. kern.maxfiles: 12288  
  3. $ sysctl kern.maxfilesperproc  
  4. kern.maxfilesperproc: 10240  
  5. $ sudo sysctl -w kern.maxfiles=1048600  
  6. kern.maxfiles: 12288 -> 1048600  
  7. $ sudo sysctl -w kern.maxfilesperproc=1048576  
  8. kern.maxfilesperproc: 10240 -> 1048576  
  9. $ ulimit -n  
  10. 256  
  11. $ ulimit -n 1048576  
  12. $ ulimit -n  
  13. 1048576  
Records:3812345678