本次公开课主题:《老运维带你用 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
For more information:
- Method of type T (Class Method?):
- Variable (closure) of type T:
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
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.
Concurrent
In C:
process, thread, libevent
In 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, <-.
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
Example
Docker -- A Go Project
Docker basic concept
Dockerfile
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群,获取分享直播链接和相关资料.
咨询报名联系:
QQ(1):979950755 小月
QQ(2):279312229 ada
WeChat : 1902433859 小月
WeChat : 1251743084 小单
Golang 实战班第2期火热报名进行中
招生要求:
有Linux基础,有志于使用 Go 语言做分布式系统编程的人员,想往系统架构师方向发展的同学。BAT 架构师带你一起飞。
开课时间:10月14日
课程内容:
- Golang入门
- Golang程序结构
- Golang的基础数据类型
- Golang复合数据类型
- Golang的函数
- Golang的方法
- Golang的接口
- Golang的协程和Channel
- Golang基于共享变量的并发
- Golang包和工具
课程大纲:http://51reboot.com/course/go/
版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/5b2c0164b1f7
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。