Go语言之工作区 - Go语言中文社区

Go语言之工作区


1. 学Java的时候遇到的问题

上大二的时候,我们开了面向对象的课程,用了Java语言。第一节课下来,老师让我们自己写一个类似Hello World的代码。当时我们用的是这样的一种方式:

  1. 首先编写一个Hello.java;
  2. 用javac命令编译成class文件;
  3. 用java命令运行class文件,观察输出。

当时所有的书上都有参考,看起来这也很简单,但是实际操作的时候却发现总是提示classpath的问题。

在当时jdk1.2的情况下,classpath算是初学者的一个拦路虎了。

刚学Go语言的时候很多书上也是讲了要首先写一个go文件,然后用go run命令把这个文件跑起来观察输出。

当然也可以首先build生成可执行文件然后执行可执行文件,这一切都很像Java,而且Go还有个参数,GOPATH,也是无比的像Java,让我又回忆起了很多年前的大学时光,回忆起了classpath这个拦路虎。

2. GOPATH

当时解决classpath问题无非也就是查询搜索引擎,但是我发现用eclipse能规避这个问题。其实eclipse这种IDE帮我们做了很多事情,然后让我们少学了不少应该学到的知识。

当我准备学Go的时候,选择了Goland作为IDE,新建工程的时候,发现工程被默认的放在了“/User/myname/go”下面,用go env命令观察,这个目录就是所谓的GOPATH。

也就是说,GOPATH是我们的工作区,所有的代码都可以在这里编写,Goland默认建立的awesomeProject就在这里。

现在来看看这段代码结构:

代码结构

再来看看代码,首先看Hello.go:

package main

import "awesomeProject/day1"

func main() {
    day1.SayHello()
}

再来看看hello_lib.go:

package day1

import "fmt"

func SayHello() {
    fmt.Println("Hello, World!")
}

先说hello_lib.go,这个文件声明了一个包,这个包叫做day1,这里只有一个方法叫做SayHello,只会有一段简单的输出。

实际上这种文件叫做库源码文件,有点类似于Java的类,能够实现功能。说起Java了,就想起了Java的包,也可以通过import的方法引入到自己的代码中,然后利用引入类,实现需要的功能。

Go也不例外。而且Go引入包,其实很像Java。现在可以来看看Hello.go的引入了。但是注意,这里的import没有写绝对路径,而是写了一个相对路径。实际上,只要写上这个包在GOPATH中的路径就可以了,GOPATH不需要写。

现在我的系统里GOPATH是“/User/myname/go”,这个目录下面,会有三个约定好的目录:

  • src:源码都放在这里,这里面不同的工程分成不同的目录就可以了;
  • pkg:库源码文件,进行了install之后,就会放在这里,这里都是归档文件;
  • bin:工程build之后,会生成可执行文件,就在这个目录里。

以我刚才写的hello_lib为例,执行这个命令:

go install awesomeProject/day1

观察pkg目录:

lib目录

注意这里多了一个darwin_amd64,这是平台相关的,install之后生成的是归档文件,后缀名为.a。

如果执行这个命令:

go install awesomeProject

这时会生成可执行文件,会放在bin目录下面,这是可执行文件,可以直接执行。

3. 别人家的例子

Java可以用maven的pom文件自行下载jar包,很方便。我还是很想用Go来操作MySQL的,要操作数据库就要有驱动。Go的MySQL驱动是这样的安装的:

go get -u github.com/go-sql-driver/mysql

github的访问非常缓慢,因此我首先把这个代码放在了码云上:

go get gitee.com/zhiyoucai/mysql

很快就好了,此时观察一下pkg目录:

驱动

此时,这个驱动就被安装到了pkg目录下。此时因为是放在了GOPATH下,因此是可以直接引用这个包的。

4. 小结

上面的例子中算是讲明白了什么叫做GOPATH,其实就是工作区,所有的Go相关的工作都要在这个工作区内进行。

虽然内容基本,但是很重要,毕竟我们学一门语言是面向写工程代码的,而不是写一个工具出来玩玩。

版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/38de0740358c
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-09 21:56:33
  • 阅读 ( 793 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢