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

将表结构转成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  
一下子全解决了!
 
 

Q: Problems upgrading to macOS Mojave on MacBook Pro 2018

 有人说重置SMC可以解决这个问题,然而我没有试。最后看LOG,居然一堆连网错误,难道要校验checksum?

再到苹果官网上看到这个:
https://discussions.apple.com/message/33927150#33927150
  1. Hi,  
  2.   
  3. Had the same problem, but for me it worked by  
  4.   
  5. removing all DNS search domains  
  6. untick the automatic proxy configuration  
  7.    
  8.   
  9. for the Wifi adapter.  
  10.   
  11. good luck.  
果然尝试。果然有效(最终发现还是有问题,终于。。重置NVRAM,安装完成)
 
网址:https://appletoolbox.com/2017/12/macos-could-not-be-installed-how-to-fix/
  1. 节选  
  2. Next, let’s try out the basic NVRAM reset (or PRAM for older Macs) on your computer.  
  3. Follow these steps if you are not sure about how to do the NVRAM reset  
  4. Shut down your Mac  
  5. Turn it on and immediately press and hold these four keys together: Option, Command, P, and R macOS Could Not Be Installed, How-To Fix  
  6. Release the keys after about 20 seconds, during which your Mac might appear to restart  
  7. Open System Preferences and check (and adjust, if necessary) any settings that reset, like volume, display resolution, startup disk selection, or time zone  
  8. 说白了,就是启动的时候 cmd+option+P+R,等20秒。放开,再重启
 
 一切都清静 了。只是感觉这一版,没什么变动的

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。默认会执行什么,应该执行什么,这里都有写,可以看一下下的