Артем Первухин "Язык программирования GO"
В докладе будет рассказано, чем сможет заинтересовать Python-разработчика язык программирования Go. Будут описаны базовые идиомы языка Go и даны ответы на следующие вопросы: Насколько применим к Go "Zen of Python"? Какая у этого языка область применения? В чём можно выиграть, использовав Go вместо Python?
3. Немного истории
сентябрь 2007: идейное рождение (Robert Griesemer,Rob Pike,Ken Thompson)
осень 2009: open source
март 2012: Go 1.0
июнь 2014: Go 1.3
4. What's in the box?
golang.org(http://golang.org),дистрибутив Go 1.3 beta2 ~ 50 Мб
компилятор
стандартная библиотека
документация
всё для кросс-компиляции (amd64,i368,arm,*BSD,Linux,OS X,Windows)
инструменты
5. Некоторые команды
godoc —документация в консоли или локальная копия golang.org
go build —компиляция
go install — компиляция и установка
go run — компиляция и запуск отдельного файла
go test —тесты,бенчмарки
go fmt —получить красивый код
go get — скачать по сети пакет,скомпилировать и установить
19. Интерфейсы
Python,PEP 3119,Introducing Abstract Base Classes:
...the ABCs define a minimal set of methods that establish the characteristic behavior of the type. Code
that discriminates objects based on their ABC type can trust that those methods will always be
present.
20. Интерфейсы
Go: интерфейсы —типы-обобщения,определяющие только набор методов.
//#Reader#is#the#interface#that#wraps#the#basic#Read#method.
type#Reader#interface#{
####Read(p#[]byte)#(n#int,#err#error)
}
//#Writer#is#the#interface#that#wraps#the#basic#Write#method.
type#Writer#interface#{
####Write(p#[]byte)#(n#int,#err#error)
}
Интерфейсы + встраивание типов = комбинирование:
//#ReadWriter#is#the#interface#that#groups#the#basic#Read#and#Write#methods.
type#ReadWriter#interface#{
####Reader
####Writer
}
27. defer — отложи на потом
Python,менеджеры контекста:
with#open("filename.txt",#"r")#as#inFile:
######do#something#with#file
with#conn:
####conn.execute("insert#into#person(firstname)#values#(?)",#("Joe",))
Go,defer — откладывание исполнения функций «на потом»:
f,#err#:=#os.Open("filename.txt")
if#err#!=#nil#{
####log.Fatal("failed#to#open#file",#err)
}
defer#f.Close()
...
28. Документация
Документация в виде комментариев перед кодом:
//#Println#formats#using#the#default#formats#for#its#operands#and#writes#to#standard#output.
//#Spaces#are#always#added#between#operands#and#a#newline#is#appended.
//#It#returns#the#number#of#bytes#written#and#any#write#error#encountered.
func#Println(a#...interface{})#(n#int,#err#error)#{
####return#Fprintln(os.Stdout,#a...)
}
Чтение из консоли:
$#godoc#fmt#Println
func#Println(a#...interface{})#(n#int,#err#error)
####Println#formats#using#the#default#formats#for#its#operands#and#writes#to
####standard#output.#Spaces#are#always#added#between#operands#and#a#newline
####is#appended.#It#returns#the#number#of#bytes#written#and#any#write#error
####encountered.
☞ godoc#Psrc#... покажет и код