Goland如何玩依赖注入——基于gone@v2创建一个service

发布于:2025-03-12 ⋅ 阅读:(105) ⋅ 点赞:(0)

经过多天的工作,终于把gone2的beta版本发布出去了。在v2版本中,做了很多更新,最大的改进是将一些不必要的概念给隐藏起来了,提供了Provider机制……

1. 安装gonectr

go install github.com/gone-io/gonectr@latest
gonectr -v
Gonectr version: v0.0.17

版本应该大于:v0.0.17

2.创建项目

gonectr create -t v2+web+mysql demo

在这里插入图片描述
项目是以https://github.com/gone-io/template-v2-web-mysql 为模板创建的。

2.1 项目结构

├── go.mod
├── go.sum
├── Dockerfile
├── docker-compose.yaml
├── Makefile
├── README.md
├── cmd
│   └── server
│       ├── import.gone.go
│       └── main.go
├── config
│   └── default.properties
├── internal
│   ├── controller
│   │   ├── init.gone.go
│   │   └── user.go
│   ├── interface
│   │   ├── entity
│   │   │   └── user.go
│   │   ├── mock
│   │   │   ├── i_depenendent.gone.go
│   │   │   ├── i_user.gone.go
│   │   │   ├── i_user_token.gone.go
│   │   │   └── priest.gone.go
│   │   ├── package.go
│   │   └── service
│   │       ├── i_depenendent.go
│   │       ├── i_user.go
│   │       └── i_user_token.go
│   ├── loader.go
│   ├── module
│   │   ├── dependent
│   │   │   ├── dependent.go
│   │   │   └── init.gone.go
│   │   └── user
│   │       ├── init.gone.go
│   │       ├── token.go
│   │       ├── user.go
│   │       └── user_test.go
│   ├── pkg
│   │   ├── e
│   │   │   └── error.go
│   │   └── utils
│   │       ├── ctx.go
│   │       ├── password.go
│   │       └── token.go
│   └── router
│       ├── auth_router.go
│       ├── init.gone.go
│       └── pub_router.go
├── scripts
│   └── mysql
│       └── initdb.d
│           └── user.sql
└── tests
    └── api
        ├── http-client.env.json
        └── user.http

2.2 简单说明

  • cmd/server/main.go 是服务的入口文件:
package main

import (
	"demo/internal"
	"github.com/gone-io/gone/v2"
)

func main() {
	gone.
		Loads(internal.Load).
		Serve()
}
  • config 是配置文件目录,支持多种配置文件格式,包括:JSON, TOML, YAML, HCL, INI, envfile or Java properties,配置文件的读取的底层是使用viper实现的。
  • internal 是业务代码目录,包括webController、 业务接口定义 和 业务逻辑实现等
    • internal/router 路由分组
    • internal/controller web接口定义
    • internal/interface 业务接口定义
    • internal/module 业务逻辑实现
  • scripts 项目脚本
  • tests 接口测试的http文件,可以直接使用goland打开
    在这里插入图片描述

3. 启动项目

3.1 数据库

该项目使用的mysql数据库,需要:

  1. 创建数据库,然后导入位于 scripts/mysql/initdb.d/user.sql的SQL文件
  2. 按实际情况修改配置文件config/properties
# 使用mysql
database.driver-name=mysql

db.host=localhost
db.port=3306
db.name=demo
db.username=root
db.password=123456

# 数据源配置 配置中,使用${key}来引用配置文件中的值
database.dsn=${db.username}:${db.password}@tcp(${db.host}:${db.port})/${db.name}?charset=utf8mb4&loc=Local

如果本地安装了docker-desktop,只需要执行:

docker compose up -d mysql

3.2 本地开发启动

首先,下载依赖:

go mod tidy

有多种方式:

  • 1. 使用gonectr来启动项目:
gonectr run ./cmd/server

会看到屏幕打印内容如下:
在这里插入图片描述

  • 2. 使用go run命令来启动
    **但是请注意,需要先执行go generate ./...来生成辅助代码,这些辅助代码包含用于将 组件(Goner)注册到框架和用于mock测试。
go generate ./...
go run ./cmd/server
  • 3. 使用goland
    点开Edit Configurations,可以已经默认添加了一个启动项,并且在Before launch配置 了 go generate ./...,所以直接点击”运行“就可以了。
    在这里插入图片描述
    在这里插入图片描述
  • 3. 使用vs code
    在vscode中已经配置了启动项和启动前的任务,所以侧边栏切换到"运行和调试"点击 运行即可。
  • .vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "server",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "cwd": "${workspaceFolder}",
            "program": "${workspaceFolder}/cmd/server",
            "preLaunchTask": "generate"
        }
    ]
}
  • .vscode/tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "generate",
            "type": "shell",
            "command": "go generate ./...",
            "problemMatcher": []
        }
    ]
}

在这里插入图片描述

3.3 服务部署

项目同时提供了docker-compose.yaml 和 Dockerfile,方便生成镜像部署到服务器上。


网站公告

今日签到

点亮在社区的每一天
去签到