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

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

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

还是抵不住 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方法,并不想使用这个包,所以我们在导入这个包的时候,需要使用_重命名包名,避免编译错误。


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

查看所有标签

猜你喜欢:

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

Numerical Linear Algebra

Numerical Linear Algebra

Lloyd N. Trefethen、David Bau III / SIAM: Society for Industrial and Applied Mathematics / 1997-06-01 / USD 61.00

Numerical Linear Algebra is a concise, insightful, and elegant introduction to the field of numerical linear algebra.一起来看看 《Numerical Linear Algebra》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具