本次公開課主題:《老運維帶你用 Golang 飛》
Outline
- What is Golang
- Syntax
- Concurrent
- Example
- Docker
- Useful tools
History
- Design began in late 2007 by Google.
- Authors:
Rob Pike (Bell Lab & UTF-8)
Ken Thompson (UNIX & C & Turning Award)
Robert Griesemer (Chrome JavaScript V8)
Go Users
Google, Facebook, Github, Dropbox, Docker, CloudFlare, DigitalOcean, Baidu BFE, 許式偉…
https://github.com/golang/go/wiki/GoUsers
What is Go?
- open source
- concurrent
- garbage-collected
- efficient
- scalable
- simple
- http://golang.org
- benchmark
Declarations
- C syntax
- Go syntax
For more information:
- golang.org/s/decl-syntax
- Function syntax
- Function on type T:
- Method of type T (Class Method?):
- Variable (closure) of type T:
- Multi return
Naming
- Simple rule:
upper case initial letter: Name is visible to clients of package
otherwise: name (or _Name) is not visible to clients of package - Applies to variables, types, functions, methods, constants, fields....
- That Is It.
Pointers and Structs
- Go has pointers. A pointer holds the memory address of a variable.
Reflection
Garbage collection
- In C:
Auto GC (Mark and Sweep), stop-the-world(-_-)
see more: http://adamansky.bitbucket.org/slides/gc/index.html?full#1
Problems:
- Memory leak or Wild pointer ?
Defer
- A defer statement defers the execution of a function until the surrounding function returns.
- Defer Stack
Concurrent
In C:
process, thread, libeventIn Go:
goroutine
channel
select
waitGroup
Goroutine
- A goroutine is a lightweight thread managed by the Go runtime.
- Goroutines run in the same address space, so access to shared memory must be synchronized. The sync package provides useful primitives, although you won't need them much in Go as there are other primitives. (channel & select)
- See more: https://tour.golang.org/concurrency/1
- go func() {}
- coroutine Python?
Channel
- Channels are a typed conduit through which you can send and receive values with the channel operator, <-.
- Don‘t communicate by sharing memory, Share memory by communicating(No Lock !)
- http://my.oschina.net/clopopo/blog/141873
Dead lock
Buffered channel
Buffered channel (like Queue in Python, thread safe FIFO)
Sends to a buffered channel block only when the buffer is full.
Receives to block when the buffer is empty.
Select
- The select statement lets a goroutine wait on multiple communication operations.
- A select blocks until one of its cases can run, then it executes that case. It chooses one at random if multiple are ready.
- The default case in a select is run if no other case is ready.
WaitGroup
- A WaitGroup waits for a collection of goroutines to finish.
- Add()
- Wait()
- Done()
- https://github.com/wusuopubupt/go_spider/blob/master/src/spider/spider.go
Example
Docker -- A Go Project
- Docker enables developers and IT admins to build, ship and run any application, anywhere.
- written in the Golang, released as open source in 2013
- Resource isolation(Namespaces, Cgroups, Libcontainer)
- https://en.wikipedia.org/wiki/Docker_(software)
- https://www.docker.com/
- http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation
Docker basic concept
- Image (https://hub.docker.com)
- container
- repository
Dockerfile
- docker build -t 4paradigm/dango-base-lastest . (-t == --tag)
- docker run -t -i 4paradigm/dango-base-lastest /bin/bash (-t == --tyy), ip conflict?
- See more: https://docs.docker.com/engine/reference/builder/
Dokcer Commands
- Image
- docker images
- docker build
- docker rmi <image name>
- docker export
- Container
- docker ps -a
- docker run/restart/start/stop <container name>
- docker logs < container name>
- docker exec -ti $1 bash
- Repository
- docker login
- docker search
- docker push/pull
- https://docs.docker.com/engine/reference/commandline/
Useful tools 4 Go
- gofmt
- go build|run|get|test
- godoc
- vim + YCM
What's next?
- Try It!
- tour.golang.org
- golang.org/wiki/Learn
- golang.org/project
技術交流QQ群:426582602
加入QQ群,獲取分享直播鏈接和相關資料.
咨詢報名聯(lián)系:
QQ(1):979950755 小月
QQ(2):279312229 ada
WeChat : 1902433859 小月
WeChat : 1251743084 小單
Golang 實戰(zhàn)班第2期火熱報名進行中
招生要求:
有Linux基礎海渊,有志于使用 Go 語言做分布式系統(tǒng)編程的人員,想往系統(tǒng)架構(gòu)師方向發(fā)展的同學蔗坯。BAT 架構(gòu)師帶你一起飛阔拳。
開課時間:10月14日
課程內(nèi)容:
- Golang入門
- Golang程序結(jié)構(gòu)
- Golang的基礎數(shù)據(jù)類型
- Golang復合數(shù)據(jù)類型
- Golang的函數(shù)
- Golang的方法
- Golang的接口
- Golang的協(xié)程和Channel
- Golang基于共享變量的并發(fā)
- Golang包和工具