10.3 导出mysql表结构生成grpc需要的proto文件工具

使用过grpc的同学都知道,写proto文件比较繁琐,尤其是写message,对应很多字段,为此写了一个简单的从mysql直接读取表结构,生成proto文件的工具。

工具的使用很简单,需要简单的配置,即可运行生成proto文件。

准备

使用前需先安装依赖包go-sql-driver/mysql

  1. $ go get -u github.com/go-sql-driver/mysql

使用说明:

  1. func main() {
  2. //模板文件存放路径
  3. tpl := "d:/gopath/src/mysql-to-proto/template/proto.go.tpl"
  4. //生成proto文件路径
  5. file := "d:/gopath/src/mysql-to-proto/sso.proto"
  6. //数据库名,这里填你自己的数据库名
  7. dbName := "user"
  8. //配置连接数据库信息
  9. db, err := Connect("mysql", "root:123456@tcp(127.0.0.1:3306)/"+dbName+"?charset=utf8mb4&parseTime=true")
  10. //Table names to be excluded
  11. //需要排除表,这里的表不会生成对应的proto文件
  12. exclude := map[string]int{"user_log": 1}
  13. if err != nil {
  14. fmt.Println(err)
  15. }
  16. if IsFile(file) {
  17. fmt.Fprintf(os.Stderr, "Fatal error: ", "proto file already exist")
  18. return
  19. }
  20. t := Table{}
  21. //配置message,Cat
  22. t.Message = map[string]Detail{
  23. "Filter": {
  24. Name: "Filter",
  25. Cat: "custom",
  26. Attr: []AttrDetail{{
  27. TypeName: "uint64", //类型
  28. AttrName: "id",//字段
  29. }},
  30. },
  31. "Request": {
  32. Name: "Request",
  33. Cat: "all",
  34. },
  35. "Response": {
  36. Name: "Response",
  37. Cat: "custom",
  38. Attr: []AttrDetail{
  39. {
  40. TypeName: "uint64",
  41. AttrName: "id",
  42. },
  43. {
  44. TypeName: "bool",
  45. AttrName: "success",
  46. },
  47. },
  48. },
  49. }
  50. //pachage名称
  51. t.PackageModels = "sso"
  52. //service名称
  53. t.ServiceName = "Sso"
  54. //配置services里面的rpc
  55. t.Method = map[string]MethodDetail{
  56. "Get": {Request: t.Message["Filter"], Response: t.Message["Request"]},
  57. "Create": {Request: t.Message["Request"], Response: t.Message["Response"]},
  58. "Update": {Request: t.Message["Request"], Response: t.Message["Response"]},
  59. }
  60. //处理数据库表字段属性
  61. t.TableColumn(db, dbName, exclude)
  62. //生成proto
  63. t.Generate(file, tpl)
  64. }

links

  • 目录
  • 上一节:
  • 下一节: