使用包和測試

Go天生就是爲了支持良好的項目管理體驗而設計的ide

一、包,go項目和文件名沒有關係,和src下目錄結構有關函數

go使用包來管理接口、結構體、方法和變量測試

包名通常和文件目錄名相同,若是不一樣,構建、安裝會以代碼包名爲準,可是生成的構建文件是以目錄名命名的。ui

一個目錄下不能有不一樣包名的代碼文件spa

下面經過案例介紹設計

1)、go項目結構一般以下:3d

我本地GOPATH路徑爲F:\goLangStudy\demo,已經設置了環境變量。code

bin中是編譯後的可執行文件blog

pkg中是編譯後的包文件接口

src中是源碼目錄

其中bin和pkg文件夾若是沒有,go會自動建立

2)、在src文件夾下建立文件結構以下

3)、math.go和math_pkg.go文件使用同一個包,最終會被編譯到一個二進制包文件math.a中;此處可說明文件名能夠和包名不同

 math_pkg.go文件以下:

package math

func Add(a, b int) int {
    return a + b
}

func Substract(a, b int) int {
    return a - b
}

math.go文件以下:

package math

func Multiply(a, b int) int {
    return a * b
}

func Divide(a, b int) int {
    if b == 0 {
        panic("Can not divided by zero")
    }
    return a / b
}

4)、一個項目只能有一個main包,main包相對src的目錄結構就對應執行go install main包目錄

main.go文件以下(import中math是net.duokr/math源碼包別名):

package main

import (
    "fmt"
    math "net.duokr/math"
)

func main() {
    var a = 100
    var b = 200

    fmt.Println("Add demo:", math.Add(a, b))
    fmt.Println("Substract demo:",math.Substract(a,b))
    fmt.Println("Multiply demo:",math.Multiply(a,b))
    fmt.Println("Divide demo:",math.Divide(a,b))
}

5)、編寫一個腳本文件,省的每次去執行多行一樣的命令,build.bat文件以下(我本地配置了環境變量,就把設置GOPATH那段註釋了):

@echo off
rem set GOPATH=GOPATH;F:\goLangStudy\demo
set GOBIN=F:\goLangStudy\demo\bin
go build net.duokr\math
go build main.go
go install main

在src文件夾下,執行完腳本後,目錄結構以下(src文件夾下會有個main.exe,是由go build main.go生成):

能夠經過go run命令執行main.go;也能夠直接運行bin下的bin.exe,查看結果

 二、src下的main文件夾不是必須的,main包的文件名也不必定叫main.go,下面更改後以下

 三、測試代碼編寫

在math文件夾下建立math_test.go文件,編寫測試代碼,在當前測試文件所在路徑下執行go test命令,會自動執行以_test.go結尾的文件中Test開頭的函數,而且測試函數參數爲

*testing.T類型

math_test.go代碼以下

package math

import(
    "testing"
    "fmt"
)

func TestAdd(t *testing.T){
    var a=100
    var b=200

    var val=Add(a,b)
    if val!=a+b{
        t.Error("Test Case [","TestAdd","] Failed")
    }else{
        fmt.Println("Add Method Pass")
    }
}

func TestSub(t *testing.T){
    var a=100
    var b=200

    var val=Substract(a,b)
    if val!=a-b{
        t.Error("Test Case [","TestAdd","] Failed")
    }else{
        fmt.Println("Substract Method Pass")
    }
}

func TestDemo(t *testing.T){
    fmt.Println("測試代碼")
}

func testDemo(t *testing.T){
    fmt.Println("不是測試代碼")
}

func TessDemo(t *testing.T){
    fmt.Println("不是測試代碼")
}
相關文章
相關標籤/搜索