使用 Cobra 包解析参数连接 PostgreSQL 15

本文将展示如何使用 Golang 连接 PostgreSQL 15 数据库,并使用 github.com/spf13/cobra 包解析命令行参数。

代码示例

package main

import (
	"database/sql"
	"fmt"
	"log"

	"github.com/spf13/cobra"
	_ "github.com/lib/pq"
)

var (
	username string
	password string
	address  string
	dbname   string
)

func main() {
	var rootCmd = &cobra.Command{
		Use:   "postgres",
		Short: "Connect to PostgreSQL",
		Run: func(cmd *cobra.Command, args []string) {
			// 连接数据库
			connStr := fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=disable", username, password, address, dbname)
			db, err := sql.Open("postgres", connStr)
			if err != nil {
				log.Fatal(err)
			}
			defer db.Close()

			// 查询数据库
			rows, err := db.Query("SELECT * FROM mytable")
			if err != nil {
				log.Fatal(err)
			}
			defer rows.Close()

			// 打印结果
			for rows.Next() {
				var id int
				var name string
				err := rows.Scan(&id, &name)
				if err != nil {
					log.Fatal(err)
				}
				fmt.Printf("ID: %d, Name: %s\n", id, name)
			}
		},
	}

	rootCmd.PersistentFlags().StringVar(&username, "username", "root", "PostgreSQL username")
	rootCmd.PersistentFlags().StringVar(&password, "password", "KXGNEYpkyxuXXfRB", "PostgreSQL password")
	rootCmd.PersistentFlags().StringVar(&address, "address", "192.168.1.100:5432", "PostgreSQL address")
	rootCmd.PersistentFlags().StringVar(&dbname, "dbname", "test", "PostgreSQL database name")

	if err := rootCmd.Execute(); err != nil {
		log.Fatal(err)
	}
}

说明

  1. 首先导入必要的包,包括 database/sqlfmtloggithub.com/spf13/cobra 以及 github.com/lib/pq 用于连接 PostgreSQL。
  2. 定义全局变量 usernamepasswordaddressdbname 用于存储命令行参数。
  3. 创建 cobra.Command 对象 rootCmd,设置 UseShortRun 属性。
  4. Run 函数中,使用 fmt.Sprintf 格式化连接字符串,并使用 sql.Open 连接到数据库。
  5. 使用 db.Query 执行查询语句,并使用 rows.Next 循环遍历结果集,使用 rows.Scan 扫描数据并打印。
  6. 使用 rootCmd.PersistentFlags().StringVar 添加命令行参数,并设置默认值。
  7. 最后使用 rootCmd.Execute 执行命令。

总结

本文展示了如何使用 Golang 连接 PostgreSQL 15 数据库并使用 Cobra 包解析命令行参数。您可以根据需要修改代码以满足您的实际需求。

Golang 连接 PostgreSQL 15 使用 Cobra 解析参数

原文地址: https://www.cveoy.top/t/topic/nheK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录