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

golang实现一个mysql中随机获取cookies的API

之前用FASTAPI写了一个随机cookies请求的接口,现在尝试用golang实现同样的效果

1.编写go代码

package mainimport ("database/sql""encoding/json""fmt"_ "github.com/go-sql-driver/mysql""log""net/http""os""time"
)// 获取环境变量(优先使用环境变量,不存在则使用默认值)
func getEnv(key, defaultValue string) string {if value, exists := os.LookupEnv(key); exists {return value}return defaultValue
}// 数据库配置
const (dbDriver   = "mysql"dbUser     = "nobuy"      // 替换为实际用户名dbPassword = "@zzwl" // 替换为实际密码dbHost     = "192.168.1.1" // 替换为实际主机dbPort     = "3306"      // 替换为实际端口dbName     = "nobuy"   // 替换为实际数据库名
)// CookieResponse API响应结构
type CookieResponse struct {Status      string `json:"status"`Cookie      string `json:"cookie,omitempty"`Error       string `json:"error,omitempty"`UserAccount string `string:"user_account,omitempty"`
}var db *sql.DBfunc main() {initDB()defer db.Close()// 注册路由apihttp.HandleFunc("/randomcookie", randomCookieHandler)// 启动HTTP服务器port := ":8081"log.Printf("Server started at http://localhost%s", port)log.Fatal(http.ListenAndServe(port, nil))
}func initDB() {dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true",getEnv("DB_USER", dbUser),getEnv("DB_PASSWORD", dbPassword),getEnv("DB_HOST", dbHost),getEnv("DB_PORT", dbPort),getEnv("DB_NAME", dbName))var err errordb, err = sql.Open(dbDriver, dsn)if err != nil {log.Fatalf("Database connection failed: %v", err)}// 设置连接池参数db.SetMaxOpenConns(25)db.SetMaxIdleConns(25)db.SetConnMaxLifetime(5 * time.Minute)// 验证数据库连接if err = db.Ping(); err != nil {log.Fatalf("Database ping failed: %v", err)}log.Println("Database connected successfully")
}
func randomCookieHandler(w http.ResponseWriter, r *http.Request) {w.Header().Set("Content-Type", "application/json")response := CookieResponse{}var cookie stringvar user_account stringerr := db.QueryRow(`SELECT cookies,user_accountFROM external_accountWHERE account_type_id=2 AND is_deleted=0 AND account_status=0ORDER BY RAND()LIMIT 1`).Scan(&cookie, &user_account)switch {case err == sql.ErrNoRows:response.Status = "error"response.Error = "No cookies avaiable"w.WriteHeader(http.StatusNotFound)case err != nil:response.Status = "error"response.Error = fmt.Sprintf("Database error: %v", err)w.WriteHeader(http.StatusInternalServerError)default:response.Status = "success"response.Cookie = cookieresponse.UserAccount = user_accountlog.Printf(response.Status, response.Cookie, response.UserAccount)}json.NewEncoder(w).Encode(response)}

2.docker打包golang镜像(直接运行.go文件)

打包的Dockerfile如下所示

FROM alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/golang AS builder# 设置工作目录
WORKDIR /app
# 设置国内镜像源
ENV GOPROXY=https://goproxy.cn,direct
# 复制 Go 源代码到工作目录
COPY . .# 构建你的 Go 程序
# RUN go build go_code/hello/demo.go# 暴露端口 8888
EXPOSE 8081# 设置容器启动时执行的命令
CMD go run "cookie_api.go"

打包成docker镜像

docker build -f Dockerfile3 -t cookieapi:1 .

3.docker打包golang镜像

将golang打包成可执行程序,然后打包docker镜像

FROM registry.cn-hangzhou.aliyuncs.com/devops_de/golang:1.21-alpine AS builder# 设置工作目录
WORKDIR /app
# 设置国内镜像源
ENV GOPROXY=https://goproxy.cn,direct
# 复制 Go 源代码到工作目录
COPY . .# 复制源代码并编译
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o nobuy-app# 运行阶段
FROM registry.cn-hangzhou.aliyuncs.com/devops_de/alpine:3.18
WORKDIR /app
# 从构建阶段复制二进制文件
COPY --from=builder /app/nobuy-app /app/nobuy-app
# 设置可执行权限
RUN chmod +x /app/nobuy-app
# 暴露端口 8888
EXPOSE 8081# 设置启动命令
CMD ["/app/nobuy-app"]

4.运行效果对比

运行效果差异如下所示

[root@centos-1 cookies]# docker ps
CONTAINER ID   IMAGE                                                                                                    COMMAND                  CREATED        STATUS                 PORTS                                                                                            NAMES
adc6c31adf23   cookieapi:1                                                                                              "/app/nobuy-app"         2 hours ago    Up 2 hours             0.0.0.0:8181->8081/tcp, :::8181->8081/tcp                                                        romantic_bohr
f6023569cc62   cookies_api:0625                                                                                         "/bin/sh -c 'go run …"   3 hours ago    Up 3 hours             0.0.0.0:8089->8081/tcp, :::8089->8081/tcp     

在这里插入图片描述

上述结果可以看到,直接运行cookie_api.go和运行打包可执行的go程序,内存差了两倍

http://www.lqws.cn/news/518941.html

相关文章:

  • 数字隔离器,如何扛起现代智能家电的电气安全“大旗”
  • [Java实战]Windows系统JDK21安装与JDK8切换指南(三十九)
  • 利用亮数据实现海外网站数据自动抓取
  • 回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型
  • 【CUDA调优指南】缓存访存流程
  • 商务年度总结汇报PPT模版分享
  • 板凳-------Mysql cookbook学习 (十--10)
  • 笔记02:布线-差分对的设置与添加
  • 定制开发开源AI智能名片与S2B2C商城小程序的内容分发体系构建:基于“1+N“素材复用模型的创新实践
  • 旧物回收小程序:让旧物重获新生的魔法钥匙
  • 14.Linux Docker
  • Mac安装Apache CXF的时候报错:/Library/Internet: No such file or directory
  • 淘宝API安全合规指南:避免数据泄露与封禁
  • 智能质检对呼叫中心职场有什么作用
  • 深入剖析 Spring AOP
  • 迁移学习—基于猫狗数据集
  • 【DataWhale组队学习】AI办公实践与应用-数据分析
  • Ubuntu 物理桌面远程访问教程(基于 RealVNC / mstsc)
  • 北斗导航 | 基于CNN-LSTM-PSO算法的接收机自主完好性监测算法
  • Spring Boot 项目文档编写工具推荐
  • 聚焦OpenVINO与OpenCV颜色通道转换的实践指南
  • UniApp 开发第一个项目
  • 防静电地板更换不是建材更新,而是重铸安全防线!
  • nn.Embedding 和 word2vec 的区别
  • 基于LangChat搭建RAG与Function Call结合的聊天机器人方案
  • Catchadmin 使用相关问题
  • Android11 深休后系统定时唤醒导致网络请求服务器过载
  • 数据结构篇-二分图
  • Class00.2线性代数
  • 【评估指标】IoU 交并比