Golang 快速熟悉

2019-11-27  本文已影响0人  Mr_Michael

一、简介

Go(又称Golang)是Google开发的一种静态强类型编译型并发型,并具有垃圾回收功能编程语言。Go于2009年11月正式宣布推出,成为开放源代码项目,支持LinuxmacOSWindows等操作系统。

1.Go 语言的目标与意义

2.与其他语言的比较

3.Go的缺失特性

二、Go项目风格

1.撰写风格

Go 语言编码规范

备注:除了第二点外,在不符合上述规定时,仍旧可以编译,但使用了内置gofmt工具后,会自动整理代码,使之符合规定的撰写风格。

2.项目架构

1)Go的工作区的目录结构

$GOPATH路径下

目录 用途
src Go源代码
pkg 编译时,生成的对象文件
bin 编译后的程序

注意 当创建目录时,文件夹名称永远不应该包含空格,而应该使用下划线 "_" 或者其它一般符号代替。

项目目录示例

bin/
    hello                          # 生成的執行檔
    outyet                         # 生成的執行檔
pkg/
    linux_amd64/
        github.com/golang/example/
            stringutil.a           # 編譯時,生成的對象檔案
src/
    github.com/golang/example/
        .git/                      # 外部 Git 庫的詮釋資料
    hello/
        hello.go               # Git 庫的程式碼
    outyet/
        main.go                # Git 庫的程式碼
        main_test.go           # Git 庫的程式碼(測試用的程式)
    stringutil/
        reverse.go             # Git 庫的程式碼
        reverse_test.go        # Git 庫的程式碼(測試用的程式)
    golang.org/x/image/
        .git/                      # 外部 Git 庫的詮釋資料
    bmp/
        reader.go              # Git 庫的程式碼
        writer.go              # Git 庫的程式碼
2)编译器

当前有两个Go编译器分支,分别为官方编译器gc和gccgo

3)文件扩展名与包(package)

三、Go运行环境与软件安装

1.支持的平台与架构

2.环境变量

重要的环境变量

备注: $GOHOSTOS$GOHOSTARCH 这两个变量只有在进行交叉编译的时候才会用到,如果不进行设置,它们的值会和$GOOS$GOARCH一样。

通过修改$HOME/.bashrc或/etc/profile文件来配置unix环境变量

3.安装Go

默认操作系统为Ubuntu。

1)安装 C 工具

Go 的工具链是用 C 语言编写的,因此在安装 Go 之前你需要先安装相关的 C 工具。

sudo apt-get install bison ed gawk gcc libc6-dev make
2)安装golang

如果要从旧版本的Go升级,则必须先删除现有版本

export PATH=PATH:GOROOT/bin


- 获取 Go 源代码编译安装

如果二进制分行版不适用于当前操作系统和体系结构的组合,可以从 [官方页面](https://golang.org/dl/) 下载 Go 的源码包到计算机上,然后将解压后的目录 `go` 通过命令移动到 `$GOROOT` 所指向的位置。

  ```shell
wget https://dl.google.com/go/go1.13.4.src.tar.gz
tar -zxvf go1.13.4.src.tar.gz
sudo mv go $GOROOT
  ```

 编译源代码

  ```shell
cd $GOROOT/src
./all.bash        # 包含安装测试
# 或
./make.bash   # 仅构建
  ```

  Go 安装目录(`$GOROOT`)的文件夹结构:

  - `/bin`:包含可执行文件,如:编译器,Go 工具
  - `/doc`:包含示例程序,代码工具,本地文档等
  - `/lib`:包含文档模版
  - `/misc`:包含与支持 Go 编辑器有关的配置文件以及 cgo 的示例
  - `/os_arch`:包含标准库的包的对象文件(`.a`)
  - `/src`:包含源代码构建脚本和标准库的包的完整源代码(Go 是一门开源语言)
  - `/src/cmd`:包含 Go 和 C 的编译器和命令行脚本

- 安装测试

 在Go 的工作目录$GOPATH创建工作空间(`src`、`pkg` 和 `bin`),在src/hello目录下创建hello.go。

```go
package main

import "fmt"

func main() {
  fmt.Printf("hello, world\n")
}

编译hello.go

cd $GOPATH/src/hello/
go build

4.Go runtime 虚拟机

​ 尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime当中(在目录 $GOROOT/src/runtime中找到相关内容)。

​ 这个 runtime 类似 Java 和 .NET 语言所用到的虚拟机,它负责管理包括内存分配、垃圾回收、栈处理、goroutine、channel、切片(slice)、map 和反射(reflection)等等。

​ Go 的可执行文件都比相对应的源代码文件要大很多,这说明了 Go 的 runtime 嵌入到了每一个可执行文件当中。Go 不需要依赖任何其它文件,它只需要一个单独的静态文件。

1)垃圾回收器
2)Goroutine 并行设计

Goroutine能够让程序以异步的方式运行,不需要担心一个函数导致程序中断,因此Go也非常适合网络服务。

Goroutine是类似线程的概念(但Goroutine并不是线程)。

程序并行示例

// 程序顺序执行
func main() {
    // 假設 loop 是一個會重複執行十次的迴圈函式。
    // 迴圈執行完畢才會往下執行。
    loop()
    // 執行另一個迴圈。
    loop()
}
// 程序并行执行
func main() {
    // 透過 `go`,我們可以把這個函式同步執行,
    // 如此一來這個函式就不會阻塞主程式的執行。
    go loop()
    // 執行另一個迴圈。
    loop()
}

Go让其中一个函数同步运行,如此就不需要等待该函数运行完后才能运行下一个函数。

5.Go 解析器【了解】

Go 解释器

类似于python解析器,可以让go程序像脚本语言一样逐行编译和执行。

6. IDE

1)LiteIDE

LiteIDE 是一款非常好用的轻量级 Go 集成开发环境(基于 QT、Kate 和 SciTE),包含了跨平台开发及其它必要的特性,对代码编写、自动补全和运行调试都有极佳的支持。它采用了 Go 项目的概念来对项目文件进行浏览和管理,它还支持在各个 Go 开发环境之间随意切换以及交叉编译的功能。

同时,它具备了抽象语法树视图的功能,可以清楚地纵览项目中的常量、变量、函数、不同类型以及他们的属性和方法。

可以从 GitHub 页面获取详情。

2)GoClipse

其依附于著名的 Eclipse 这个大型开发环境,虽然需要安装 JVM 运行环境,但却可以很容易地享有 Eclipse 本身所具有的诸多功能。这是一个非常好的编辑器,完善的代码补全、抽象语法树视图、项目管理和程序调试功能。

可以从 GitHub 页面获取详情。

7.格式化工具

go fmtgofmt)这个工具可以将源代码格式化成符合官方统一标准的风格,属于语法风格层面上的小型重构。遵循统一的代码风格是 Go 开发中无可撼动的铁律,因此你必须在编译或提交版本管理系统之前使用 gofmt 来格式化你的代码。

# 格式化源文件的代码
gofmt –w program.go
    # 不加参数 -w 则只会打印格式化后的结果而不重写文件
    
# 格式化并重写所有 Go 源文件
gofmt -w *.go

# 会格式化并重写 map1 目录及其子目录下的所有 Go 源文件
gofmt map1 

8.代码文档生成器

go doc 工具会从 Go 程序和包文件中提取顶级声明的首行注释以及每个对象的相关注释,并生成相关文档。

go doc package # 获取包的文档注释,例如:go doc fmt 会显示使用 godoc 生成的 fmt 包的文档注释。
go doc package/subpackage # 获取子包的文档注释,例如:go doc container/list。
go doc package function # 获取某个函数在某个包中的文档注释,例如:go doc fmt Printf 会显示有关 fmt.Printf() 的使用说明。

这个工具只能获取在 Go 安装目录下 ../go/src 中的注释内容。

它还可以作为一个本地文档浏览 web 服务器。在命令行输入 godoc -http=:6060,然后使用浏览器打开 http://localhost:6060 后,就可以看到本地文档浏览服务器提供的页面。

9.其他工具

四、首个Go程序和库

1.第一个Go程序

参考:golang-examples

注意:可以将第3、第4步简化为go run github.com/user/hello

2.第一个Go Library

参考:Golang标准库

上一篇 下一篇

猜你喜欢

热点阅读