gin gorm

DB

package config

import (
    "gorm.io/driver/postgres"
    "gorm.io/gorm"
    "gorm.io/gorm/logger"
    "log"
    "os"
    "time"
)

// DB 数据库链接单例
var DB *gorm.DB

// Database 在中间件中初始化mysql链接
func InitDb(connString string) {
    // 初始化GORM日志配置
    newLogger := logger.New(
        log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
        logger.Config{
            SlowThreshold:             time.Second, // Slow SQL threshold
            LogLevel:                  logger.Info, // Log level(这里记得根据需求改一下)
            IgnoreRecordNotFoundError: true,        // Ignore ErrRecordNotFound error for logger
            Colorful:                  false,       // Disable color
        },
    )

    db, err := gorm.Open(postgres.Open(connString), &gorm.Config{
        Logger: newLogger,
    })
    if err != nil {
        log.Println("数据库连接失败", err)
        panic(err)
    }

    sqlDB, err := db.DB()
    //设置连接池
    //空闲
    sqlDB.SetMaxIdleConns(10)
    //打开
    sqlDB.SetMaxOpenConns(20)
    DB = db
}

server router

package server

import (
    "github.com/gin-gonic/gin"
    "hn-service/api"
)

// NewRouter 路由配置
func NewRouter() *gin.Engine {
    router := gin.Default()

    // Simple group: v1
    v1 := router.Group("/v1")
    {
        v1.GET("/ping", api.Ping)
        v1.POST("/product_query", api.ProductQuery)
    }

    // Simple group: v2
    v2 := router.Group("/v2")
    {
        v2.POST("/login", api.Ping)
    }
    return router
}

api handler

package api

import (
    "github.com/gin-gonic/gin"
    "hn-service/model"
    "hn-service/service"
    "hn-service/util"
)

// Ping 状态检查页面
func Ping(c *gin.Context) {
    c.JSON(200, util.Response{
        Code: 0,
        Msg:  "Pong",
    })
}

func ProductQuery(c *gin.Context) {
    var hnIdModel model.HnIdModel
    if err := c.ShouldBind(&hnIdModel); err == nil {
        poiHnEdits := service.QueryByHnIds(&hnIdModel)
        c.JSON(200, util.Response{
            Code: util.SUCCESS,
            Data: poiHnEdits,
            Msg:  "查询成功",
        })
    } else {
        c.JSON(200, util.Response{
            Code: util.FAIL,
            Msg:  "查询失败",
        })
    }

}


package util

// Response 基础序列化器
type Response struct {
    Code int         `json:"code"`
    Data interface{} `json:"data,omitempty"`
    Msg  string      `json:"msg"`
}

const (
    SUCCESS = 1
    FAIL    = 0
)

main

package main

import (
    "hn-service/config"
    "hn-service/server"
)

func main() {
    // 从配置文件读取配置
    config.Init()
    // 装载路由
    r := server.NewRouter()
    r.Run(":8012")
}

dockerfile

FROM golang:alpine

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64 \
    GOPROXY="https://goproxy.cn,direct"

# 移动到工作目录:/home/www/goWebBlog 这个目录 是你项目代码 放在linux上
# 这是我的代码跟目录
# 你们得修改成自己的
WORKDIR /app

# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件  可执行文件名为 app
RUN go build -o app .

EXPOSE 8012

# 启动容器时运行的命令
CMD ["./app"]

makefile

docker_tag_poi_worker=192.168.106.46:5000/go-hn-service:v1
# docker_tag_poi_worker=192.168.160.20:5000/poi-hn-service:v3
docker_build_worker:
    docker build -t $(docker_tag_poi_worker) -f Dockerfile .

docker_push_worker:
    docker push $(docker_tag_poi_worker)

docker_build_push_worker:
    make docker_build_worker
    make docker_push_worker



你可能感兴趣的:(gin gorm)