Golang基础-初接触

Golang的历史

起源

领导者们

1.Robert Griesemer: 参与开发 Java HotSpot 虚拟机
2.Rob Pike: Go 语言项目总负责人,贝尔实验室 Unix 团队成员
3.Ken Thompson:贝尔实验室 Unix 团队成员,C语言创始人之一
4.Russ Cox:加入开发团队后着手语言和类库方面的开发,也就是 Go 语言的标准包

linux

发展

特色

1.快速编译
2.高效执行
3.易于开发
golang

特性

1.多态性:经过接口(interface)实现
2.静态类型:类型安全
3.支持交叉编译
4.彻底支持UTF-8的编程语言
编程

特性缺失

1.不支持函数重载和操做符重载
2.不支持隐式转换(让全部的东西都显式)
3.经过另外一种途径实现面向对象设计来放弃类和类型的继承
4.尽管在接口的使用方面能够实现相似变体类型的功能,但自己不支持变体类型
5.不支持动态加载代码
6.不支持动态连接库
7.不支持泛型
8.经过 recover 和 panic 来替代异常机制
9.不支持静态变量

windows

Golang的安装(Linux)与运行环境

适用操做系统

1.Linux
2.FreeBSD
3.Mac OS X
后端

编译器

1.原生编译器 gc
    1.1 若是使用一个有不一样指令集的编译器来构建 Go 程序,就须要针对操做系统和处理器架构(32 位操做系统或 64 位操做系统)进行区别对待
    1.2 使用非分代、无压缩和并行的方式进行编译,它的编译速度要比 gccgo 更快,产生更好的本地代码,但编译后的程序不可以使用 gcc 进行连接
    1.3 标记(Flags) 是指能够经过命令行设置可选参数来影响编译器或连接器的构建过程或获得一个特殊的目标结果
        1.3.1 -I 针对包的目录搜索
        1.3.2 -d 打印声明信息
        1.3.3 -e 不限制错误打印的个数
        1.3.4 -f 打印栈结构
        1.3.5 -h 发生错误时进入恐慌(panic)状态
        1.3.6 -o 指定输出文件名
        1.3.7 -S 打印产生的汇编代码
        1.3.8 -V 打印编译器版本
        1.3.9 -u 禁止使用 unsafe 包中的代码
        1.3.10 -w 打印归类后的语法解析树
        1.3.11 -x 打印 lex tokens
api

2.非原生编译器 gccgo
一款相对于 gc 而言更加传统的编译器,使用 GCC 做为后端。GCC 是一款很是流行的 GNU 编译器,它可以构建基于众多处理器架构的应用程序。编译速度相对 gc 较慢,但产生的本地代码运行要稍微快一点。它同时也提供一些与 C 语言之间的互操做性安全

文件扩展名与包

    1. 扩展名 .go
    2. C 文件使用后缀名 .c,汇编文件使用后缀名 .s。全部的源代码文件都是经过包(packages)来组织。包含可执行代码的包文件在被压缩后使用扩展名 .a
    3. Go 语言的标准库(第 9.1 节)包文件在被安装后就是使用这种格式的文件。
    4. 注意 当你在建立目录时,文件夹名称永远不该该包含空格,而应该使用下划线 "_" 或者其它通常符号代替

ruby

环境变量

     1. $GOROOT 表示 Go 在你的电脑上的安装位置,它的值通常都是 $HOME/go,固然,你也能够安装在别的地方。
     2. $GOARCH 表示目标机器的处理器架构,它的值能够是 38六、amd64 或 arm。
    3. $GOOS 表示目标机器的操做系统,它的值能够是 darwin、freebsd、linux 或 windows。
    4. $GOBIN 表示编译器和连接器的安装位置,默认是 $GOROOT/bin,若是你使用的是 Go 1.0.3 及之后的版本,通常状况下你能够将它的值设置为空,Go 将会使用前面提到的默认值。
    5. $GOPATH 默认采用和 $GOROOT 同样的值,但从 Go 1.1 版本开始,你必须修改成其它路径。
        5.1 bin(可执行文件)
        5.2 pkg(包文件)
        5.3 src(源码文件)
    6. $GOARM 专门针对基于 arm 架构的处理器,它的值能够是 5 或 6,默认为 6。
    7. $GOMAXPROCS 用于设置应用程序可以使用的处理器个数与核数。

bash

在Linux上安装Golang

    1. 设置 Go 环境变量
        1.1 咱们在 Linux 系统下通常经过文件 $HOME/.bashrc 配置自定义环境变量,根据不一样的发行版也多是文件 $HOME/.profile,而后使用 gedit 或 vi 来编辑文件内容:
网络

export GOROOT=$HOME/go
复制代码

        1.2 为了确保相关文件在文件系统的任何地方都能被调用,你还须要添加如下内容:

export PATH=$PATH:$GOROOT/bin
复制代码

        1.3 在开发 Go 项目时,你还须要一个环境变量来保存你的工做目录。

export GOPATH=$HOME/Applications/Go
复制代码

        1.4.在完成这些设置后,你须要在终端输入指令:

source .bashrc
复制代码

以使这些环境变量生效。而后重启终端,输入 go env 和 env 来检查环境变量是否设置正确。
    2. 安装C工具
        2.1 Go 的工具链是用 C 语言编写的,所以在安装 Go 以前你须要先安装相关的 C 工具。若是你使用的是 Ubuntu 的话,你能够在终端输入如下指令( 译者注:因为网络环境的特殊性,你可能须要将每一个工具分开安装 )。

sudo apt-get install bison ed gawk gcc libc6-dev make
复制代码

    3.获取 Go 源代码
        3.1 从https://golang.org/dl/ 上下载 Go 的源码包到你的计算机上,而后将解压后的目录 go 经过命令移动到 $GOROOT 所指向的位置

wget https://storage.googleapis.com/golang/go<VERSION>.src.tar.gz<br>
tar -zxvf go<VERSION>.src.tar.gz<br>
sudo mv go $GOROOT<br>
复制代码

    4. 构建 Go
        4.1 在终端使用如下指令来进行编译工做

cd $GOROOT/src
./all.bash
复制代码

        4.2 在完成编译以后(一般在 1 分钟之内,若是你在 B 型树莓派上编译,通常须要 1 个小时),你会在终端看到以下信息被打印:


安装目录清单

README.md,做者,贡献者,许可
/bin:包含阳离子文件,如:编译器,Go工具
/doc:包含示例程序,代码工具,本地文档等
/lib:包含文档模版
/misc:包含与支持Go编辑器有关的配置文件以及cgo的示例
/os_arch:包含标准库的包的对象文件(.a)
/src:包含源代码编写脚本和标准库的包的完整源代码(Go是一门开源语言)
/src/cmd:包含Go和C的编译器和命令行脚本
复制代码

Golang调试

    1. 在合适的位置使用打印语句输出相关变量的值(print/println 和 fmt.Print/fmt.Println/fmt.Printf)。
    2. 在 fmt.Printf 中使用下面的说明符来打印有关变量的相关信息
        2.1 %+v 打印包括字段在内的实例的完整信息
        2.2 %#v 打印包括字段和限定类型名称在内的实例的完整信息
        2.3 %T 打印某个类型的完整说明
    3. 使用 panic 语句来获取栈跟踪信息(直到 panic 时全部被调用函数的列表)。
    4. 使用关键字 defer 来跟踪代码执行过程。

构建并运行

Go 程序,从 Go 1 版本开始,使用 Go 自带的更加方便的工具来构建应用程序:
        go build 编译自身包和依赖包
        go install 编译并安装自身包和依赖包

Golang格式化代码

    1. gofmt –w program.go 会格式化该源文件的代码而后将格式化后的代码覆盖原始内容(若是不加参数 -w 则只会打印格式化后的结果而不重写文件)
    2. gofmt -w *.go 会格式化并重写全部 Go 源文件
    3. gofmt map1 会格式化并重写 map1 目录及其子目录下的全部 Go 源文件
    4. gofmt 也能够经过在参数 -r 后面加入用双引号括起来的替换规则实现代码的简单重构,规则的格式:<原始内容> -> <替换内容>
        4.1 例1: gofmt -r '(a) -> a' –w *.go
        4.2例2: gofmt -r 'a[n:len(a)] -> a[n:]' –w *.go
        4.3 例3: gofmt –r 'A.Func1(a,b) -> A.Func2(b,a)' –w *.go

生成代码文档

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

其它工具

    1. go install 是安装Go包的工具,相似Ruby中的rubygems。主要用于安装非标准库的包文件,将源代码编译成对象文件。     2. go fix用于将您的Go代码从旧的发行版迁移到最新的发行版,它主要负责简单的,重复的,枯燥无味的修改工做,若是像API等复杂的函数修改,工具能够引用文件名和代码。Go开发团队通常也使用这个工具升级Go内置工具以及谷歌内部项目的代码。go fix之因此可以正常工做是由于Go在标准库就提供生成抽象语法树。该工具会尝试更新当前目录下的全部Go源文件,并在完成代码更新后在控制台输出相关的文件名。     3. go test 是一个轻量级的单元测试框架。

相关文章
相关标签/搜索