GO
2007 г.
2009 г.
до версии 1.3
в версии 1.4
Развитие Go
Простой и понятный синтаксис
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
Статическая типизация
var GoVar1 int
var GoVar2 string
var GoVar3 [10]int
var GoVar4 []int
package main
import "fmt"
func add(a, b int) int {
return a + b
}
func main() {
fmt.Println(add(2000, 15))
}
Функции
package main
import "fmt"
func vals() (int, int) {
return 3, 7
}
func main() {
a, b := vals()
fmt.Println(a)
fmt.Println(b)
}
Функции
ООП
Классы-
Cтруктуры данных с методами
Структуры и интерфейсы
package main
import "fmt"
import "math"
type geometry interface {
area() float64
}
type rect struct {
width, height float64
}
type circle struct {
radius float64
}
func (r rect) area() float64 {
return r.width * r.height
}
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func measure(g geometry) {
fmt.Println(g)
fmt.Println(g.area())
}
func main() {
r := rect{width: 3, height: 4}
c := circle{radius: 5}
measure(r)
measure(c)
}
Скорость
Скорость
Скорость
package main
import "fmt"
import "time"
func main() {
timestart := time.Now()
for c := 0; c < 100000000; c++ {
bubble()
}
timeend := time.Now();
fmt.Print(timeend.Sub(timestart));
}
func bubble() {
array := [...]int16{3,4,1,3,5,1,92,2,4124,424,52,12}
for i := 0; i < len(array); i++ {
for y := 0; y < len(array) - 1; y++ {
if array[y+1] < array[y] {
t := array[y]
array[y] = array[y+1]
array[y+1] = t
}
}
}
}
var starttime = new Date().getTime();
for (var c = 0; c < 100000000; c++) {
bubble();
}
function bubble() {
var array = [3,4,1,3,5,1,92,2,4124,424,52,12];
for (var i = 0; i < array.length; i++) {
for (var y = 0; y < array.length - 1; y++) {
if (array[y+1] < array[y]) {
var t = array[y];
array[y] = array[y + 1];
array[y + 1] = t;
}
}
}
}
console.log(new Date().getTime() - starttime);
Скорость
Многопоточность
package main
import "fmt"
func f(n int) {
for i := 0; i < 10; i++ {
fmt.Println(n, ":", i)
}
}
func main() {
go f(0)
var input string
fmt.Scanln(&input)
}
Многопоточность
Горутины
Горутины
Горутины очень легковесны
4 — 4,5 килобайт
Горутины
4 Gb
800 тысяч работающих горутин
Горутины
Любители Erlang прямо сейчас)
Горутины
Другие фичи
- Богатая стандартная библиотека
- Есть возможность использовать библиотеки C и C++
- Тесты
Web-разработка на Go
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World!!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
Web-разработка на Go
- Bee Go
- Martini
- Revel
- Gorilla
- Pat
Martini
package main
import "github.com/go-martini/martini"
func main() {
m := martini.Classic()
m.Get("/", func() string {
return "Hello world!"
})
m.Run()
}
Gorilla
func main() {
r := pat.New()
r.Get("/products", ProductsHandler)
r.Get("/articles", ArticlesHandler)
r.Get("/", HomeHandler)
http.Handle("/", r)
}
“/:i”
Задача
Отдает i-тое число Фибоначчи
Hardware: Retina Macbook Pro i7@2.7GHz and 16GB RAM
Software: OSX 10.9.3
Java 8 + Sparkjava 2.0.0
Golang 1.3
Python 2.7.7 + Flask 0.10.1
PyPy 2.3.1 + Twisted 14.0.0
Node v0.10.29 + Express 4.4.4
Golang + bmizerany Pat + GOMAXPROCS(7)
51684 Requests/sec
Java + Spark
48631 Requests/sec
PyPy2.7 Python + Twisted
12633 Requests/sec
Node + Express
8962 Requests/sec
Python + Flask
546 Requests/sec
Что мы получаем?
- Легок в изучении
- Скорость
- Крутую многопоточность
Спасибо за внимание!
Цыркунов Даниил
email : danik.cyrkunov@gmail.com
facebook : facebook.com/danik.tsyrkunov
Go
By Danik Tsyrkunov
Go
- 1,075