03《Go语言入门》GoPath 和 GoRoot简介

本文介绍了Go语言的基础知识,包括如何编写HelloWorld程序,理解GoRoot和GoPath的作用,以及如何引用GitHub上的开源包。通过实例展示了使用goget命令获取和在项目中引用GitHub包的步骤,并解释了测试文件的命名规范。

这是我纯手写的《Go语言入门》,手把手教你入门Go。源码+文章,看了你就会🥴,此处应有掌声👏👏👏。
文章中所有的代码我都放到了github.com/GanZhiXiong/go_learning这个仓库中。

Hello World程序的过程是怎样的?

通过上一篇文章,我们编写了第一个Go程序,那么这个代码过程又是怎样的呢?
这里还是把代码再贴出来:

package main
import "fmt"
func main() {
    fmt.Println("Hello, World!")
}

第一行代码:建立一个名为main的package,这里的package和Java里面的package是类似的。
第二行代码:导入“fmt”这个包
第三行代码:写一个main()函数

那么问题来了,“fmt”包是怎么找到的呢?
这里就需要我们了解GoRoot和GoPath了。

GoPath和GoRoot

GoPath是Go的工作目录
GoRoot是Go的安装目录

使用go env命令可以查看GoPath和GoRoot
在这里插入图片描述

GoRoot

fmt包正是通过GoRoot下的src目录找到,在src目录下面我们可以看到有内置的包和函数,如fmt、math、strings等。
在这里插入图片描述
如果我想是用GitHub上的开源包,该怎么使用呢?
那就得用到GoPath了

GoPath

GoPath目录约定了三个子目录

  • src:存放源代码。go rungo install等命令会在此路径下执行
  • pkg:存放编译时生成的中间 文件(*.a)
  • bin: 存放编译后生成的可执行文件(执行go install,会在bin目录下生成可执行文件)

引用GitHub上的包

我们要引用GitHub上github.com/gomodule/redigo/redis这个包用进行Redis的操作,该怎么引用呢?

  1. 执行go get github.com/gomodule/redigo/redis获取包
    获取后,会在GoPath的src目录下生成一个/github.com/gomodule/redigo这样的目录(如果从未运行go get命令,GoPath目录是空的)
    在这里插入图片描述
  2. 在项目中引用
    创建redis_test.go文件
    将下面代码写入到redis_test.go
package main
import (
 "fmt"
 "github.com/gomodule/redigo/redis"
)
func main() {
    c, err := redis.Dial("tcp", "127.0.0.1:6379")
    if err != nil {
        fmt.Println("Connect to redis error", err)
        return
    }
    fmt.Println("redis connect succ")
    defer c.Close()
}

执行go run redis_test.go
在这里插入图片描述
竟然报错了,这是你可能会觉得是代码的问题。🥴🥴🥴
你错了。这不是错误,它是这样设计的。
go run将检测_test文件并将其视为程序包的测试文件,测试文件将被编译为单独的程序包,然后与主要测试二进制文件链接并运行。
详情见testing system

您不能将程序文件命名为* _test.go,因为这是集成的Go测试系统的一部分
要编写一个新的测试套件,请创建一个名称以_test.go结尾的文件,其中包含TestXxx函数,如此处所述。 将文件与要测试的文件放在同一软件包中。 该文件将从常规软件包生成中排除,但在运行“ go test”命令时将包括在内。 有关更多详细信息,请运行“ go help test”和“ go help testflag”。

参考go not running program with name package_test.go

解决:
你只需要将redis_test.go文件名中的test前面的下划线去掉或使用其他名称即可解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值