type Foo struct { // 继承
Base
...
}
Go Tour |
Go Tour
概况
编译型
有GC
多范式
OO
结构体
接口
组合(无继承)
函数式
函数可传递
原生并发(协程)
goroutine
channel
类比 java BlockingQueue
多了 select 多路复用
CSP - 通过消息 共享内存,避免锁
核心思想
面向连接
朴素的“组合思想”
面向契约
convention over variety
人性化API,高效开发
Go, next C!
大道至简
类C
revealing
少就是多
并行
接口 🦆
OOP
简化
完备
错误规范
多返回
内置error
defer
组合 实现 继承
继承
type Foo struct { // 继承
Base
...
}
虚拟继承(指针)
type Foo struct { // 虚拟继承
*Base
...
}
堆栈 界限消除
C支持
开发工具
VS Code
Go环境
1. 安装Go
2. GoPath环境变量
3. VSCode - Go Plugin
4. VSCode - Go tools
test
vs setting加:"go.testFlags": ["-v"]
unit test
func TestArrayInit(t *testing.T) {
arr := [3]int{10,2,3}
t.Log(arr[0], arr[1])
}
file name: xx_test.go
method name: Testxxx
import "testing"
Extension
Go outliner:代码结构
Debug
参见:Sample configuration to debug the current file
go build xx.go 完可以直接跑
其它工具
Atom
Goland
Licensed
Goclipse
基础语法
方法名
大写:导出可用
小写:内部可用
定义结构
定义 名称 类型
var myName string
函数
变量声名
var x,y,z int
初始化
var x, y int = 1,2
var x int = 1 同
x := 1
基本类型
bool
string
int, int8, int16, int64
unit, ... unit64, unitptr
byte // unit8
rune //int32
float32, float64
complex64, complex128
指针
package main import "fmt" func main() { i, j := 42, 2701 p := &i // point to i fmt.Println(*p) // read i through the pointer *p = 21 // set i through the pointer fmt.Println(i) // see the new value of i p = &j // point to j *p = *p / 37 // divide j through the pointer fmt.Println(j) // see the new value of j }
类似于java引用(可到基础类型)
方法参数 都是值拷贝
import
import (
log "github.com/sirupsen/logrus"
)
数据结构
结构体
struct
方法
普通方法
func Abc(v Vertex) float64 { ... }
结构体方法
func (v Vertex) Abs() float64{ ... }
数组
var a[10] int
切片
长度可变
a[low : high]
只是对 数组的 引用
也可用make 创建
动态数组
映射
零值 nil
声明
var m = map[string]ValueType {"aaa": v1, "bbb":v2}
获取
elem = m[key]
修改
m[key] = elem
删除
delete(m, key)
存在否
双赋值检测
elem, ok = m[key]
接口
interface
并发
goroutine
channel
time
sdk
sort
io
time
json
net
http
Build
Go Modules
背景
老式
GoPath
Vendor
包管理工具
依赖包的存放位置变更为$GOPATH/pkg
go.mod
module hello go 1.12 require ( github.com/labstack/echo v3.3.10+incompatible // indirect github.com/labstack/gommon v0.2.8 // indirect github.com/mattn/go-colorable v0.1.1 // indirect github.com/mattn/go-isatty v0.0.7 // indirect github.com/valyala/fasttemplate v1.0.0 // indirect golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a // indirect )
4个命令
module
require
replace
exclude
框架
GUI
Gotron
test
go test ./... -v
go test ./... -cover
参考
learning
Tip
proxy
go env -w GOPROXY=https://goproxy.cn,direct
https://github.com/goproxy/goproxy.cn