zoukankan      html  css  js  c++  java
  • 使用包和测试

    Go天生就是为了支持良好的项目管理体验而设计的

    1、包,go项目和文件名没有关系,和src下目录结构有关

    go使用包来管理接口、结构体、方法和变量

    包名一般和文件目录名相同,如果不同,构建、安装会以代码包名为准,但是生成的构建文件是以目录名命名的。

    一个目录下不能有不同包名的代码文件

    下面通过案例介绍

    1)、go项目结构通常如下:

    我本地GOPATH路径为F:goLangStudydemo,已经设置了环境变量。

    bin中是编译后的可执行文件

    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:goLangStudydemo
    set GOBIN=F:goLangStudydemoin
    go build net.duokrmath
    go build main.go
    go install main

    在src文件夹下,执行完脚本后,目录结构如下(src文件夹下会有个main.exe,是由go build main.go生成):

    可以通过go run命令执行main.go;也可以直接运行bin下的bin.exe,查看结果

     2、src下的main文件夹不是必须的,main包的文件名也不一定叫main.go,下面更改后如下

     3、测试代码编写

    在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("不是测试代码")
    }
     
  • 相关阅读:
    mysql事务
    mysql查询操作教程
    mysql建表约束
    mysql数据库增删改查
    node服务器响应静态资源
    windows下golang版本的升级
    Linux开机错误
    redis命令
    nginx内置变量
    nginx日志
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/9657740.html
Copyright © 2011-2022 走看看