跳到主要内容

搭建一个Web项目

本教程将带你一步步创建一个基于Gone框架的Web项目。通过这个简单的例子,你将了解Gone框架的基本使用方法和项目结构。

1. 安装gonectl工具

首先,我们需要安装gonectl命令行工具,它是Gone框架的核心工具,用于项目管理、代码生成等功能。在终端中执行以下命令:

go install github.com/gone-io/gonectl@latest

安装完成后,你可以在终端中输入gonectl来验证是否安装成功。

更多安装方法,参考gonectl安装

2. 创建项目

接下来,我们创建一个新的项目目录并初始化Go模块:

mkdir my-project  # 创建项目目录
cd my-project # 进入项目目录
go mod init my-project # 初始化Go模块

这些命令会创建一个名为my-project的目录,并在其中初始化一个Go模块。

3. 安装goner/gin组件

Gone框架采用组件化设计,我们需要安装Web开发所需的gin组件:

gonectl install goner/gin Load

这个命令会安装goner/gin组件,它是Gone框架对Gin(一个流行的Go Web框架)的封装,提供了更便捷的Web开发体验。

4. 创建main.go

现在,我们来创建项目的入口文件main.go

mkdir cmd  # 创建cmd目录用于存放入口文件
cd cmd # 进入cmd目录
cat <<EOF > main.go
package main

import "github.com/gone-io/gone/v2"

func main() {
gone.Serve() // 启动Gone服务
}
EOF

这个简单的main.go文件导入了Gone框架,并调用gone.Serve()方法来启动服务。Gone框架会自动加载和初始化所有注册的组件。

5. 创建controller

接下来,我们创建一个简单的控制器来处理HTTP请求:

mkdir controller  # 创建controller目录
cd controller # 进入controller目录
cat <<EOF > hello.go
package controller

import (
"github.com/gone-io/gone/v2"
"github.com/gone-io/goner/gin"
)

type hello struct {
gone.Flag // 标记这个结构体可以被Gone框架识别和管理
gin.RouteGroup \`gone:"*"\` // 自动注入路由分组,\`gone:"*"\`表示使用默认路由分组
}

func (c *hello) Mount() gin.MountError {
// 注册路由,当访问/hello路径时,返回"hello world"字符串
c.GET("/hello", func() string {
return "hello world"
})
return nil
}
EOF

这个控制器定义了一个简单的GET请求处理,当访问/hello路径时,会返回"hello world"字符串。

6. 运行项目

现在,我们可以运行这个项目了:

$ gonectl run ./cmd/
-> Execute `generate -s=/Users/jim/works/tmp/my-project -m=/Users/jim/works/tmp/my-project/cmd`
current work dir: /Users/jim/works/tmp/my-project
main package dir: /Users/jim/works/tmp/my-project/cmd
scan dirs: [/Users/jim/works/tmp/my-project]

2025/05/28 10:08:41 Server Listen At [::]:8080

gonectl run命令会自动生成必要的代码,然后启动服务。从输出可以看到,服务已经在8080端口启动了。

7. 测试接口

使用curl命令测试我们刚刚创建的接口:

$ curl http://127.0.0.1:8080/hello
{"code":0,"data":"hello world"}%

可以看到,服务返回了一个JSON格式的响应,包含状态码和数据。Gone框架会自动将控制器返回的数据封装成标准的JSON格式。

8. 项目结构

完成上述步骤后,我们的项目结构如下:

$ tree
.
├── cmd # 存放入口文件
│ ├── import.gone.go # 自动生成的导入文件
│ └── main.go # 主程序入口
├── controller # 控制器目录
│ ├── hello.go # 我们创建的hello控制器
│ └── init.gone.go # 自动生成的初始化文件
├── go.mod # Go模块定义
├── go.sum # Go依赖版本锁定
├── init.gone.go # 自动生成的根初始化文件
└── module.load.go # 自动生成的模块加载文件

项目说明

  1. module.load.go:运行gonectl install时自动生成的文件,用于加载安装的goner组件。

  2. *.gone.go:运行gonectl generategonectl run时自动生成的文件,用于加载项目中的goner组件。这些文件不需要手动修改。

  3. init.gone.go:负责加载当前包的goner组件,例如:

controller/init.gone.go
// Code generated by gonectl. DO NOT EDIT.
package controller

import "github.com/gone-io/gone/v2"

func init() {
gone.
Load(&hello{}) // 自动加载hello控制器
}
  1. import.gone.go:在main包中,负责导入其他包,确保所有组件都被正确加载:
cmd/import.gone.go
// Code generated by gonectl. DO NOT EDIT.

package main

import (
_ "my-project" // 导入项目根包
_ "my-project/controller" // 导入controller包
)
  1. 路由处理函数:在Gone框架中,控制器的处理函数可以直接返回数据,框架会自动将其转换为JSON格式并返回给前端。这大大简化了API开发流程。

通过这个简单的例子,你已经了解了Gone框架的基本使用方法。Gone框架的依赖注入和自动代码生成特性使得Web开发变得更加简单和高效。