go, goroutines e o gopher
TRANSCRIPT
O que é Go?Go é uma linguagem de programação desenvolvida pela Google para ajudar a resolver problemas do Google.
Diferenciais● Orientação a Objetos sem herança● Sem exceções● Imports e variáveis não usadas causam erro de compilação● Sem method overloading ou parâmetros opcionais● Visibilidade é definida pela primeira letra● Interfaces sem declaração (duck typing)
Duck typingEm linguagens dinâmicas como Python existem o conceito de Duck Typing.
"if it looks like a duck and quacks like a duck, it’s a duck."
class Duck: def quack(self): print("quack")
class Cow: def quack(self): print("muu")
def say_quack(quacker) quacker.quack()
say_quack(Duck())say_quack(Cow())
Duck Typing em Go
type Duck struct {}
func (d *Duck) Quack() { fmt.Println("Quack")}
func SayQuack(q Quacker) { q.Quack()}
SayQuack(&Duck{})SayQuack(&Cow{})
type Cow struct {}
func (c *Cow) Quack() { fmt.Println("Muu")}
type Quacker interface { func Quack()}
Goroutines● Função que executa concorrentemente● São basicamente threads● Basta adicionar a keyword go na chamada do método● Muito similar ao comando & do shell, executa e termina silenciosamente
Goroutinesfunc f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}
func main() {
f("direct")
go f("goroutine")
go func(msg string) {
fmt.Println(msg)
}("going")
var input string
fmt.Scanln(&input)
fmt.Println("done")
}
$ go run goroutines.godirect : 0direct : 1direct : 2goroutine : 0goinggoroutine : 1goroutine : 2<enter>done
Channels● São pipes que conectam goroutines● Simples para trocar mensagens entre goroutines● Unbuffered e síncrono por padrão● O sender fica bloqueado até o receiver receber o valor● Buffered channels bloqueiam apenas se o buffer ficar cheio
Channelspackage main
import "fmt"
func main() {
messages := make(chan string)
go func() { messages <- "ping" }()
msg := <-messages
fmt.Println(msg)
}
$ go run channels.go ping
E o Gopher?Você já conheceu ele :)
● Desenhado por Renée French● Inspirado no gopher de uma promoçao de camisa da rádio WFMU
Referências● The Go Programming Language● Go by Example● An Introduction to Programming in Go