废话不多说直接上代码

前提条件你需要下载COS的SDK

go get -u github.com/tencentyun/cos-go-sdk-v5

ps:以下代码是用gin框架,这里主要是对这上传头像的使用 其他的逻辑就直接省略了。

//修改头像
func changeAvatar(ctx *gin.Context) {

   img, err := ctx.FormFile("avatar")


   //大小限制2Mb
   if img.Size > (2 << 20) {
      tool.RespErrorWithData(ctx, "头像文件过大")
      return
   }
   file, err := img.Open()

   filePath := "/avatar/" + tool.CreateUUID() + "." + strings.Split(img.Filename, `.`)[1]

   //上传头像
   err = service.UploadAvatar(file, filePath)

   if err != nil {
      fmt.Println("UploadAvatarErr: ", err)
      tool.RespInternalError(ctx)
      return
   }
    
   //以下代码可以省略
   cfg := tool.GetCfg().Cos
    
   url := cfg.AvatarUrl + filePath   

   //头像入数据库
   err = service.ChangeAvatar(url, Id)
   if err != nil {
      fmt.Println("changeAvatar_ChangeAvatar Err is: ", err)
      tool.RespInternalError(ctx)
      return
   }
   ctx.JSON(200, gin.H{
      "data":   "修改成功",
      "avatar": url,
   })
}

service.UploadAvatar

func UploadAvatar(file io.Reader, filePath string) error {
	cfg := tool.GetCfg().Cos
	u, _ := url.Parse(cfg.AvatarUrl)
	b := &cos.BaseURL{BucketURL: u}
	c := cos.NewClient(b, &http.Client{
		// 设置超时时间
		Timeout: 30 * time.Second,
		Transport: &cos.AuthorizationTransport{
			SecretID:  cfg.SecretId,
			SecretKey: cfg.SecretKey,
		},
	})

	_, err := c.Object.Put(context.Background(), filePath, file, nil)
	if err != nil {
		return err
	}
	return nil
}

cfg.AvatarUrl 是你的储存桶的地址  
cfg.SecretId  cfg.SecretKey 是你账号的ID和密钥