如何多个命令共用一个接口?

前面修改文章的几个命令,我们看到一个现象,它们共同调用了同一个函数 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)
	}
}

它的原理非常简单,定义一个结构体,保存所有要变更的字段信息,再新增一个字段定义变更类型,例如源码中的注释,后台根据这个字段类型,去修改对应的内容。

文章命令行工具开发部分基本就完成了,后续有新的功能或者优化再开新的文章。

感谢您的观看!