上传文章

定义上传文章的 command,并将 command 添加到 Root 中。

func init() {
	rootCmd.AddCommand(upCmd)
}

var upCmd = &cobra.Command{
	Use:   "upload",
	Short: "上传文章,可在豆子碎片小程序中查看。",
	Long: `上传文章,可在豆子碎片小程序中查看。参数依次为题目,关键字,Markdown文件,是否公开,是否加锁。
	参数题目,关键字,Markdown文件必填,是否公开,是否加锁选填,默认为否。
	例如:gart upload 上传示例1 命令行,工具 ./example.md
	`,
	Args: cobra.RangeArgs(3, 5),
	Run: func(cmd *cobra.Command, args []string) {
		var (
			title    string
			keyword  string
			filename string
			ispub    int
			islock   int
		)
		title = args[0]
		keyword = args[1]
		filename = args[2]
		l := len(args)
		switch l {
		case 4:
			ispub = utils.Str2Int(args[3])
		case 5:
			ispub = utils.Str2Int(args[3])
			islock = utils.Str2Int(args[4])
		}
		fmt.Println("上传参数如下:")
		var isPubStr string = "否"
		var isLockStr string = "否"
		if ispub == 1 {
			isPubStr = "是"
		}
		if islock == 1 {
			isLockStr = "是"
		}
		t := table.NewWriter()
		t.SetOutputMirror(os.Stdout)
		t.AppendHeader(table.Row{"题目", "关键字", "文件名称", "是否公开", "是否加锁"})
		t.AppendRows([]table.Row{
			{title, keyword, filename, isPubStr, isLockStr},
		})
		t.AppendSeparator()
		t.Render()
		err := service.UploadArt(token, title, keyword, filename, ispub, islock)
		if err != nil {
			fmt.Println("上传发生错误,", err)
		} else {
			fmt.Println("上传成功")
		}
	},
}

在上面的实现中,使用了 cobra 参数约束函数,Args: cobra.RangeArgs(3, 5),,保证参数最少 3 个,最多不能超过 5 个。这完全满足我的需求。

在打印列表时,使用 go-pretty 库的 table 组件,可以美化控制台输出,我这里以表格的形式显示上传的参数,一目了然。

剩下的就简单了,调用后台上传接口,返回结果然后展示就可以了。