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的工程管理就更加便捷规范
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)