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)
}
Go