1 / 29

Kas tai?

Go. Go is an open source programming environment that makes it easy to build simple , reliable , and efficient software . Atviro kodo programavimo aplinka padedanti kurti nesudėtingą, patikimą ir našią programinę įrangą. Kas tai?. A tviro kodo programavimo kalba :

alijah
Download Presentation

Kas tai?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Go Goisanopensourceprogrammingenvironmentthatmakes it easy to buildsimple, reliable, andefficientsoftware. Atviro kodo programavimo aplinka padedanti kurtinesudėtingą, patikimą ir našią programinę įrangą.

  2. Kas tai? • Atviro kodo programavimo kalba: • palaikodaugiagijiškumą; • turi šiukšlių surinkėją; • sparti; • tipizuota; • palaikomadaugelio platformų:FreeBSD, Linux, Mac OS X, NetBSD, Windows (32-bit ir 64-bit).

  3. Idėja • Įrankio idėja kilo belaukiant kol susikompiliuos didžiulis Google kodas. • Reikėjo kalbos, kuri palengvintų didelių programų parengimą. • Tikslas – jokių makefile. Įrankis turi gebėti pats gauti reikiamą informaciją (pvz., priklausomybes tarp bibliotekų) iš kodo.

  4. Istorija • 2009 | 3 žmonės • ... • 2013 | ~200 programuotojų

  5. Principai • Importavimo kelias gaunamas iš išeities kodo nuorodos; • Aplankalų medyje kiekviena direktorija atstovauja vienam paketui; • Paketas konstruojamas naudojant tik kode esančią informaciją.

  6. Go direktorijų struktūra bin/ todo# commandexecutable pkg/ linux_amd64/ github.com/nf/todo/ task.a # packageobject src/ github.com/nf/ todo/ .git/ # gitrepositorymetadata task/ task.go # packagesource todo.go # commandsource

  7. Diegimas • Linux, FreeBSD, Mac OS X, NetBSD: • tar -C /usr/local -xzf go1.1.linux-amd64.tar.gz • Paketai bus išskleisti į /usr/local/go • Pridėti bin direktoriją į aplinkos kintamąjį PATH. • Windows: • Išskleisti zip failą į c:\Go • Pridėti c:\Go\bin direktoriją į aplinkos kintamąjį PATH. • Galima pasirinkti savo direktoriją nustatant aplinkos kintamojo GOROOT reikšmę.

  8. packagemain// programayrapakete main import "fmt"//importuojamaskitaspaketas funcmain() { fmt.Println("Hello, 世界") }--------------------------------------------------------------- > Go run hello.go > Hello, 世界

  9. GO įrankiai • go build – kompiliuoti paketą • go get – gauti kodą • go test – paleisti testus • go install – įdiegti paketą • go fmt – formatuoti kodą • go run – paleisti programą • go tool – papildomų įrankių iškvietimas • go doc – generuoti dokumentaciją • …

  10. Godoc

  11. Tipai Tipas – interfeisoimplementacijaįgyvendinantjo metodus. • Bool • String • Int, int8, int16, int32, int64 • Uint, uint8, uint16, uint32, uint64,uintptr • Byte • Rune// unikodo simbolis (a - 0x61, ä - 0xc3 0xa4) • Float32, float64 • Complex64,complex128

  12. Tipų priskyrimas packagemain import "fmt" var x, y, z int = 1, 2, 3 var c, python, java = true, false, "no!" funcmain() { fmt.Println(x, y, z, c, python, java) }

  13. Funkcijų parametrai packagemain import "fmt" funcadd(x, y int) int { return x + y } funcmain() { fmt.Println(add(42, 13)) }

  14. Funkcijų rezultatai (I) packagemain import "fmt" funcswap(x, y string) (string, string) { return y, x } funcmain() { a, b := swap("hello", "world") fmt.Println(a, b) }

  15. Funkcijų rezultatai (II) packagemain import "fmt" funcsplit(sumint) (x, y int) { x = sum * 4 / 9 y = sum - x return } funcmain() { fmt.Println(split(17)) }// 7 10

  16. tik For ciklas packagemain import "fmt" funcmain() { sum := 0 for i := 0; i < 10; i++ { // negalimi (), o {} privalomi sum += i } fmt.Println(sum) }

  17. WHILE atitikmuo packagemain import "fmt" funcmain() { sum := 1 forsum < 1000 { // panaikinus sąlygą – amžinas ciklas sum += sum } fmt.Println(sum) }

  18. Sąlygos kintamųjų pasiekiamumas ... funcpow(x, n, lim float64) float64 { if v := math.Pow(x, n); v < lim { return v } else { fmt.Printf("%g >= %g\n", v, lim) } returnlim } ...

  19. Struktūros (i) packagemain import "fmt" typeVertexstruct { X, Y int } funcmain() { v := new(Vertex) fmt.Println(v) v.X, v.Y = 11, 9 fmt.Println(v) }

  20. Struktūros (ii) packagemain import ( "fmt" "math" ) typeVertexstruct { X, Y float64 } func (v *Vertex) Abs() float64 { returnmath.Sqrt(v.X*v.X + v.Y*v.Y) } funcmain() { v := &Vertex{3, 4} fmt.Println(v.Abs()) }

  21. Daugiagijiškumas (i) • Goroutine – ne gija. Tai nepriklausomai veikianti funkcija. funcsum(a []int, c chanint) { sum := 0 for _, v := range a { sum += v } c <- sum // sendsum to c } funcmain() { a := []int{7, 2, 8, -9, 4, 0} c := make(chanint) gosum(a[:len(a)/2], c) gosum(a[len(a)/2:], c) x, y := <-c, <-c // receivefrom c }

  22. Daugiagijiškumas (ii) • Kanalo uždarymas galimas su close(c). • Kanalo buferis: funcmain() { c := make(chanint, 2) c <- 1 c <- 2 fmt.Println(<-c) fmt.Println(<-c) } funcmain() { c := make(chanint, 10) gofibonacci(cap(c), c) for i := range c { fmt.Println(i) } }

  23. Kanalų valdymas select { case v1 := <-c1: fmt.Printf("received %v from c1\n", v1) case v2 := <-c2: fmt.Printf("received %v from c2\n", v1) case c3 <- 23: fmt.Printf("sent %v to c3\n", 23) default: fmt.Printf("no one was ready to communicate\n") }

  24. Standartiniai paketai • IO: Reader, Writer • Net/http: HTTP serverio ir kliento implementacija • Time: realizuoja laiko, trukmės ir kitas tokio tipo funkcijas • Flag: API skirtas komandinės eilutės apdorojimui • Encoding/json: konvertuoja JSON tipo duomenis į/iš Go duomenų struktūrų • Database/sql: komunikacija su SQL DB • ...

  25. Trumpa prezentacija • Video pristatymas iš kūrėjų.

  26. Projektų pavyzdžiai: atviras kodas Realaus laiko žinučių sistema. Aukštas pasiekiamumo lygis bei fault-tolerancepalaikymas (statistiškai ~90000 žinučių/sekundę). Aplinkų kopijų kūrimo virtualioms mašinoms bei debesų serveriams automatizavimo įrankis. Packer Palengvina programų supakavimą bei paruošimą vykdymui lightweight konteineriuose.

  27. Kiti panaudojimo pavyzdžiai Sukūrė savo DNS teikiamas paslaugas Go pagrindu. Planuoja migruoti ir log’inimo infrastruktūrą, kuri generuoja gigabaitus per minutę. Beveik visos sistemos dalys kurtos panaudojant Go kalbą. Kai kurios dalys – vien tik Go.

  28. Nuorodos • Golang.org • Google grupė: • https://groups.google.com/forum/#!topic/golang-nuts/tLsxO2S4yoQ • Prezentacijos: • http://talks.golang.org/2012/concurrency.slide#1 • http://talks.golang.org/2012/simple.slide#1 • Trumpa kodo rašymo instrukcija: • http://www.youtube.com/watch?v=XCsL89YtqCs

More Related