是否需要保存复用创建的 gclient.Client 对象

无论是通过 g.Client 或者 gclient.New 方法创建 gclient.Client 对象,该对象都应该保存下来复用,而不是每一次都新建 Client 对象,这样可以提高效率、降低资源使用、使用方式对 GC 友好。该对象内建连接池设计,可充分管理大量的短连接请求。由于 Client 对象对资源消耗不是很高,所以很多同学可能都没太注意这个点。

什么情况下我应该新建 gclient.Client 对象而不是复用呢?你可以按照业务模块的解耦设计,每个业务模块单独管理维护自己的 gclient.Client 对象。也可以当针对不同的场景,使用 Client 的配置不同时,那么可以新建不同的 Client 来使用。

invalid semicolon separator in query

问题原因:默认 表单请求 中带 ; 字符是非法的(需要 urlencode)。具体请参考讨论: https://github.com/golang/go/issues/25192

错误示例

  1. curl localhost:8000/Execute -d '{
  2. "Component": "mysql",
  3. "ResourceId": "cdb-gy6hm0ee",
  4. "Port": 6379,
  5. "SQL": "show databases;",
  6. "UserName": "root",
  7. "Password": ""
  8. }'

修复示例

提交请求的时候需要注明 ContentType,例如这里应当标明是 JSON 请求。

  1. curl -X POST -H "Content-Type: application/json" localhost:8000/Execute -d '{
  2. "Component": "mysql",
  3. "ResourceId": "cdb-gy6hm0ee",
  4. "Port": 6379,
  5. "SQL": "show databases;",
  6. "UserName": "root",
  7. "Password": ""
  8. }'