今晚九点 |《老运维带你用 Golang 飞》

本次公开课主题:《老运维带你用 Golang 飞》

Outline

  • What is Golang
  • Syntax
  • Concurrent
  • Example
  • Docker
  • Useful tools

History

今晚九点 |《老运维带你用 Golang 飞》_第1张图片
  • 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
今晚九点 |《老运维带你用 Golang 飞》_第2张图片
  • Go syntax
今晚九点 |《老运维带你用 Golang 飞》_第3张图片

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.
今晚九点 |《老运维带你用 Golang 飞》_第4张图片

Reflection

图片8.png

Garbage collection

  • In C:
今晚九点 |《老运维带你用 Golang 飞》_第5张图片

Auto GC (Mark and Sweep), stop-the-world(-_-)

今晚九点 |《老运维带你用 Golang 飞》_第6张图片

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.
今晚九点 |《老运维带你用 Golang 飞》_第7张图片
图片12.png
  • Defer Stack

Concurrent

  • In C:
    process, thread, libevent

  • In Go:
    goroutine
    channel
    select
    waitGroup

今晚九点 |《老运维带你用 Golang 飞》_第8张图片

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, <-.
今晚九点 |《老运维带你用 Golang 飞》_第9张图片
  • Don‘t communicate by sharing memory, Share memory by communicating(No Lock !)
  • http://my.oschina.net/clopopo/blog/141873

Dead lock

今晚九点 |《老运维带你用 Golang 飞》_第10张图片

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.
今晚九点 |《老运维带你用 Golang 飞》_第11张图片

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

今晚九点 |《老运维带你用 Golang 飞》_第12张图片
  • 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
  • docker export
  • Container
  • docker ps -a
  • docker run/restart/start/stop
  • 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/

你可能感兴趣的:(今晚九点 |《老运维带你用 Golang 飞》)