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

用go语言写一个小服务

文章目录

  • 简介
    • 重新想到go
  • 小服务
    • main.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 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.lryc.cn/news/493386.html

相关文章:

  • 亚马逊开发视频人工智能模型,The Information 报道
  • WordCloud参数的用法:
  • qml调用c++类内函数的三种方法
  • NLP任务四大范式的进阶历程:从传统TF-IDF到Prompt-Tuning(提示词微调)
  • GAMES101:现代计算机图形学入门-笔记-09
  • 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  • MySQL聚合查询分组查询联合查询
  • 告别照相馆!使用AI证件照工具HivisionIDPhotos打造在线证件照制作软件
  • 通信原理第三次实验
  • 【halcon】Metrology工具系列之 get_metrology_object_result_contour
  • A052-基于SpringBoot的酒店管理系统
  • NLP信息抽取大总结:三大任务(带Prompt模板)
  • python常见问题-pycharm无法导入三方库
  • 迅为RK3588开发板Android系统开发笔记-使用ADB工具
  • 什么是分布式数据库?
  • Leetcode 3363. Find the Maximum Number of Fruits Collected
  • 【数据仓库 | Data Warehouse】数据仓库的四大特性
  • springboot配置多数据源mysql+TDengine保姆级教程
  • dns实验2:反向解析
  • ZooKeeper 基础知识总结
  • npm库xss依赖的使用方法和vue3 中Web富文本编辑器 wangeditor 使用xss库解决 XSS 攻击的方法
  • 微信小程序蓝牙writeBLECharacteristicValue写入数据返回成功后,实际硬件内信息查询未存储?
  • 5G NR:带宽与采样率的计算
  • go 和java 编写方式的理解
  • C# 7.1 .Net Framwork4.7 VS2017环境下,方法的引用与调用
  • etcd、kube-apiserver、kube-controller-manager和kube-scheduler有什么区别
  • 每日一题 LCR 057. 存在重复元素 III
  • 使用IDEA编写测试用例,复杂度校验
  • 搭建私有云存储
  • 【从零开始的LeetCode-算法】3304. 找出第 K 个字符 I