用go语言写一个小服务
简介
- golang的优势
响应速度:
Go > Java > Python
内存占用:
Go < Java < Python
从java转go,然后go又转java,感觉就是go虽然在编译、内存占用都强于java,但是响应上并没有传说中那么离谱,java完全打得过,并且go语言的框架在20年的时候还不是很完善,当时项目组的工程师亲自手写了一个kafka的生产和消费。。。
go语言给我最大的印象就是非常强悍的协程(轻量化线程),给人一种只要内存够用,就好像能无限开大的感觉。
重新想到go
最近遇到一个问题,其中一个解决方案就是部署一个非常小的实例,实现http对接。
目前编程语言中rust最小,然后是go,rust语言没有接触过,于是想到重拾go语言。
小服务
main.go
package main
import (
"fmt"
"net/http"
"os"
"path/filepath"
"github.com/gin-gonic/gin"
)
func main() {
// 创建 Gin 路由
r := gin.Default()
// 创建文件保存目录
err := createFileDir()
if err != nil {
fmt.Printf("创建文件目录失败: %v\n", err)
return
}
// 文件上传接口
r.POST("/addFile", func(c *gin.Context) {
// 获取上传的文件
file, err := c.FormFile("file")
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": "获取文件失败",
})
return
}
// 构建保存路径
dst := filepath.Join("./file", file.Filename)
// 保存文件
if err := c.SaveUploadedFile(file, dst); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": "保存文件失败",
})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "文件上传成功",
"filename": file.Filename,
})
})
// hello 接口
r.GET("/hello", func(c *gin.Context) {
c.String(http.StatusOK, "hello")
})
// 启动服务器,监听 8090 端口
r.Run(":8090")
}
// 创建文件保存目录
func createFileDir() error {
return os.MkdirAll("./file", 0755)
}
部署
这里就一个文件,快速部署
go mod init file-handler-server
go get -u github.com/gin-gonic/gin
go run main.go
测试
hello测试
curl http://localhost:8090/hello
文件测试
curl -X POST http://localhost:8090/addFile -F "file=@/path/to/your/file"
结束语
go语言这个文件2kb,运行后也就几M内存消耗,非常夸张,如果java语言来写,习惯spring框架的就直接带上这个沉重的包袱,需要配置jdk,配置maven,部署速度也慢。
总体而言,做一个小功能,go很能打。
原文地址:https://blog.csdn.net/weixin_45149147/article/details/144085105
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!