美文网首页
go创建模块(第三部分)

go创建模块(第三部分)

作者: 护念 | 来源:发表于2023-07-07 15:09 被阅读0次

6. 添加测试

  1. 在greetings目录下,新建一个测试文件touch greetings_test.go
// greetings_test.go
package greetings

import (
    "testing" // go原生支持
    "regexp" // 原生支持
)

// 测试输入一个name后能正常返回
func TestHelloName(t *testing.T) {
    name := "Gladys"

    // 正则其中包含名称 name
    want := regexp.MustCompile(`\b`+name+`\b`)
    msg, err := Hello("Gladys")
    if !want.MatchString(msg) || err != nil {
        t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
    }
}

// 测试名称为空时 应返回错误
func TestHelloEmpty(t *testing.T) {
    msg, err := Hello("")
    if msg != "" || err == nil {
        t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
    }
}
  1. 在greetings目录下运行go test
 dongmingyan@pro ⮀ ~/go_playground/greetings ⮀ go test
PASS
ok      example.com/greetings   0.547s
 dongmingyan@pro ⮀ ~/go_playground/greetings ⮀ go test -v
=== RUN   TestHelloName
--- PASS: TestHelloName (0.00s)
=== RUN   TestHelloEmpty
--- PASS: TestHelloEmpty (0.00s)
PASS
ok      example.com/greetings   0.118s

小结:

  1. go原生支持测试(testing)
  2. go中的测试通过函数实现,函数名表明测试项
  3. 发现测试不通过直接产生错误
  4. 命令go testgo test -v

7.编译和安装应用

前面我们已经写了些go代码,但是对go命令的了解还少,这里学习下go相关的命令

  1. 我们来到hello目录下,执行go build,此时生成了hello 可执行文件,在当前目录下 ./hello 可执行
dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go build
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ tree
.
├── go.mod
├── hello
└── hello.go

1 directory, 3 files
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ ./hello
map[lisi:Hail, lisi! Well met! wangwu:Great to see you, wangwu! 张三:Hail, 张三! Well met!]
  1. go install的作用是生成可执行文件并放置到配置的bin目录下
    首先我们看下当前执行会放到的目录是哪个,执行命令go list -f '{{.Target}}'
dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go list -f '{{.Target}}'
/Users/dongmingyan/go/bin/hello

可以看到放置的路径是/Users/dongmingyan/go/bin,这里本质上是默认的GOPATH下的bin路径
我们可以设置GOBIN路径来更改此路径,执行go env -w GOBIN=/usr/local/go/bin

dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go env | grep GOPATH
GOPATH="/Users/dongmingyan/go"
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go env -w GOBIN=/usr/local/go/bin
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go list -f '{{.Target}}'
/usr/local/go/bin/hello

将这个bin路径放到PATH变量中,那么执行go install后在任意目录下,都可以执行我们生成的命令

  1. 执行go install
    上一步我们已经将路径改成了/usr/local/go/bin,在hello目录下执行go install,然后去/usr/local/go/bin检查可以看到我们生成的hello可执行文件
dongmingyan@pro ⮀ ~/go_playground/hello ⮀ sudo go install
Password:
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ cd /usr/local/go/bin
 dongmingyan@pro ⮀ /usr/local/go/bin ⮀ ls
go    gofmt hello

补充go环境变量go env

dongmingyan@pro ⮀ /usr/local/go/bin ⮀ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN="/usr/local/go/bin"
GOCACHE="/Users/dongmingyan/Library/Caches/go-build"
GOENV="/Users/dongmingyan/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/dongmingyan/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/dongmingyan/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.20.5"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/j8/08btplt912l0m3jg760nkbpw0000gn/T/go-build496445168=/tmp/go-build -gno-record-gcc-switches -fno-common"

当前关注以下几个

  • GOPATH go主要目录(一般在家目录下)
  • GOBIN go可执行文件安装位置
  • GOPROXY 包下载url地址

小结:

  • go run 用于代码的快速编译和运行,不会生成可执行文件(常用于写代码即使运行)
  • go build 生成本地可执行文件,但不会安装
  • go install 生成可执行文件并安装到本地
  • go env -w 用于改变go 环境变量的值

相关文章

  • go基础例子

    创建模块 2. 初始化模块 创建接口go 运行 创建第二个模块 添加greetings.go 调用模块, 编辑he...

  • go模块

    创建模块 创建目录:mkdir greetings 进入目录:cd greetings 创建mod依赖:go m...

  • GO Modules 使用

    旧项目迁移,打算使用GO Modules 作为依赖管理。 go版本 1.12 私人依赖包,如何处理 1. 创建模块...

  • go mod vendor创建工程

    创建空工程 结果是在当前目录下生产一个文件: 创建main.go 引入第三方库 修改main.go 执行go mo...

  • beego cache模块源码分析笔记一

    cache模块是beego中的一个独立模块,这个模块的设计方式是经典的工厂模式。 cache.go:抽象接口部分、...

  • Getting started with multi-modul

    这一章介绍Go语言多模块工作空间的基础概念,我们会在共享的多模块工作空间创建两个模块并修改它们,从而在构建程序过程...

  • 1. Magneto 2 模块开发 - 简单的 Hello Wo

    Magento 2 模块开发基础部分 - 目录 本文主要描述如何创建一个最简单的模块。 模块 (Module) 也...

  • 使用 Go Module 构建项目

    生成项目 创建一个目录作为 GO 项目目录。然后进入该目录并初始化项目。 目录下会生成模块配置文件go.mod,其...

  • 【源码剖析】Launcher 8.0 源码 (11) --- L

    这篇依然讲解桌面布局的创建,这一部分依然服务于setupViews,创建每一个UI模块,所有模块都创建完了也就组成...

  • Golang 游戏leaf系列(六) Go模块

    在Golang 游戏leaf系列(一) 概述与示例(下文简称系列一)中,提到过Go模块用于创建能够被 Leaf 管...

网友评论

      本文标题:go创建模块(第三部分)

      本文链接:https://www.haomeiwen.com/subject/sdfdudtx.html