Go 入门
优势
- 相比于C/C++,有GC,没有内存泄漏
- 编译速度快
- 处理并发优雅高效
- 既能够达到静态语言的安全与性能,又达到了动态语言的开发维护的高效率,Go = C + Python
语言特点
- Go语言引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在
- 天然支持并发(所以非常支持云计算)
- 语言层面支持并发,实现简单
- gorotine,轻量级线程,可实现大并发处理,高效利用多核
- 基于CPS并发模型(Communicating Sequential Processes)实现
- 管道通信机制,形成Go语言特有的管道channel,通过管道实现Goroutine之间的通信
- 支持多值返回
- 切片slice,延时执行defer
环境配置
- 在windows上下载好的go文件,
go doc/go fmt/gogo.exe用来编译go代码 - apt-get卸载
- 对于linux,需要在
~/.bashrc下设置路径,source ~/.bashrc命令更新配置,其中GOROOT就是go的源码包的位置,GOPATH是工作目录,是开发者Go的项目默认路径
Go语言分析
- 天生支持并发,
- 可以编译,可以解释
- runtime系统调度,高效的GC
- Go语言可以通过调Cgo包写C代码
VScode go插件安装
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
之后重启VScode,看报错安装即可
基本Go程序
package main// 包含main函数就是main包,包的名字和文件的名字无关
import "fmt"
func main() { // 左花括号一定要与函数名在同一行
// 可以不加";",也可以加
fmt.Print("hello\n")
}
变量初始化
点击查看代码
// 四种声明变量的方式
package main
import (
"fmt"
)
// 方法一, 二, 三可以声明全局变量
var gA int = 200
var gB = 200
// 方法四不能够声明全局变量
// :=
// gC := 200
func main() {
// 方法一:声明一个变量,默认的值是0
var a int
fmt.Println("a = ", a)
// 格式化输出变量类型 %T
fmt.Printf("type of a = %T\n", a)
var ss string = "abc"
fmt.Printf("tyep of ss = %T\n", ss)
// 方法二:声明一个变量,初始化一个值
var b int = 100
fmt.Println("b = ", b)
// 方法三:在初始化的时候,可以省去数据类型,通过自动匹配当前的变量的数据类型
var c = 100
fmt.Println("c = ", c)
// 方法四,省略var关键字,直接自动匹配
// := 既初始化,又去赋值,能够自动推导类型
e := 100
fmt.Println("e = ", e)
fmt.Printf("tyep of e = %T\n", e)
g := 3.14
fmt.Println("e = ", g)
fmt.Printf("tyep of e = %T\n", g)
// ===
// 声明多个变量
var xx, yy int = 100, 200
fmt.Println("xx = ", xx, "yy = ", yy)
var kk, ll = 100, "abc"
fmt.Println("xx = ", kk, "yy = ", ll)
var (
vv int = 100
jj bool = true
)
fmt.Println("vv = ", vv, "jj = ", jj)
}