给Java程序员的Go私房菜(二) Hello Golang

栏目: IT技术 · 发布时间: 4年前

内容简介:还是抵不住相信大家学习的每一门语言都是从再来细讲一下

还是抵不住 vscode 的诱惑,我还是选择了它,但是由于国内网络环境,大部分插件还是安装失败,即使科学上网了,还是失败,但是我运气好,全部successful。但办法还是有的,把对应的vscode的 go 插件,下载下来直接放到 gopathbin 目录下就可以了,具体操作我这里不详细解释了,直接传送门: vscode搭建go开发环境

GO的 HelloWord

相信大家学习的每一门语言都是从 HelloWord 开始的吧。这里我们依旧这个规矩开始,首先回顾一下 gopath 目录

goworks //工作空间名,自己随便取(gopath目录)
	-- bin //golang编译后生成的可执行文件
	-- pkg //golang编译时生成的中间文件(比如:.a)golang编译包时
	-- src //存放源代码,也就是存放项目的路径

复制代码

再来细讲一下 src 目录的规则,一般是公司或组织域名做文件夹的名,然后具体划分小组或项目,对于个人来说的话,大部分人是用的Github域名+Github账号,我这里也是使用的这种方式。

给 <a href='https://www.codercto.com/topics/22013.html'>Java</a> 程序员的Go私房菜(二) Hello Golang

然后我们创建一个文件夹 hello 作为一个项目。在该目录中创建一个 main.go 文件:

package main

import "fmt"

func main() {
	fmt.Println("Hello World.")
}

复制代码

go build

go build 表示将源代码编译成可执行文件。

在hello目录下执行:

go build
复制代码

或者在其他目录执行以下命令:

go build hello
复制代码

go编译器会去 GOPATH 的src目录下查找你要编译的 hello 项目

注意:一般建议去项目目录下执行

给Java程序员的Go私房菜(二) Hello Golang

看到报错的提示是找不到hello这个package ,他首先回去你的 GOROOT 下的 src 查找,没有的话再去 GOPATH 下的 src 下查找。但这里我们并没有在src下直接创建hello这么一个目录,所以固然找不到。

编译得到的可执行文件会保存在执行编译命令的当前目录下,如果是windows平台会在当前目录下找到 hello.exe 可执行文件。

可在终端直接执行该 hello.exe 文件:

E:\goworks\src\github.com\ha2ryzhang\hello>hello.exe
Hello World.
复制代码

我们还可以使用 -o 参数来指定编译后得到的可执行文件的名字。

go build -o heygo.exe
复制代码

Go 中的包管理

包的命名

go 语言的包的命名,遵循简洁、小写、和 go 文件所在目录同名的原则,这样就便于我们引用,书写以及快速定位查找。

package main

import "net/http"

func main() {
	http.ListenAndServe("127.0.0.1:8080",handler);
}
复制代码

以域名命名包

package main

import "debugers.com/utils" 
复制代码

使用 Github 账号命名包

package main

import "github.com/ha2ryzhang/utils"
复制代码

这就是换成github.com命名的方式。

main 包

当把一个go文件的包名声明为 main 时,就等于告诉go编译程序,我这个是一个可执行的程序,那么go编译程序就会尝试把它编译为一个二进制的可执行文件。

一个main的包,一定会包含一个main()函数,这种我们也不陌生,比如C和Java都有main()函数,它是一个程序的入口,没这个函数,程序就无法执行。

在go语言里,同时要满足main包和包含main()函数,才会被编译成一个可执行文件。

导入包

import "fmt"
import (
	"net/http"
	"fmt"
)
复制代码

对于多于一个路径的包名,在代码中引用的时候,使用全路径最后一个包名作为引用的包名,比如net/http,我们在代码使用的是http,而不是net。

编译器会使用我们设置的这两个路径,再加上import导入的相对全路径来查找磁盘上的包,比如我们导入的fmt包,编译器最终找到的是$GOROOT/fmt这个位置。

值得了解的是:对于包的查找,是有优先级的,编译器会优先在GOROOT里搜索,其次是GOPATH,一旦找到,就会马上停止搜索。如果最终都没找到,就报编译异常了。

远程包导入

import "github.com/ha2ryzhang/xxx"
复制代码
GOPATH

命名导入

package main

import (
	"fmt"
	myfmt "mylib/fmt"
)

func main() {
	fmt.Println()
	myfmt.Println()
}

package main
import (
	_ "mylib/fmt"
)
复制代码

go 的机制是不允许导入相同名的包的,除非给包重命名,就比如上面的 myfmt ,只需在导包时加个别名即可。

注意: go 是不允许导入没有使用的包的,会导致编译错误,但如果非要导入也不是不行,看上面第三种方式,在包路径前面加上 _ 就可以了,这种方式可以使用包的 init() 函数。

包的init函数

init 函数

package mysql

import (
	"database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func init() {
	sql.Register("mysql", &MySQLDriver{})
}
复制代码

因为我们只是想执行这个 mysql 包的init方法,并不想使用这个包,所以我们在导入这个包的时候,需要使用_重命名包名,避免编译错误。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

浪潮之巅(下册)

浪潮之巅(下册)

吴军 / 人民邮电出版社 / 2013-6 / 45.00元

《浪潮之巅(第2版)(下册)》不是一本科技产业发展历史集,而是在这个数字时代,一本IT人非读不可,而非IT人也应该阅读的作品。一个企业的发展与崛起,绝非只是空有领导强人即可达成。任何的决策、同期的商业环境,都在都影响着企业的兴衰。《浪潮之巅》不只是一本历史书,除了讲述科技顶尖企业的发展规律,对于华尔街如何左右科技公司,以及金融风暴对科技产业的冲击,也多有着墨。此外,《浪潮之巅》也着力讲述很多尚在普......一起来看看 《浪潮之巅(下册)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具