当前位置: 首页 > news >正文

网站的域名做邮箱吗网上交易平台

网站的域名做邮箱吗,网上交易平台,聚名网实名认证,wordpress 备份主题环境: MAC M1,Go 1.17.2,GoLand 默认执行指令的终端,如果没有特别说明,指的都是goland->Terminal 创建项目 Goland中新建项目,在$GOPATH/src/目录下建立t_gin项目。 进入项目,在goland的T…

环境:

MAC M1,Go 1.17.2,GoLand
默认执行指令的终端,如果没有特别说明,指的都是goland->Terminal

创建项目

Goland中新建项目,在$GOPATH/src/目录下建立t_gin项目。
进入项目,在goland的Terminal终端下(默认pwd是项目所在目录)执行指令下载gin:

go get -u github.com/gin-gonic/gin

很快就会安装好。
然后在t_gin下建立一个新的go文件:main.go,用来作为项目的入口文件。

GET与POST请求参数处理

在main.go中开始编写代码,框架的话就先从接收参数开始。

package t_ginimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()//Get 参数r.GET("/getTest", func(c *gin.Context) {name := c.Query("name")c.JSON(http.StatusOK, gin.H{"code": 0,"data": name,})})//Post 参数r.POST("/postTest", func(c *gin.Context) {name := c.PostForm("name")bankNoArr := c.PostFormArray("bankNo")var ret []stringfor _, bankNo := range bankNoArr {ret = append(ret, bankNo)}result := make(map[string]interface{})result["name"] = nameresult["bankNos"] = retc.JSON(http.StatusOK, gin.H{"code": 0,"data": result,})})r.Run()
}

好的,执行一下看看

$ go run main.go
package command-line-arguments is not a main package

没有运行成功,报了错误,这个错误提示比较浅显,是package的问题,执行应该是main包,我们调整一下代码如下部分:

package main

然后再运行看看

$ go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.- using env:   export GIN_MODE=release- using code:  gin.SetMode(gin.ReleaseMode)[GIN-debug] GET    /getTest                  --> main.main.func1 (3 handlers)
[GIN-debug] POST   /postTest                 --> main.main.func2 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

好的,现在运行成功了,由于没有指定端口(在r.run()中可以指定端口),所以默认使用8080端口启动。
在测试代码里,我写了get和post两种请求方式的参数获取,这也是日常最常见的请求方式。
我们用postman对这两个接口做一下测试,看看参数获取是否正确。
先测试Get:
在这里插入图片描述
get请求的参数能够正确获取。
那我们再测试一下post:
在这里插入图片描述
很好,post请求参数也能够正常接收。

上传文件

在开发过程中,经常遇到的请求类型,除了Get和Post的接口请求,可能就是上传文件的请求了,当然,上传文件也属于Post请求的一种。
下面我们再来测试一下上传文件的基本实现,首先为了存放上传的文件,我们在t_gin目录下建立一个新的文件夹upload专门用来存放上传的文件。
测试上传文件的代码如下:

	r.POST("/upload", func(c *gin.Context) {f, err := c.FormFile("uploadFile")if err != nil {panic(err.Error())}err = c.SaveUploadedFile(f, "./upload/"+f.Filename)if err != nil {panic(err.Error())}c.JSON(http.StatusOK, gin.H{"code": 0,"data": f.Filename,})})

还是用postman进行测试:
在这里插入图片描述
测试是成功的,那我们看看t_gin/upload/目录下是不是已经有了上传的文件呢?
在这里插入图片描述
已经有了对不对,符合我们的预期。

上传多个文件

上传文件的操作,有些时候可能会一次上传多个文件,那这种情况怎么处理呢?我们也来尝试一下这种场景。
测试多个文件上传的代码如下:

r.POST("/multiUpload", func(c *gin.Context) {multiForm, _ := c.MultipartForm()files := multiForm.File["uploadFile"]var result []stringfor _, file := range files {result = append(result, file.Filename)err := c.SaveUploadedFile(file, "./upload/"+file.Filename)if err != nil {log.Println("file save error:" + file.Filename)continue}}c.JSON(http.StatusOK, gin.H{"code": 0,"data": result,})})

同样的,我们还是将上传的文件放到./t_gin/upload/目录下,用postman测试一下看看:
在这里插入图片描述
好的,接口提示是上传成功了,我们再看一下upload目录下是不是已经有了上传的文件:
在这里插入图片描述
确实是有了,那多个文件上传的基本操作也成功了。

文件下载

既然说了文件上传,那就可能有文件下载,我们也来尝试一下文件下载的实现。
测试代码如下:

r.GET("/downloadFile", func(c *gin.Context) {//c.File("./upload/cat1.HEIC")c.FileAttachment("./upload/cat1.HEIC", "mycat.HEIC")})

浏览器试了一下,ok。

JSON参数处理

想想还有什么呢。。。。
对了,日常的请求中,使用最多的应该是json格式的参数,再尝试一下json格式的参数处理:
测试代码如下:

r.POST("/jsonTest", func(c *gin.Context) {type jsonParam struct {Name string `json:"name"`Age  int    `json:"age"`Sex  string `json:"sex"`}var jsonP jsonParamerr := c.BindJSON(&jsonP)if err != nil {log.Panic(err.Error())}c.JSON(http.StatusOK, gin.H{"code": 0,"data": jsonP,})})

看代码可以发现,当参数是json形式时,是将json参数bind到了一个struct上。
有没有什么似曾相识的感觉??
对,就是java,和java的参数接收十分相像
ok,我们也用Postman测试一下看看:
在这里插入图片描述
好的,没什么问题。

路由分组

还有个不是参数相关的,属于路由范畴,算是路由分组,实际开发中总会遇到不同的模块,而模块内的接口前半部分大多情况下是相同的,这就属于路由分组了。
我们看下gin中怎么实现的,分组通常会有多个路由在一起,所以处理方法我们也集中起来放,这里我们在t_gin/目录下再建立一个controller文件夹,用来存放处理方法。
建好controller文件夹后,在其中新建learn.go代码文件,代码如下:

package controllerimport ("github.com/gin-gonic/gin""net/http"
)type LearnController struct {
}func (l *LearnController) First(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"code":0,"data":"this is first handle",})
}func (l *LearnController) Second(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"code":0,"data":"this is second handle",})
}

由于是做测试用,这里我在方法内部直接做了返回。
好的,现在处理方法有了,我们来处理路由分组,这部分是在main.go当中:

	rg := r.Group("/learn"){learnCtrl := controller.LearnController{}rg.GET("/first", learnCtrl.First)rg.GET("/second", learnCtrl.Second)}

同样我们也测试一下,看看是否符合我们的预期
在这里插入图片描述
ok,没什么问题。

常用的基本就这些,还有其它的一些偶尔也会用到,有需要再去翻文档吧。
今天就到这里。

http://www.hkea.cn/news/473265/

相关文章:

  • 做外贸可以在哪些网站注册网络项目免费的资源网
  • 中国建设银行信用卡网站首页青岛关键词优化平台
  • 阿里云网站建设考试题目长沙网站推广服务公司
  • 甘肃建设项目审批权限网站俄罗斯搜索引擎yandex官网入口
  • 网站建设公司新员工培训ppt模板百度热门搜索排行榜
  • 仿魔客吧网站模板网址大全是ie浏览器吗
  • 网站产品后台界面怎么做湖南关键词排名推广
  • 网站数据每隔几秒切换怎么做的湖南百度seo排名点击软件
  • 网站制作先学什么百度新闻下载安装
  • 河南省网站建设哪家好免费观看行情软件网站进入
  • 粘合剂东莞网站建设体育热点新闻
  • 百度网站排名关键词整站优化培训网站建设
  • 网络平台代理seo外包 杭州
  • 东方头条网站源码免费推广软件工具
  • 北京网站建设公司分享网站改版注意事项流程优化四个方法
  • 案例学 网页设计与网站建设手机百度seo快速排名
  • 江门网站建设总部电话产品推广渠道有哪些
  • 网站建设全攻略站长之家ping检测
  • 导航网站 cmsgoogle chrome谷歌浏览器
  • wordpress看其他人博客优化师是做什么的
  • 现在哪个网站还做白拿2021小说排行榜百度风云榜
  • 网站流量seo提升seo排名的方法
  • 做html网站模板下载地址网站页面布局和样式设计
  • 公司网站邮箱费用磁力宅在线搜种子
  • wordpress 缺少临时文件夹刷关键词优化排名
  • 做网站要有什么团队淘宝关键词排名查询工具
  • 开源门户网站源码宁波谷歌seo
  • wordpress+一页一屏seo关键技术有哪些
  • 学校校园网站建设实施方案精准营销的案例
  • 腾讯云服务器可以做网站可以推广发广告的app