2014-11-01 02 Иван Зезюля. To go или не to go

14
To Go или не to Go Иван Зезюля Al Digit http://zoid.cc
  • Upload

    -
  • Category

    Software

  • view

    56
  • download

    1

Transcript of 2014-11-01 02 Иван Зезюля. To go или не to go

Page 1: 2014-11-01 02 Иван Зезюля. To go или не to go

To Go или не to Go

Иван Зезюля Al Digithttp://zoid.cc

Page 2: 2014-11-01 02 Иван Зезюля. To go или не to go

Немного истории• 2007 – идея о новом языке

• 2008 – прототип внутри Google

• 2009 – первый публичный релиз

• 2012 – 1.0

• 2014, июнь – 1.3

Page 3: 2014-11-01 02 Иван Зезюля. To go или не to go

Создатели• Ken Thompson – UNIX, regexp

• Rob Pike – UNIX, UTF-8

• Robert Griesemer – V8

• Russ Cox

• Ian Taylor

Page 4: 2014-11-01 02 Иван Зезюля. To go или не to go

Изначальные цели

• эффективная разработка больших программ

• скорость компиляции

• распределенные системы

• многопоточность, работа с сетью

Page 5: 2014-11-01 02 Иван Зезюля. To go или не to go

Основные фишки

Page 6: 2014-11-01 02 Иван Зезюля. To go или не to go

Статическая типизация

x := 1 + 2 // int y := 2.0 * 21.0 // float

var x int = 1 + 2 var y float32 = 2.0 * 21.0

Это эквивалентно:

С автоматическим выводом типов:

Page 7: 2014-11-01 02 Иван Зезюля. To go или не to go

Компиляция в нативный код

• Никаких JIT’ов и интерпретаторов

• Платформы: x86, x86-64, ARM (Linux)

Page 8: 2014-11-01 02 Иван Зезюля. To go или не to go

Легковесные потоки (goroutines)

func work(data int) { fmt.Println(“trrr") time.Sleep(100 * time.Millisecond) } !for i := 1; i < 5; i++ { go work(i) }

Page 9: 2014-11-01 02 Иван Зезюля. To go или не to go

Каналы (channels)func sum(values []int, out chan int) { sum := 0 for _, value := range values { sum += value } out <- sum } !values := []int{7, 2, 8, -9, 4, 0} channel := make(chan int) !go sum(values[:len(values)/2], channel) go sum(values[len(values)/2:], channel) !x, y := <-channel, <-channel

Page 10: 2014-11-01 02 Иван Зезюля. To go или не to go

Интерфейсы

type Reader interface { Read(p []byte) (n int, err error) }

Любой тип, который реализует такой метод Read — является Reader’ом

Page 11: 2014-11-01 02 Иван Зезюля. To go или не to go

GC

• Неотключаемый

Page 12: 2014-11-01 02 Иван Зезюля. To go или не to go

Простота и минимализм

C (K&R) 32C++ (1991) 48

Java (3rd ed.) 50C# 77

C++0x 72+11JavaScript 26+16

Python (2.7) 31Pascal 35Oberon 32

Go 25

Количество ключевых слов:

Page 13: 2014-11-01 02 Иван Зезюля. To go или не to go

Плюшки• Множественные возвращаемые значения

• go fmt

• import "github.com/go-martini/martini"

• Строгая система типов (нет неявных преобразований)

• Весьма хорошая стандартная библиотека

• Слайсы

Page 14: 2014-11-01 02 Иван Зезюля. To go или не to go

Кто использует Go• Docker, в т.ч. в составе Yandex.Cocaine

• Dropbox (“major parts of infrastructure”)

• Canonical

• Heroku (Doozer data store)

• BBC World News

• AirBrake (crash reporting)

• SoundCloud

• Google :)