0
点赞
收藏
分享

微信扫一扫

Golang系列之go modules工程管理

Golang系列之go modules工程管理

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

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

使用Go Modules就可以减少对GOPATH的依赖
Golang系列之go modules工程管理_mysql

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

Golang系列之go modules工程管理_开发语言_02

全局配置,可以在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

Golang系列之go modules工程管理_开发语言_03

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


举报

相关推荐

0 条评论