安装GO

  • 官网下载最新版本的GoLang https://go.dev/learn/
  • 解压到文件夹,设置环境变量
  • 我使用的是ZSH,所以需要修改.zshrc文件,添加export PATH=$PATH:/home/arecuid/soft/go/bin

安装完成

简介

Go的表达能力强、简洁、干净、高效。它的并发机制使其能够轻松地编写程序,从而最大限度地利用多核和网络机器,而其新颖的类型系统能够实现灵活和模块化的程序构建。Go可以快速编译成机器代码,但又具有垃圾收集的便利性和运行时反射的力量。它是一种快速、静态类型化的编译语言,感觉就像动态类型化的解释语言。

结构

通常会设置一个GOPATH,所有的项目代码都放在GOPATH的src目录下

在GOPATH目录下创建三个文件夹

  • bin:用于存放编译后生成的可执行文件
  • pkg:用于存放编译后生成的归档文件
  • src:用于存放源码文件

在进行Go语言开发的时候,我们的代码总是会保存在GOPATH/src目录下。在工程经过go buildgo installgo get等指令后,会将下载的第三方包源代码文件放在GOPATH/src目录下, 产生的二进制可执行文件放在 GOPATH/bin目录下,生成的中间缓存文件会被保存在 GOPATH/pkg 下。

如果我们使用版本管理工具(Version Control SystemVCS。常用如Git)来管理我们的项目代码时,我们只需要添加GOPATH/src目录的源代码即可。bin 和 pkg 目录的内容无需版本控制。

目前流行的项目结构

Go语言中也是通过包来组织代码文件,我们可以引用别人的包也可以发布自己的包,但是为了防止不同包的项目名冲突,我们通常使用顶级域名来作为包名的前缀,这样就不担心项目名冲突的问题了。

因为不是每个个人开发者都拥有自己的顶级域名,所以目前流行的方式是使用个人的github用户名来区分不同的包。

举个例子:张三和李四都有一个名叫studygo的项目,那么这两个包的路径就会是:

import "github.com/zhangsan/studygo"

import "github.com/lisi/studygo"

以后我们从github上下载别人包的时候,如:

go get github.com/jmoiron/sqlx

那么,这个包会下载到我们本地GOPATH目录下的src/github.com/jmoiron/sqlx

Hello World

在src目录下创建一个hello目录,在hello目录下创建一个hello.go文件

编写代码

package main //声明 main 包,表示当前是一个可执行程序

import "fmt" // 导入内置的 fmt

func main() { // main函数,程序执行的入口
fmt.Println("Hello, World!")

}

运行 go run .

结果

Hello World!

可以通过 go build 生成 hello 可执行的二进制文件。不过通过go build生成的文件只能在当前目录下使用

此时在通过 go install 生成可移动的可执行二进制文件

GO语言的优点

  • 自带GC(垃圾回收)
  • 静态编译,编译好后,扔服务器直接运行。
  • 简单的思想,没有继承,多态,类等。
  • 丰富的库和详细的开发文档。
  • 语法层支持并发,和拥有同步并发的channel类型,使并发开发变得非常方便。
  • 简洁的语法,提高开发效率,同时提高代码的阅读性和可维护性。
  • 超级简单的交叉编译,仅需更改环境变量

GO语言的特征

1.自动立即回收。
2.更丰富的内置类型。
3.函数多返回值。
4.错误处理。
5.匿名函数和闭包。
6.类型和接口。
7.并发编程。
8.反射。
9.语言交互性。

Go语言命名

  • Go的函数、变量、常量、自定义类型、包(package)的命名方式遵循以下规则
    • 首字符可以是任意的Unicode字符或者下划线
    • 剩余字符可以是Unicode字符、下划线、数字
    • 字符长度不限
  • Go只有25个关键字
  • Go还有37个保留字
  • 可见性
    • 声明在函数内部,是函数的本地值,类似private
    • 声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似protect
    • 声明在函数外部且首字母大写是所有包可见的全局值,类似public

25 个关键字

37个保留字

Go语言声明:

var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)。