mysql - 如何在 Go 中为 MySQL 构建 RESTful API?
问题描述
我的任务是将 JSON 有效负载插入表中。
(固定)SQL 表结构定义如下:
$ echo "describe ut_invitation_api_data\G;" | mysql -h auroradb.dev.unee-t.com -P 3306 -u bugzilla --password=$(aws --profile uneet-dev ssm get-parameters --names MYSQL_PASSWORD --with-decryption --query Parameters[0].Value --output text) bugzilla | grep Field
mysql: [Warning] Using a password on the command line interface can be insecure.
Field: id
Field: mefe_invitation_id
Field: bzfe_invitor_user_id
Field: bz_user_id
Field: user_role_type_id
Field: is_occupant
Field: bz_case_id
Field: bz_unit_id
Field: invitation_type
Field: is_mefe_only_user
Field: user_more
Field: mefe_invitor_user_id
Field: processed_datetime
Field: script
Field: api_post_datetime
有关显示不同类型以及它们是否可以为空的详细信息,请参见fields.txt 。
所以我的第一步是创建一个结构并将 varchar 映射到字符串,将任何类型的 int 映射到 int 并将日期映射到 time.Time。
带有下划线的列名已经让我的 Golang 编辑器抱怨了。接下来是 JSON 标签,我们有类似的东西:
type invitation struct {
id int `json:"id"`
mefe_invitation_id string `json:"mefe___invitation___id"`
bzfe_invitor_user_id int `json:"bzfe___invitor___user___id"`
bz_user_id int `json:"bz___user___id"`
user_role_type_id int `json:"user___role___type___id"`
is_occupant bool `json:"is___occupant"`
bz_case_id int `json:"bz___case___id"`
bz_unit_id int `json:"bz___unit___id"`
invitation_type string `json:"invitation___type"`
is_mefe_only_user bool `json:"is___mefe___only___user"`
user_more string `json:"user___more"`
mefe_invitor_user_id int `json:"mefe___invitor___user___id"`
processed_datetime time.Time `json:"processed___datetime"`
script string `json:"script"`
api_post_datetime time.Time `json:"api___post___datetime"`
}
这看起来非常错误。有没有更好的方法来使用 Golang 为 mysql 数据库制作 RESTful API?即确保使用干净的映射和正确的 RESTful 动词?
解决方案
mysql 字段名称必须放在json
标签中。结构中的字段名称可以是您喜欢的任何名称。例如:
type Invitation struct {
ID int `json:"id"`
InvitationID string `json:"mefe_invitation_id"`
InvitorUserID int `json:"bzfe_invitor_user_id"`
BzUserID int `json:"bz_user_id"`
//...
}
另请注意,为了让json
包能够看到您的结构字段,它们需要被导出(以大写字母开头),您可能还想导出整个结构,因此您可以在公共函数中返回它。
推荐阅读
- objective-c - 我可以在objective-c调用之前和之后设置路标吗?
- bash - sudo -Si bash 脚本,如何提供参数?
- javascript - javascript - 如何在一段时间后停止执行递归函数
- google-bigquery - BigQuery - 查询分区表时不会节省成本
- python - GCP 上的 Docker 映像:在哪里复制 Python 脚本所需的文件
- swift - 当一个按钮被选中时取消选择另一个按钮
- css - 为什么我的 scss 不采用通用选择器?
- node.js - 如何在 Node.js 中从 Oracle 数据库创建 XML 文件?
- c# - 模拟时,IConfiguration 不断获取空值
- c++ - 如何停止 CLR 托管?