如何多个命令共用一个接口?
前面修改文章的几个命令,我们看到一个现象,它们共同调用了同一个函数 UpdateArt,我今天讲下,多个命令是如何做到调用同一个函数实现的?
先看下实现源码:
// 更新文章请求
type UpdateArtReq struct {
Uuid string `json:"uuid"` // uuid
Title string `json:"title"` // 题目
Keyword string `json:"keyword"` // 关键字
Content string `json:"content"` // 内容
IsPub int `json:"ispub"` // 是否公开
IsLock int `json:"islock"` // 是否加锁
UptType int `json:"utype"` // 更新类型 1,题目 2,关键字 3,内容 4,是否公开 5,是否加锁
}
// 更新文章信息
func UpdateArt(token string, uar *UpdateArtReq) error {
if token == "" {
return errors.New("token不能为空")
}
url := fmt.Sprintf("%s/uptVArt?token=%s", OPEN_URL, token)
reqBody := new(bytes.Buffer)
json.NewEncoder(reqBody).Encode(uar)
req, err := http.NewRequest("POST", url, reqBody)
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
var result RespMsg
err = json.Unmarshal(data, &result)
if err != nil {
return err
}
if result.Code == 1 {
return nil
} else {
return errors.New(result.Msg)
}
}
它的原理非常简单,定义一个结构体,保存所有要变更的字段信息,再新增一个字段定义变更类型,例如源码中的注释,后台根据这个字段类型,去修改对应的内容。
文章命令行工具开发部分基本就完成了,后续有新的功能或者优化再开新的文章。
感谢您的观看!