Golang 工程管理
我们以前写go代码时,全部挤在main.go
一个文件中,是因为我们还没有学习go语言的工程管理。导致我们的代码又臭又长。然而在实际开发中,我们需要模块化编程
。这篇文章记录go官方推荐的go项目工程目录结构和如何引入第三方库使用
。
第一步
新建一个空目录
mkdir go
cd go
mkdir src
mkdir bin
mkidr pkg
第二步
配置环境变量
- GOPATH
- GOBIN
export GOPATH=/..../go
export GOBIN=/...go/bin
第三步
编写代码
为了方便演示,继续创建子目录
cd src
mkdir a
mkdir b
mkdir c
touch main.go
此时,src中有三个空子目录,一个go文件。
- 进入a文件夹,创建 a.go文件。
- 进入b文件夹,创建b1.go和b2.go文件。
- 进入c文件夹,依次创建c1和c2文件夹,之后分别创建c1.go和c2.go。
此时结构为:
pkg
bin
src
├── a
│ └── a.go
├── b
│ └── b1.go
| └── b2.go
├── c
│ ├── c1
│ │ └── c1.go
│ └── c2
│ └── c2.go
├── main.go
依次书写代码:
a.go
package a
import "fmt"
func PrintA() {
fmt.Println("a.go file")
}
type User struct {
Name string
Password string
}
b1.go
package b
import "fmt"
func PrintB1() {
fmt.Println("b1.go file")
}
b2.go
package b
import "fmt"
func PrintB2() {
fmt.Println("b2.go file")
}
c1.go
package c1
import "fmt"
func PrintC1() {
fmt.Println("c1.go file")
}
c2.go
package c2
import "fmt"
func PrintC2() {
fmt.Println("c2.go file")
}
main.go
package main
import (
"a"
"b"
"c/c1"
"c/c2"
)
func main() {
a.PrintA()
b.PrintB1()
b.PrintB2()
c1.PrintC1()
c2.PrintC2()
}
需要注意以下几点:
让外界可以访问的函数和结构体,函数名首字母必须大写,结构体名称必须大写,暴露某个成员,成员名称也必须大写。
同一个文件夹中,package的名称必须相同。
package main
有且只有一个。
使用第三方库
以redigo为例
redigo
是go语言中一个访问redis的客户端。
go get github.com/garyburd/redigo/redis
go get
会使用git
下载。
使用
package main
import "github.com/garyburd/redigo/redis"
func main() {
con,err := redis.Dial("tcp","127.0.0.1:6379")
if err != nil {
fmt.Println("Connect to redis error", err)
return
}
defer con.Close()
stu_name,err := con.Do("GET","stu_name")
if err != nil {
fmt.Println("redis get failed:", err)
} else {
fmt.Printf("get stu_name: %s \n", stu_name)
}
}