1.创建项目文件夹
mkdir gin_project
cd gin_project
2.初始化 Go 模块
// 在 gin_project 目录下运行:
go mod init gin_project
// 这会在当前目录创建一个 go.mod 文件,管理 Go 依赖项。
3.安装 Gin(指定版本)
go get github.com/gin-gonic/gin@v1.10.0
//安装完成后,你可以运行:go mod tidy 来清理和管理依赖项。(不运行好像也没什么问题)
4.创建main.go文件,添加一下内容:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
"os"
"scanMint/Common"
"scanMint/Controller"
"scanMint/Cron"
"scanMint/Event"
"scanMint/Middleware"
)
func main() {
InitConfig()
db := Common.InitDB()
defer db.DB()
r := gin.Default()
r = CollectRouter(r)
Cron.Cron()
port := viper.GetString("server.port")
if port != "" {
r.Run(":" + port)
}
Event.ListenEvent()
//r.Run("") // 监听并在 0.0.0.0:8080 上启动服务
}
func InitConfig() {
workDir, _ := os.Getwd()
viper.SetConfigName("setting")
viper.SetConfigType("yml")
viper.AddConfigPath(workDir)
err := viper.ReadInConfig()
if err != nil {
fmt.Println(err)
}
viper.WatchConfig()
}
func CollectRouter(r *gin.Engine) *gin.Engine {
r.Use(Middleware.Cors())
r.POST("/api/get_token_balance", Middleware.IsRunning(), Controller.GetTokenBalance) //获取用户当前LP数量
r.POST("/api/is_address_exist", Middleware.IsRunning(), Controller.IsAddressExist) //查询地址是否存在
r.POST("/api/record_address", Middleware.IsRunning(), Controller.RecordAddress) //保存地址
r.POST("/api/get_user_reward", Middleware.IsRunning(), Controller.GetUserReward) //获取用户当前未提取挖矿奖励
r.POST("/api/admin_set_reward", Middleware.IsRunning(), Controller.AdminSetReward) //管理员写入挖矿奖励接口
r.POST("/api/get_user_share_reward", Middleware.IsRunning(), Controller.GetUserShareReward) //获取用户当前未提取分享奖励
r.POST("/api/admin_set_share_reward", Middleware.IsRunning(), Controller.AdminSetShareReward) //管理员写入分享奖励接口
r.POST("/api/get_user_node_reward", Middleware.IsRunning(), Controller.GetUseNodeReward) //获取用户当前未提取节点奖励
r.POST("/api/admin_set_node_reward", Middleware.IsRunning(), Controller.AdminSetNodeReward) //管理员写入分享节点接口
r.POST("/api/get_node_address", Middleware.IsRunning(), Controller.GetNodeAddress) //获取节点地址列表接口
//工具类
r.POST("/api/get_empty_data", Middleware.IsRunning(), Controller.GetEmptyData) //
r.POST("/api/insert_reward_tool", Middleware.IsRunning(), Controller.InsertRewardTool) //获取昨天合约增长余额
r.POST("/api/count_reward", Middleware.IsRunning(), Controller.CountReward) //获取昨天合约增长余额
r.POST("/api/count_bigInt", Middleware.IsRunning(), Controller.CountBigInt) //获取昨天合约增长余额
r.POST("/api/set_reward", Middleware.IsRunning(), Controller.SetReward) //获取昨天合约增长余额
r.POST("/api/balance_is_maintain", Middleware.IsRunning(), Controller.BalanceIsMaintain) //获取昨天合约增长余额
r.POST("/api/get_all_rewards", Middleware.IsRunning(), Controller.GetAllRewards) //获取昨天合约增长余额
r.POST("/api/get_all_withdraw", Middleware.IsRunning(), Controller.GetAllWithdraw) //获取昨天合约增长余额
r.POST("/api/get_user_all_reward", Middleware.IsRunning(), Controller.GetUserAllReward) //获取昨天合约增长余额
return r
}
5.go项目打包linux二进制文件:
// linux(-o myapp:指定生成的二进制文件名为myapp)
// CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o createToken main.go
// CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o createLiquility main.go
// CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o fundingRecord main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go
// windows exe
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build .
6.打包abi文件
// --abi abi.json 为我们要通过abigen生成go文件的 源文件路径
// --pkg main 为我们要生成go文件里面的包名(生成的go文件第一行代码 如:package main)
// --type Token 为我们生成go文件里可操作对象/方法/变量的组成部分,
// 不写默认是包名,使用就是instance, err := Abi.NewAbi(mintAddress, client)
// 这里写是Token,使用就是instance, err := Abi.NewToken(mintAddress, client)
abigen --abi=token.abi --pkg=Abi --type=Token --out=token.go
其他:
// 项目开启模块支持:
go env -w GO111MODULE=on
// goland无法解析目录:
// 关闭项目,删除项目目录里的.idea文件夹,重新打开
golang版本管理器g的使用:
// 查看当前可供安装的stable状态的go版本
g ls-remote stable
// 安装指定版本的go
g install 1.23.7
//切换到指定go版本
g use 1.23.7