Go Programming Language
Page content
[TOC]
Go语言深入学习。
Go Language Getting Started
开发环境搭建
1、安装Go
a.打开网址 https://golang.org/dl/
b.根据操作系统选择对应的安装包
c.安装
d.设置环境变量 linux
export GOROOT=$PATH:/path/to/go/
export PATH=$PATH:$GOROOT/bin/
export GOPATH=/home/user/project/go
e.设置环境变量(window不用设置)
vsCode安装go插件失败,到github上下载插件后自行安装。
https://github.com/golang/tools
安装调试后,被360禁止权限。找了半天不知道如何恢复,看来我要卸载360了。(把360关了之后,可以正常调试程序了)
package main
import (
"fmt"
)
func add(a int, b int) int {
var sum int
sum = a + b
return sum
}
func main() {
fmt.Println("hello")
fmt.Println("你好!")
fmt.Println(add(15, 20))
var c int
c = add(100, 300)
}
编译不会通过,因为go追求简洁,没有用到的变量c,不会编译通过。
调试工具
delve
https://github.com/derekparker/delve/tree/master/Documentation/installation
golang语言特性
1、垃圾回收
a.内存自动回收,再也不需要开发人员管理内存
b.开发人员专注业务实现,降低了心智负担
c.只需要new分配内存,不需要释放。
2、天然并发
goroutine 轻量级线程,创建千万个goroutine可能。
基于CSP (Communicating Sequential Process)模型成为可能
通信序列进程。每个goroutine都是独立的单位。简单的理解是轻量级的线程。上万个goroutine是可能的。比操作系统的线程轻量。
感觉一下并发^_^
for i := 0; i < 100; i++ {
go print(i) // go routine
}
time.Sleep(time.Second)
// API server listening at: 127.0.0.1:19386
// 4
// 0
// 600
// 2
// 1
// 9
// 5
// 6
// 7
// 8
// 3
// 12
// 10
// 11
// 14
// 13
// 15
// 16
// 79
// 59
// 60
启动100个并发的goroutine
3、channel 管道
a. 管道,类似unix/linux中的pipe
b. 多个goroutine之间通过channel通信
c. 支持任何类型
pipe := make(chan int, 3)
pipe <- 100
pipe <- 87
4、多返回值
a.一个函数返回多个值
func calc(a int, b int) (int, int) {
sum := a + b
avg := sum / 2
return sum, avg
}
包的概念
a.和Python的包概念差不多
b.共外部使用的包中的函数名定义要 大写
c.包可以被其他包引用
d.main包是用来生成可执行文件,每个程序只有一个main包
e.包的主要用途是提高代码的可复用性
例如:
main.go
package main
import (
"fmt"
"go_dev/day1/goroutine_example/goroutine"
)
func main() {
c := make(chan int, 1)
go goroutine.Add(10, 20, c)
num := <-c
fmt.Println(num)
}
package goroutine
func Add(a int, b int, c chan int) { // c为管道
c <- (a + b)
}