come with golang

Post on 13-Apr-2017

273 Views

Category:

Internet

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Session G001:Come With Golang

--changzeng----20160120---

A.G.E.N.D.A.1. History

2. Grammar

3. Concurrence

4. Standard Library & Tool Chain

5. Golang & C

6. Production & OpenSource Projects

7. Reference

Section 1: History• November 10, 2009 : Became a Public Open Source Project • March 28, 2012 : Go 1.0.0 Release• August 18,2015 : Latest Version Go 1.5

Release History

Sponsor

Mascot : Gopher Designed By Renée French Who also design Plan9’s mascot Glenda

“Robert Griesemer, Rob Pike and Ken Thompson started sketching the goals for a new language on the white board on September 21, 2007. ”

--Golang FAQ

Rust1.0 Released on May 15,2015 And Latest version is Rust1.5 (How Frequently)

TEAM PLAN 9

Section 2: GrammarStructure

• Every Go program is made up of packages. And executable should have “main” package• “import” is just like “include” in c/c++ and “import” in python. Import other packages• Package “fmt” has PrintXxx just like “printf” in c/c++ and “print” in python• Function begin with “func” followed by it’s name.• “{” should be the same line with “main()” . Think about linux style and Microsoft• “main” takes no argument like python

Section 2: GrammarVariables & Constants

Type

Namedeclare

variable

Only used in scope C11 “auto”

declare Name Start with 0Auto-Increment

Without typedeclare

multiple assignment

Section 2: GrammarBasic Types

Container Types

PointersGo has pointers. A pointer holds the memory address of a variable.

• Arrays• Slices

• Maps

Test if has

Declares a dictionary

Define and assign

Len is element’s countCap is max size

Section 2: GrammarControl Flow

• If…else…Like , statement

• switch

No while in Golang

• for

default break

no condition means TRUE If..elseif…elseif…else

Section 2: GrammarFunction• ordinary function

• method of struct

• closure

return typeargumentsname

return multiply values

named return values

a method is just a function with a receiver argument

a regular function with no change in functionality

Methods with pointer receivers can modify the value to which the receiver points

Functions are values too. They can be passed around just like other values

Lambda

Section 2: GrammarInterface

An interface type is defined as a set of method signatures.

When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck--Heim, Michael

Golang’s interface is a Duck Type interface

define a interface

implementation of interface

“i” is a interface variable

Calling a method on an interface value executes the method of the same name on its underlying typeThought about OOP’s Polymorphisn

Section 2: GrammarEmpty Interface & Type Switches

• empty interface

a empty interface is just like a (void *)

• type switches

1. i.(T) T is a type get the exact type a false when failed

2. i.(type) return the type of i.

what the real type a interface holds?

Section 2: Grammardefer

A defer statement defers the execution of a function until the surrounding function returns

defer is a modifier declares a function’s invoking

should be a invoking

Output

invoke releaseB firstthen invoke releaseA

Output

calculate at defer

Section 2: Grammarpanic … recover and error

• panicpanic is just like assert()

• recoverrecover will stop panic’s crash

• try..catch..

if g() panic . defer will be invoked . and recover will get the panic

Go programs express error state with error values. The error type is a built-in interface Which has “Error() string” return strerror()

• error

Section 2: GrammarOOP

• polymorphism• inheritance • encapsulation

Section 3: ConcurrenceCSP

communicating sequential processes (CSP). It is a member of the family of mathematical theories of concurrency known as process algebras, or process calculi, based on message passing via channels.

It is More About a Methodology. Not a Implementation or a Invention. • Goroutine : a carrier of a task• Channel : channels to pass message• Select : tools for channels• sync.Xxx : assist to solve synchronized problems

Go Concurrency Patterns: Pipelines and cancellationIn each stage, the goroutines• receive values from upstream via inbound channels• perform some function on that data, usually producing new values• send values downstream via outbound channels

Section 3: ConcurrenceGoruntine

“go”is just like “pthread_create”“sync.WatiGroup” is like “pthread_join” or “pthread_cond_wait”But goroutine is not a thread or process of system levelIt is like a routine or a light weight thread

Section 3: ConcurrenceChannel

create a read-write channel

close channel’s write end

return a channel

receives values from the channel repeatedly until it is closed

“chan <-” : a sent-to only channel“<- chan” : a read only channel

close will cause <- get false with “ok”

Section 3: ConcurrenceSelect

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.

Section 3: ConcurrenceExample

No more callback, No more context

Section 3: ConcurrenceBenchmark

SNG's IO/CPU Benchmark

The Computer Language Benchmarks Game

Summary• Golang is similar to C in IO and Simple CPU based Scenes situation• Compute-intensive situation shouldn’t be Golang’s advantage

Section 3: ConcurrenceGC

Golang Compile

Golang Runtime

Section 3: ConcurrenceGC

garbage collector is a concurrent, tri-color, mark-sweep collector, an idea first proposed by Dijkstra in 1978

Go is building a garbage collector (GC) not only for 2015 but for 2025 and beyond: A GC that supports today’s software development and scales along with new software and hardware throughout the next decade.

--Golang Blog

Result:

• Not a STW(Stop the World) GC ( <= Golang1.4)• GC in 10ms• 85% less than before (<=Golang1.4)

Principle:• Believe golang’s team. Golang1.5 1.6 and more• Write golang with a Cer mind. Maybe you don’t need string pkg• Write GC friendly codes

Section 4: Standard Library & Tool ChainStandard Library

Section 4: Standard Library & Tool ChainIDE

• vim

• emacs

Section 4: Standard Library & Tool ChainIDE

• atom • sublime

• eclipse• IntelliJ IDEA• LITE

Section 4: Standard Library & Tool ChainGoDoc

Section 4: Standard Library & Tool ChainGoFmt

Section 4: Standard Library & Tool ChainGoVet

GoLint

Section 4: Standard Library & Tool ChainGoTest

ppt.go

ppt_test.go

2G/sec 0.54ns/count

Section 5: Golang & CInvoke C function from Golang

Section 5: Golang & CWrite C&Go in *.go

Section 5: Golang & CInvoke C funciton from a *.a

Section 5: Golang & C Invoke C funciton from a *.so

Section 5: Golang & C Invoke C funciton from a *.so

Section 6: Production & OpenSource ProjectsProduction

How is Go used at Google?Go at Google

Section 6: Production & OpenSource ProjectsOpenSource Projects

Section 6: Production & OpenSource ProjectsOpenSource Projects

Zookeeper(ZAB/Paxos)

K-V Story And Service Discovery (Raft)

Distributed Messaging Platform (Message Queue)

RabbitMQ/Kafak/ZeroMQ/Nanomsg

Web Framework

Djanngo/Tornado/WebpyJfinal SSHLaravel/Flight/Yii

Microservices Framework

Section 7: Reference

① A Tour of Go② Effective Go③ Package Documentation④ Language Specification⑤ The Go Memory Model⑥ The Go Blog⑦ Go by Example⑧ 《 The Go Programming Language 》⑨ 《 Go In Action 》⑩ 《 Mastering Concurrency in Go 》

Example Code is [HERE]

Q & A …The EndThanks…

top related