0x00 - 目标-一个计算器项目,可以计算加法和开根号
首先要有一个根目录的概念。我们给这个项目起一个名字,叫做first_go.
看一下我们要有的目录结构长这样:
(base) vth@vthdeMacBook-Pro learn_go % tree . └── first_go ├── bin │ └── calc ├── pkg └── src ├── calc │ └── calc.go └── simplemath ├── add.go ├── add_test.go ├── sqrt.go └── sqrt_test.go 7 directories, 6 files
其中bin/pkg/src是一个基于GOPATH构建体系必不可少的三大块。
pkg主要处理模块(包),而bin存放了编译好的程序,src中就全是代码了。
其中, src中的calc是入口程序,而simplemath作为一个自己写的基础库,被calc调用。
0x01 - 代码清单
calc/calc.go
package main import "os" import "fmt" import "simplemath" import "strconv" var Usage = func(){ fmt.Println("Usage: calc command [arguments] ...") } func main(){ args := os.Args[1:] if args == nil || len(args) < 2{ Usage() return } switch args[0]{ case "add": if len(args) != 3{ fmt.Println("USAGE: calc add <integer1><integer2>") return } v1, err1 := strconv.Atoi(args[1]) v2, err2 := strconv.Atoi(args[2]) if err1 != nil || err2 != nil{ fmt.Println("USAGE: calc add <integer1><integer2>") return } ret := simplemath.Add(v1, v2) fmt.Println("Result: ", ret) case "sqrt": if len(args) != 2{ fmt.Println("USAGE: calc sqrt <integer>") return } v, err := strconv.Atoi(args[1]) if err != nil{ fmt.Println("USAGE: calc sqrt <integer>") return } ret := simplemath.Sqrt(v) fmt.Println("Result: ", ret) default: Usage() } }
add.go
package simplemath func Add(a int, b int) int{ return a + b }
add_test.go
package simplemath import "testing" func TestAdd1(t, *testing.T){ r := Add(1, 2) if r != 3{ t.Errorf("Add(1, 2) failed, Got %d, expected 3.", r) } }
sqrt.go
package simplemath import "math" func Sqrt(n int) int{ v := math.Sqrt(float64(n)) return int(v) }
sqrt_test.go
package simplemath import "testing" func TestSqrt1(t *testing.T) { v := Sqrt(16) if v != 4{ t.Errorf("Sqrt(16) failed, Got %v, expected 4", v) } }
0x02 - 环境搭建
因为我们采用的是GOPATH,所以要做2个事情:
1. 将当前的项目根目录加入到GOPATH中。
2. 将GO111MODULE设置为off, 意思是要走GOPATH构建模式,不要走GOMOD.
export GOPATH="/Users/vth/Projects/learn_go/first_go" # 第一步 go env -w GO111MODULE=off # 第二步
然后我们进入到bin目录下进行编译:
go build calc
大功告成!可以用一下试试:
(base) vth@vthdeMacBook-Pro bin % ./calc add 2 3 Result: 5
标签:项目,fmt,args,0x01,add,go,simplemath,calc From: https://www.cnblogs.com/bjfu-vth/p/18114976