Go (programozási nyelv)

A Wikipédiából, a szabad enciklopédiából
Go
Paradigma compiler által fordított, konkurens, imperatív
Jellemző kiterjesztés .go
Megjelent 2009
Tervező Robert Griesemer, Rob Pike és Ken Thompson
Utolsó kiadás go1.2[1] (2013. december 1.)
Fordítóprogram gc (8g, 6g), gccgo
Hatással volt rá C++ és Python; hatott rá: Limbo, occam
Operációs rendszer Linux, Mac OS X, FreeBSD, OpenBSD, MS Windows, Plan 9[2]
Licenc BSD[3]
Weboldal

A Go a Google által kifejlesztett[4], compiler által fordított, konkurens programozási nyelv. A nyelvet Robert Griesemer, Rob Pike és Ken Thompson tervezték meg. A jelenlegi implementációi közül a Gc C nyelvben íródott, szintaktikai elemzésre (parserként) yacc/bison-t használ, míg a Gccgo C++ front-endjét (felhasználóval kapcsolatot tartó réteg) a standard GCC back-endhez (tényleges feldolgozást végző réteg) csatolt rekurzív parser (recursive descent parser) egészíti ki.[5]

A Go szintaxisa a C nyelvéhez áll közel, a típusdeklaráció kivételével; az egyéb szintaktikai eltérések közé tartoznak a for ciklus és a feltételes kifejezés (if) hiányzó zárójelei. A nyelv támogatja a szemétgyűjtést. A Go konkurenciamodellje Tony Hoare CSP-jén alapszik. A kihagyott funkciók közé tartozik a kivételkezelés, az öröklődés, a generikus programozás és a metódusok újradefiniálása (method overriding). A Javától és a C++-tól eltérően a map-ek (asszociatív tömbök) beépített nyelvi elemek, éppúgy mint a stringek.

Problémák a névvel[szerkesztés | forrásszöveg szerkesztése]

A Google által a nyelv nevének választott „Go” ütközik a F. G. McCabe és K. L. Clark által 2004-ben kifejlesztett programozási nyelv, a Go! nevével.[6] A problémáról szó van a Google Go-oldalain, jelenleg a legnépszerűbb ötlet az, hogy a Google nyelvét át kellene nevezni „Issue 9”-re.[6]

Példák[szerkesztés | forrásszöveg szerkesztése]

Hello GO![szerkesztés | forrásszöveg szerkesztése]

Az alábbi egy „Helló, világ!”-program Go nyelven.

package main
 
import "fmt"
 
func main() {
  fmt.Printf("Hello, World\n")
}

Egyszerű echo (parancs)[szerkesztés | forrásszöveg szerkesztése]

A Unix echo parancsának egy megvalósítása

package main
 
import (
  "os";
  "flag"; // parancssori opciók elemzésére
)
 
var omitNewline = flag.Bool("n", false, "don't print final newline")
 
const (
  Space = " ";
  Newline = "\n";
)
 
func main() {
  flag.Parse(); // az argumentumok listáját végignézi és beállítja a flageket
  var s string = "";
  for i := 0; i < flag.NArg(); i++ {
    if i > 0 {
      s += Space
    }
    s += flag.Arg(i)
  }
  if !*omitNewline {
    s += Newline
  }
  os.Stdout.WriteString(s);
}

FizzBuzz teszt[szerkesztés | forrásszöveg szerkesztése]

A FizzBuzz teszt lényege: 1-től 100-ig vizsgáljuk a számokat.
Ha 3-mal és 5-tel is osztható egy szám kiírjuk: FizzBuzz.
Ha csak 3-mal: Fizz.
Ha csak 5-tel: Buzz.
Ha egyikkel se akkor kiírjuk a számot.

package main //csomag neve
 
//Függőségek
import (
  "fmt" //Parancssori kiíráshoz...
)
 
//A program futása a main-ban kezdődik
func main() {
 for i := 1; i < 100; i++ { // 1-től 100-ig for ciklus
    fizz := ((i % 3) == 0) //osztható-e 3-mal
    buzz := ((i % 5) == 0) //osztható-e 6-tel
     if fizz && buzz { // Ha mindkettővel: fizzbuzz
	fmt.Println("FizzBuzz")
     } else if fizz { //ha csak 3-mal Fizz
	fmt.Println("Fizz")
     } else if buzz { //ha csak 5-tel Buzz
	fmt.Println("Buzz")
     } else { //Egyébként a szám maga
	fmt.Println(i)
     }
 
 }
}

Források[szerkesztés | forrásszöveg szerkesztése]

  1. Go Blog - Go 1.2 is released
  2. Go Porting Efforts. Go Language Resources. cat-v, 2010. január 12. (Hozzáférés: 2010. január 18.)
  3. Text file LICENSE. (Hozzáférés: 2011. január 27.)
  4. Google-go-language
  5. http://golang.org/doc/go_faq.html#Implementation
  6. ^ a b code.google.com

Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]