Files
sunhpc-go/readme.md
2026-02-18 17:09:52 +08:00

146 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 其他包使用数据库模块
```go
package repository
import (
"your-project/database"
"your-project/log"
)
type NodeRepository struct {
db *database.DB
}
// NewNodeRepository 创建仓库(延迟连接)
func NewNodeRepository() (*NodeRepository, error) {
db, err := database.GetDB()
if err != nil {
return nil, err
}
return &NodeRepository{db: db}, nil
}
// GetNode 获取节点(自动连接)
func (r *NodeRepository) GetNode(id int) (*Node, error) {
// 获取数据库引擎(会自动连接)
engine, err := r.db.GetEngine()
if err != nil {
return nil, fmt.Errorf("数据库连接失败: %w", err)
}
var node Node
err = engine.QueryRow("SELECT id, name FROM nodes WHERE id = ?", id).
Scan(&node.ID, &node.Name)
if err != nil {
return nil, err
}
return &node, nil
}
// CreateNode 创建节点
func (r *NodeRepository) CreateNode(name string) error {
engine, err := r.db.GetEngine()
if err != nil {
return err
}
_, err = engine.Exec("INSERT INTO nodes (name) VALUES (?)", name)
return err
}
```
## 服务层使用
```go
package service
import (
"your-project/repository"
"your-project/log"
)
type NodeService struct {
repo *repository.NodeRepository
}
func NewNodeService() (*NodeService, error) {
repo, err := repository.NewNodeRepository()
if err != nil {
return nil, err
}
return &NodeService{repo: repo}, nil
}
func (s *NodeService) ListNode() error {
// 自动连接数据库
nodes, err := s.repo.GetAllNodes()
if err != nil {
return err
}
for _, node := range nodes {
log.Infof("Node: %v", node)
}
return nil
}
```
## 命令处理
```go
package main
import (
"your-project/cmd"
"your-project/database"
"your-project/log"
"github.com/spf13/cobra"
)
func main() {
var rootCmd = &cobra.Command{Use: "sunhpc"}
// init database 命令
var initCmd = &cobra.Command{
Use: "init database",
Short: "初始化数据库",
Run: func(cmd *cobra.Command, args []string) {
force, _ := cmd.Flags().GetBool("force")
// 获取DB实例只加载配置
db, err := database.GetDB()
if err != nil {
log.Fatal(err)
}
// 初始化schema会根据force参数决定行为
if err := db.InitSchema(force); err != nil {
log.Fatal(err)
}
log.Info("数据库初始化成功")
},
}
initCmd.Flags().BoolP("force", "f", false, "强制重新初始化")
rootCmd.AddCommand(initCmd)
// node list 命令 - 自动连接已存在的数据库
var nodeCmd = &cobra.Command{
Use: "node list",
Short: "列出所有节点",
Run: func(cmd *cobra.Command, args []string) {
service, err := service.NewNodeService()
if err != nil {
log.Fatal(err) // 如果数据库不存在,这里会报错
}
if err := service.ListNode(); err != nil {
log.Fatal(err)
}
},
}
rootCmd.AddCommand(nodeCmd)
rootCmd.Execute()
}
```