用go语言写一个小服务

news/2024/12/2 20:24:46/

文章目录

  • 简介
    • 重新想到go
  • 小服务
    • main.go
    • 部署
    • 测试
  • 结束语

简介

  • golang的优势
    响应速度:
    Go > Java > Python
    内存占用:
    Go < Java < Python

从java转go,然后go又转java,感觉就是go虽然在编译、内存占用都强于java,但是响应上并没有传说中那么离谱,java完全打得过,并且go语言的框架在20年的时候还不是很完善,当时项目组的工程师亲自手写了一个kafka的生产和消费。。。

go语言给我最大的印象就是非常强悍的协程(轻量化线程),给人一种只要内存够用,就好像能无限开大的感觉。

三种语言的对比

内存管理

Java:

  • JVM负责内存管理
  • 使用垃圾回收(GC)
  • 内存模型明确

Python:

  • PVM负责内存管理
  • 引用计数为主的GC
  • 内存管理相对简单

Go:

  • 编译时内存管理
  • 使用独特的GC机制
  • 内存管理更底层

性能特点

Java:

  • JIT编译优化
  • 启动较慢
  • 运行性能好

Python:

  • 解释执行
  • 性能相对较低
  • 开发效率高

Go:

  • 直接运行机器码
  • 启动快
  • 性能优秀

重新想到go

最近遇到一个问题,其中一个解决方案就是部署一个非常小的实例,实现http对接。
目前编程语言中rust最小,然后是go,rust语言没有接触过,于是想到重拾go语言。

小服务

main.go

package mainimport ("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-servergo get -u github.com/gin-gonic/gingo 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很能打。


http://www.ppmy.cn/news/1551838.html

相关文章

【Vue3】弹窗添加鼠标hover上边缘左、下的的拉伸宽度高度操作

需求 鼠标移动上去可以拖拽容器宽度和高度 代码 省略了一些代码&#xff0c;但应该都看得懂吧~就是两条线添加 mousedown 事件&#xff0c;记得 mousemove 要挂载到 document 上&#xff01;&#xff01;&#xff01; <div class"line-w" mousedown"sta…

WEEXNews「昨夜今晨重要资讯,11月27日

1️⃣美国法院裁定OFAC越权制裁Tornado Cash智能合约 2️⃣美联储会议纪要&#xff1a;未来倾向“渐进”降息&#xff0c;有暂停可能 3️⃣特朗普政府考虑让CFTC主导数字资产监管 4️⃣巴西议员提出比特币储备法案&#xff0c;拟将国库储备的5%分配至比特币 5️⃣摩洛哥或将正式…

Python读取摄像头视频并将其保存为MP4文件

在Python中读取摄像头视频并将其保存为MP4文件&#xff0c;通常需要使用OpenCV库。OpenCV是一个强大的计算机视觉库&#xff0c;它提供了丰富的功能来处理图像和视频。 以下是一个简单的示例代码&#xff0c;展示了如何使用OpenCV从摄像头读取视频并将其保存为MP4文件&#xf…

【llamafactory】安装与环境配置

拉取镜像 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory创建虚拟环境 conda create -n llamafactory python3.10 conda activate llamafactory安装所需依赖 pip install -e ".[torch,vllm,optimum,auto_gptq]"

区块链学习笔记(2)--区块链的交易模型part1

模型基础 区块链的tx分为两种模型&#xff0c;分别是比特币为代表的UTXO&#xff08;Unspent Transaction Output&#xff09;模型&#xff0c;和以太坊为代表的Account模型。前者适用于货币记账&#xff0c;后者适用于链上应用。 UTXO模型 类似于现金的交易模型 一个tx包含…

鸢尾花数据集:从统计到几何的探索

鸢尾花数据集&#xff1a;从统计到几何的探索 引言鸢尾花数据集简介数据集概述统计视角 数据类型与存储NumPy ArrayPandas DataFrame 几何视角行向量与列向量行向量列向量 空间表示 结论 引言 鸢尾花数据集是机器学习和模式识别领域中的一个经典数据集。它由统计学家罗纳德费舍…

如何在 Ubuntu 18.04 上设置 Apache 虚拟主机

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Apache Web 服务器是一种流行的在互联网上提供网站服务的方法。截至2019年&#xff0c;据估计&#xff0c;它为所有活跃网站的29%…

http的文件上传和下载原理

目录 一&#xff1a;上传 1&#xff1a;http请求格式 2&#xff1a;文件上传类型分析 1&#xff1a;md5秒传 2&#xff1a;分片上传 1. 什么是分片上传 2. 分片上传的场景 3&#xff1a;断点续传 1. 什么是断点续传 2. 应用场景 3. 实现断点续传的核心逻辑 4. 实现流…