Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:go:a_go_nyelv

< Go

Go nyelv

Bevezetés

A Go nyelv Google által támogatott nyelv, de a tulajdonosa Robert Griesemer. 2007-ben kezdték, az első nyilvános kiadás 2009-ben volt. Névütközés miatt Golang nyelvnek szokták nevezni.

A fejlesztés során az egyszerűség és a hatékonyság volt a cél. Szintaxisa a C nyelvhez áll közel, a típusdeklaráció kivételével. De eltér az if és a ciklus utasítások szintaxisa is.

Webhely:

Helló Világ

Készítsünk egy hello.go nevű állományt, amelynek tartalma a következő:

hello.go
package main
 
import "fmt"
 
func main() {
    fmt.Println("Helló Világ")
}

Futtatás:

go run hello.go

Fordítás és fordított alkalmazás futtatása:

go build hello.go
./hello

A Go programokat egy .go kiterjesztésű fájlba írjuk. Futtatni a go run paranccsal tudjuk. Fordítás és futtatásra is lehetőség van.

Megjegyzés

// egy soros
 
/* több
   soros
   megjegyzés
   */

Kivitel

ki.go
package main
 
func main() {
    println("Helló Világ!")
}
ki.go
package main
 
import "fmt"
 
func main() {
    fmt.Println("első")
    fmt.Println("második")
}
ki.go
package main
 
import "fmt"
 
func main() {
    fmt.Print("első")
    fmt.Println("második")
}

Kifejezések:

ki.go
fmt.Println(3 * 5)

Több paraméter:

fmt.Println("egy", "kettő")

Escape szekvenciák

escape.go
package main
 
import "fmt"
 
func main() {
    fmt.Println("me\ntés")
}
escape.go
package main
 
import "fmt"
 
func main() {
    fmt.Println("men\tés")
}
\a Csengőhang
\b Backspace
\\
Backslash
\t Vízszintes tabulátor
\n Új sor
\f Lapdobás
\r Kocsi vissza
\v Függőleges tabulátor
\' Egyszeres idézőjel
\" Kétszeres idézőjel
\x pontosan két hexadecimális szám követi
\ pontosan három hexadecimális szám követi
\u pontosan négy hexadecimális szám követi
\U pontosan nyolc hexadecimális szám követi

Változók

var a = 35

Egyszerűsített verzió:

a := 35
valtozo.go
package main
 
import "fmt"
 
func main() {
    var a = 35
    fmt.Println(a)
}

Valós számok

var num1 float32 = 3.14
var num2 float64 = 2.71828

Formázott kimenet

forma.go
package main
 
import "fmt"
 
func main() {
	var a = 35
	fmt.Printf("%d\n", a)
}

Matematikai könyvtárak

matek.go
package main
 
import (
    "fmt"
    "math"
)
 
func main() {
    var a = -9.0
    fmt.Println(math.Abs(a))
}

Véletlen szám

rand.go
package main
 
import (
    "fmt"
    "math/rand"
    "time"
)
 
func main() {
    rand.Seed(time.Now().UnixNano())
    var a = rand.Intn(10-1) + 1
    fmt.Println(a)
}

Operátorok

opera.go
package main
 
func main() {
	var a = 30
	var b = 35
	var res1 = a + b
	var res2 = a - b
	var res3 = a * b
	var res4 = a / b
 
	println(res1, res2, res3, res4)
}

Konvertálás

Szöveg számmá:

package main
 
import (
    "fmt"
    "reflect"
    "strconv"
)
 
func main() {
    var szoveg = "45"
    var szam, err = strconv.Atoi(szoveg)
 
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(reflect.TypeOf(szam))
    }
}

Bekérés

beker.go
package main
 
import (
	"fmt"
)
 
func main() {
	var nev string
	fmt.Print("Add meg a neved: ")
	fmt.Scanln(&nev)
	fmt.Println("Helló ", nev)
}
go run beker.go

Szám bekérése:

beker.go
package main
 
import (
	"fmt"
)
 
func main() {
	var num int
	fmt.Print("Add meg az életkorod: ")
	fmt.Scanln(&num)
	fmt.Println("Helló ", num, " éves")
}

Szelekció

A if utasítás használható szelekcióra. A if kulcsszó után zárójelek nélkül leírjuk a feltételt. A blokkot a kapcsos zárójelek „{}” határozzák meg.

szel.go
package main
 
import (
	"fmt"
)
 
func main() {
	var num int
	fmt.Print("Írj be egy számot: ")
	fmt.Scanln(&num)
 
	if num > 0 {
		fmt.Println("A szám pozitív.")
	} else if num < 0 {
		fmt.Println("A szám negatív.")
	} else {
		fmt.Println("A szám nulla.")
	}
}

A switch:

szel.go
package main
 
import (
	"fmt"
)
 
func main() {
	var num int
	fmt.Print("Írj be egy számot: ")
	fmt.Scanln(&num)
 
	switch num {
	case 0:
		fmt.Println("Nulla")
	case 1:
		fmt.Println("Egy")
	case 2:
		fmt.Println("Kettő")
	default:
		fmt.Println("Imseretlen")
	}
}

Iteráció

A Go nyelvben egyetlen ciklus utasítás van, de az használható több módon is.

Számláló típusú ciklus:

ite.go
package main
 
import (
	"fmt"
)
 
func main() {
	for i := 0; i < 10; i++ {
		fmt.Println(i)
	}
}

A for csak feltétellel, azaz amíg típusú ciklus:

ite.go
package main
 
import (
	"fmt"
)
 
func main() {
	i := 0
	for i < 10 {
		fmt.Println(i)
		i++
	}
}

Végtelen ciklus megszakítva:

cik.go
func main() {
	i := 0
	for {
		if i > 5 {
			break
		}
		fmt.Println(i)
		i++
	}
}

A range ciklus:

cik.go
package main
 
import (
	"fmt"
)
 
func main() {
	nums := []int{1, 2, 3, 4, 5}
 
	for index, value := range nums {
		fmt.Println(index, value)
	}
}

Függvények

A függvényeket a func kulcsszóval vezetjük be. Sorrendjük mindegy. Ha visszatérési értéket is megadunk a return utasítást kell használnunk.

fug.go
package main
 
import (
	"fmt"
)
 
func main() {
	about()
}
 
func about() {
	fmt.Println("Para Irén")
	fmt.Println("Szeged")
}
fugpa.go
package main
 
import (
	"fmt"
)
 
func main() {
	calcDouble(10)
}
 
func calcDouble(num int) {
	fmt.Println(num * 2)
}

Visszaadott érték:

vissza.go
package main
 
import (
	"fmt"
)
 
func main() {
	var sum = calcSum(1, 2)
 
	fmt.Println(sum)
}
 
func calcSum(num1 int, num2 int) int {
	return num1 + num2
}

Karakterláncok

kar.go
package main
 
import (
	"fmt"
)
 
func main() {
	var szoveg string = `
		Aranyszabály
		köztudott
		`
	fmt.Println(szoveg)
}

Hossz

Hány bájt hosszú:

word := "árvíztűrő"
fmt.Println(len(word))

Karakterek száma:

karakterek.go
package main
 
import (
	"fmt"
	"unicode/utf8"
)
 
func main() {
	word := "árvíztűrő"
	fmt.Println(utf8.RuneCountInString(word))
}

Tömbök

tomb.go
package main
 
import (
	"fmt"
)
 
func main() {
	var numbers [4]int
	numbers[0] = 35
	numbers[1] = 45
	numbers[2] = 55
	numbers[3] = 65
	fmt.Println(numbers[0])
}

Tömb kezdőértékkel:

tomb2.go
package main
 
import (
	"fmt"
)
 
func main() {
	numbers := [4]int{35, 45, 55, 65}
	fmt.Println(numbers[0])
}

Valós számok

numbers := [4]float32{3.7, 3.5, 3.4, 3.6}
fmt.Println(numbers)

Méret

numbers := [4]int{35, 45, 55, 65}
fmt.Println(len(numbers))

Fájlkezelés

hozzafuzes.go
package main
 
import (
	"fmt"
	"os"
)
 
func main() {
	fp, err := os.OpenFile("beker.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer fp.Close()
	fmt.Fprintln(fp, "alma")
}

A defer utasítás hatására a bezárás csak akkor hajtódik végre, ha függvény végrehajtása a végére ért.

Beolvasás:

beolvas.go
package main
 
import (
	"fmt"
	"os"
)
 
func main() {
	data, err := os.ReadFile("beker.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(data))
}

Beolvasás soronkénti bejárással

beolvasbejar.go
package main
 
import (
	"fmt"
	"os"
	"bufio"
)
 
func main() {
	file, err := os.Open("beker.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()
 
	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}
 
	if err := scanner.Err(); err != nil {
		fmt.Println(err)
	}
}
oktatas/programozas/go/a_go_nyelv.txt · Utolsó módosítás: 2025/01/13 12:06 szerkesztette: admin