Golang系列之go modules工程管理

x33g5p2x  于2022-02-07 转载在 Go  
字(1.8k)|赞(0)|评价(0)|浏览(354)

Golang系列之go modules工程管理

在上一章的学习中,我们知道写个程序要执行的话,有两种方法,但是如果一个大型项目,要运行这些文件,如何都要一个一个编译执行?这些文件之间如何进行协调开发?这个就涉及到go的工程管理

早期 Go 语言使用 makefile 作为临时方案,到了 Go 1 发布时引入了强大无比的 Go 命令行工具,从 Go 1.11 版本开始,官方提供了 Go Modules 管理项目和依赖,从 1.13 版本开始,更是默认开启了对 Go Modules 的支持

使用Go Modules就可以减少对GOPATH的依赖

在Goland里配置Go Modules,点击Setting->Go->Go Modules,GOPROXY=https://goproxy.io,direct

全局配置,可以在cmd窗口执行命令:

go env -w GOPROXY=https://goproxy.io,direct

如何goland新建一个go.mod文件

module golangSample

以mysql数据库连接的例子,看看go modules怎么进行项目管理的,新建一个文件夹命名mysql,包名也命名为package mysql

package mysql

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"strings"
)

const (
	userName   = "root"
	password   = ""
	ip         = "127.0.0.1"
	port       = "3306"
	dbName     = "shop"
	driverName = "mysql"
)

var DB *sql.DB

type User struct {
	id int64
	name  string
	age int
	email string
	contactNumber string
	password string
	sex int
}

func InitDB() {
	dataSourceName := strings.Join([]string{userName, ":", password, "@tcp(", ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
	DB, _ = sql.Open(driverName, dataSourceName)
	//设置数据库最大连接数
	DB.SetConnMaxLifetime(100)
	//设置上数据库最大闲置连接数
	DB.SetMaxIdleConns(10)
	// 验证连接
	if err := DB.Ping(); err != nil {
		fmt.Println("open database fail")
		return
	}
	fmt.Println("connect success")

}

func QueryAll() {
	var user User
	rows, err := DB.Query("select * from user")
	if err != nil {
		fmt.Println("query failed.")
	}
	for rows.Next() {
		rows.Scan(&user.id , &user.name ,&user.age ,&user.email , &user.contactNumber , &user.password , &user.sex)
		fmt.Println(user)
	}
	rows.Close()
}

在mysql包外面新建一个测试文件,通过import引入的

package main

import "golangSample/mysql"

func main() {
	mysql.InitDB()
	mysql.QueryAll()
	mysql.DB.Close()
}

运行项目,对应的go.mod为自动加上相关依赖

module golangSample

go 1.15

require github.com/go-sql-driver/mysql v1.6.0

所以,go modules还是比较容易的,golang的工程管理就更加便捷规范

相关文章