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, 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, <-.
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
http://eleme.io/blog/2014/goroutine-1/
https://github.com/wusuopubupt/go_spider
Docker
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
视频版
百度网盘链接地址:http://pan.baidu.com/s/1pL8zPcn
密码:e4vk
本文出自 “Python & Golang 学习” 博客,请务必保留此出处http://51reboot.blog.51cto.com/2180875/1967772
原文地址:http://51reboot.blog.51cto.com/2180875/1967772