简介

Go(又称Golang[4])是Google开发的一种 静态强类型编译型并发型,并具有垃圾回收功能的编程语言。罗伯特·格瑞史莫、罗勃·派克及肯·汤普逊于2007年9月开始设计Go,稍后伊恩·兰斯·泰勒(Ian Lance Taylor)、拉斯·考克斯(Russ Cox)加入项目。Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,支持Linux、macOS、Windows等操作系统。 来自百科介绍.

在2016年,Go被软件评价公司TIOBE选为“TIOBE 2016年最佳语言”。[7]

很多公司在使用go语言,用go开发的非常出名的项目有 docker ,k8s ,InfluxDB ,OpenShift,Ethereum。
是云原生开发语言,也可以用来开发区块链项目。

go 官网链接 https://golang.google.cn/

中文相关文档 https://www.topgoer.cn/

特点

  • 保持简单

    go语言的设计理念是足够简单,比如关键字只有 25个。学习曲线平缓,容易入门。
    代码的风格统一,减少语法上容易出现的错误。

  • 高性能

    go 的性能接近于c / c++ 的执行性能

  • 开发效率高

    内置垃圾回收机制,不用手动控制内存释放, 同时有着和python差不多的开发效率。

  • 支持并发

    对并发具有非常好的支持。

版本说明

go从2012年的 1.0 版本 到 今天已经 到1.18 版本了。
一般情况下是一年发布2个版本。

历史版本查看 https://go.dev/doc/devel/release

安装

windows 环境下安装

下载安装包 https://go.dev/dl/

直接傻瓜式下一步 安装即可。

安装完毕后 在命令行执行
···
go version
go help
···

Linux 环境下安装

  1. 下载安装包 https://go.dev/dl/

  1. 下载的 tar.gz 包上传到服务器并解压
1
2
tar -zxvf go1.18.3.linux-amd64.tar.gz 

  1. 配置环境变量

go.sh 专门用来管理go的相关环境变量

1
vim /etc/profile.d/go.sh
1
2
3
4
5
6
7
8
9
#go
#安装目录
export GOROOT=/usr/local/software/go
#gopath 是工作目录
export GOPATH=$HOME/go
#执行文件目录
export GOBIN=$GOPATH/bin
#path 环境变量目录
export PATH=$GOPATH:$GOBIN:$GOROOT/bin:$PATH
1
source /etc/profile
  1. 测试
1
go version

注意:go path 这个环境变量在1.8 版本之前必须设置,1.8之后使用默认的即可

开发工具安装

go 可以使用多种开发工具开发,比如 IDEA,VS CODE 。

使用IDEA 来开发go

在IDEA中需要安装go的插件

file –> setting –> plugins –> marketplace

然后配置GO的相关设置

选择go root

配置go 代理

1
GOPROXY=https://goproxy.io,direct

开发hello Word

new Project –> 选择 go

新建src 目录.创建包,新建 hello.go

编写文件

1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
fmt.Print("hello word")
}


  • 对于go 来说,函数是go中的一等公民,所以基本都是围绕函数来开发 func
  • main 函数是程序的入口
  • 需要注意 main函数的包名 packge 也必须是 main
  • go 的main 函数不支持返回值

编译go文件

1
2
go  build hello.go

将编译成一个可执行文件

直接运行 go文件

1
go run hello.go

直接运行结果不生成执行文件

main函数入参和返回值

main 函数不支持直接在函数声明上加入参数。但是可以通过os.Args 获取参数

1
2
3
4
5
func main()  {
fmt.Print(os.Args)
fmt.Print("hello word")
os.Exit(-1)
}
  • os.Args 得到命令行输入参数
  • os.Exit Exit 函数可以让当前程序以给出的状态码 code 退出。一般来说,状态码 0 表示成功,非 0 表示出错。

测试

通过自带的 testing 测试库可以方便的编写测试代码

示例:

type_test.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package test

import (
"testing"
)

func TestNum(t *testing.T) {
var a int32 = 10
var b int64 = 10
t.Log(b)
t.Log(a)
}

````

需要注意的是:
- 测试的go 文件的文件结尾必须以 test.go 结尾,不然不识别
- 测试函数必须以 **Test** 开头,并且名称保持驼峰或下划线标准格式,不然也不识别
比如 Testaa 这种错误的写法。 必须写成 TestAa 或 Test_aa





其他测试库

github.com/stretchr/testify/assert

1

import (
“testing”
“github.com/stretchr/testify/assert”
)

func TestSomething(t *testing.T) {

var a string = “Hello”
var b string = “Hello”

assert.Equal(t, a, b, “The two words should be the same.”)

}








参考链接: 

- <http://www.muzhuangnet.com/show/20452.html>
- <https://zhuanlan.zhihu.com/p/486942164>
- https://blog.51cto.com/u_15238921/5379581