shad-go/lectures/00-intro/lecture.slide

253 lines
5.7 KiB
Text
Raw Normal View History

2020-02-01 20:16:15 +00:00
Введение
Лекция 1
Фёдор Короткий
* Добро пожаловать
- Вы пришли на курс по Go
2020-02-09 18:14:30 +00:00
.image gopher.png _ 400
2020-02-01 20:16:15 +00:00
2020-02-09 18:14:30 +00:00
* Ссылки
2020-02-01 20:16:15 +00:00
2020-02-09 18:14:30 +00:00
.link https://wiki.yandex.ru/shad/groups/2018/Semester4/GoLang/ Вики страница
.link https://gitlab.com/slon/shad-go Репозиторий
.link https://t.me/joinchat/BjrYSxdPJGtJdd1pae08Zg Чат курса в телеграме
2020-02-10 13:40:22 +00:00
[[https://p.go.manytask.org]] - эти слайды.
2020-02-09 18:14:30 +00:00
* Что нас ждёт?
- 12+ занятий
- Семинарские задания после каждой лекции. *Дедлайн*10*дней.*
- 4 _больших_ домашних задания. *Дедлайн*3*недели.*
- Критерий оценки: *TODO*.
* Hello world
2020-02-13 11:54:17 +00:00
.play -edit helloworld/helloworld.go
2020-02-09 18:14:30 +00:00
* Go
Concurrent
Garbage Collected
Systems
Language
* Современный мир
- Море библиотек. Большие деревья зависимостей.
: Нам нужен язык, который будет помогать контролировать сложность at large.
- Архитектура построена вокруг сервисов, которые общаются по сети.
: Скорее вам придётся писать stateless сервис. Statefull сервисы общаются с базой данных по сети.
- Многоядерные процессоры даже в телефонах.
* Скорость разработки
- Компиляция занимает много времени
- Инструменты замедляются
- Число зависимостей постоянно растёт
- Ноутбуки не становятся быстрее
- Проекты продолжают расти
* Цели Go
- Эффективность статической типизации. Удобство динамической типизации.
- Type-safe и memory-safe.
- Хорошая поддержка многопоточности.
- Эффективный сборщик мусора, без пауз.
- Быстрая компиляция.
- Эффективная работа с большими объемами кода.
* Compilation Demo
# 1 пакет за 200 ms
time go build -a -v math
# 84 пакета за 7 секунд
time go build -a -v github.com/golang/protobuf/...
.image compiling.png
* Принципы дизайна
Небольшое число ортогональных фич.
Простой синтаксис (понятный для людей *и* машин).
2020-02-13 12:47:08 +00:00
Простая система типов. Объектно ориентированный, но без наследования.
2020-02-13 11:45:11 +00:00
* Hello World
2020-02-13 11:54:17 +00:00
.play -edit helloworld/helloworld.go
2020-02-13 11:45:11 +00:00
: Как запустить. В презентации и в CLI.
: Что такое пакет.
: Импорты. fmt - стандартная библиотека.
: Пакет main.
: Автоматическое форматирование.
: goimports
* echo
2020-02-13 11:54:17 +00:00
.play -edit echo/echo.go
2020-02-13 11:45:11 +00:00
: Слайсы. s[n:m], s[i], len(s).
: var создаёт переменную. Инициализация zero value.
* For loop
Полная форма.
for initialization; condition; post {
// statements
}
Как while.
for condition {
// statements
}
Бесконечный цикл.
for {
// statements
}
* echo2
2020-02-13 11:54:17 +00:00
.play -edit echo2/echo2.go
2020-02-13 11:45:11 +00:00
* Range
Полная форма.
for i, v := range slice {
// ...
}
Только индекс.
for i := range slice {
// ...
}
Индекс не используется.
for _, v := range slice {
// ...
}
* Переменные
s := ""
var s string
var s = ""
var s string = ""
2020-02-13 12:47:08 +00:00
* uniq
2020-02-13 11:45:11 +00:00
2020-02-13 12:47:08 +00:00
.play -edit uniq/uniq.go
2020-02-13 11:45:11 +00:00
: map. Создаётся через make(). Значения инициализируются нулём. Ключ должен иметь ==.
: Итерация по map.
: bufio.Scanner.
: Printf.
* Printf
%d decimal integer
%x, %o, %b integer in hexade cimal, octal, binary
%f, %g, %e floating-point number: 3.141593 3.141592653589793 3.141593e+00
%t boolean: true or false
%c rune (Unicode code point)
%s string
%q quoted string "abc" or rune 'c'
%v any value in a natural format
%T type of any value
%% literal percent sign (no operand)
Функции форматирования заканчиваются на `f`. `fmt.Errorf`, `log.Printf`.
* urlfetch
2020-02-13 11:54:17 +00:00
.code urlfetch/urlfetch.go /func main/,/^}/
2020-02-13 11:45:11 +00:00
* fetchall
2020-02-13 11:54:17 +00:00
.code fetchall/fetchall.go /func main/,/^}/
2020-02-13 11:45:11 +00:00
* fetchall
2020-02-13 11:54:17 +00:00
.code fetchall/fetchall.go /func fetch/,/^}/
2020-02-13 11:45:11 +00:00
* webserver
2020-02-13 11:54:17 +00:00
.code web/web.go
2020-02-13 11:45:11 +00:00
2020-02-13 11:54:17 +00:00
* counter
2020-02-13 11:45:11 +00:00
2020-02-13 11:54:17 +00:00
.code counter/counter.go /var/,
2020-02-13 11:45:11 +00:00
* switch
switch coinflip() {
case "heads":
heads++
case "tails":
tails++
default:
fmt.Println("landed on edge!")
}
_tagless_ switch.
func Signum(x int) int {
switch {
case x > 0:
return +1
default:
return 0
case x < 0:
return -1
}
}
* Other
Struct
type Point struct {
X, Y int
}
var p Point
Pointers
var s string
p := &s
s2 = *p
var p Point
p.X = 1
var pp *Point
pp.X = 1
* The Go Programming Language
.image book.jpg
Всего 400 страниц.
* Документация
.link https://golang.org/doc/effective_go.html Effective Go
.link https://golang.org/pkg/ Документация стандартной библиотеки
.link https://golang.org/doc/faq Go FAQ
.link https://github.com/golang/go/wiki/CodeReviewComments Code Review Comments