自学内容网 自学内容网

用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)!