Kurzusok
/
Go
Go
/
Tanterv
/
Struktúrák
St

Struktúrák ebben a kurzusban: Go

1 feladat

A(z) Struktúrák fogalomról

A Go nyelvben a struct névvel ellátott elemek sorozata; ezeket mezőknek hívjuk, és minden mezőnek van neve és típusa. Egy mező neve a struct-on belül nem ismétlődhet. A struct fogalmát párhuzamba állíthatjuk az objektumorientált programozás osztályaival.

Struct definiálása

Új structot a type és a struct kulcsszó használatával hozol létre, és explicit módon megadod a mezők nevét és típusát. Például itt egy Shape structot definiálunk, amely egy alakzat nevét és méretét tárolja:

type Shape struct {
    name string
    size int
}

A structok mezőnevei a Go konvencióját követik: a kisbetűvel kezdődő mezők csak az ugyanabban a csomagban lévő kód számára láthatók, a nagybetűvel kezdődők viszont más csomagokból is.

Structpéldányok létrehozása

Miután definiáltad a struct-ot, létre kell hoznod egy új példányt, és a mezőket a nevük megadásával, tetszőleges sorrendben beállítod:

s := Shape {
    name: "Square",
    size: 25,
}

Egy példány mezőinek beolvasásához vagy módosításához a . jelölést használod:

// Update the name and the size
s.name = "Circle"
s.size = 35
fmt.Printf("name: %s size: %d\n", s.name, s.size)
// Output: name: Circle size: 35

Azok a mezők, amelyekhez nem rendelsz kezdőértéket, megkapják a zéróértéküket. Például:

s := Shape{name: "Circle"}
fmt.Printf("name: %s size: %d\n", s.name, s.size)
// Output: name: Circle size: 0

Létrehozhatsz egy struct példányt a mezőnevek használata nélkül is, amíg a mezőket sorrendben adod meg:

s := Shape {
	"Oval",
	20,
}

Ez a szintaxis azonban törékeny kódnak számít, mert elromolhat, amikor új mező kerül a structba, különösen ha az új mező típusa más. A következő példában egy plusz mezőt adunk a Shape-hez:

type Shape struct {
	name        string
	description string // new field 'description' added
	size        int
}

s := Shape{
    "Circle",
    20,
}
// Since the second field of the struct is now a string and not an int,
// the compiler will throw an error when compiling the program:
// Output: cannot use 20 (type untyped int) as type string in field value
// Output: too few values in Shape{...}

„New” függvények

Néha jó, ha vannak olyan függvényeink, amelyek segítenek structpéldányokat létrehozni. A konvenció szerint ezeket a függvényeket általában New-nak hívjuk, vagy a nevük New-val kezdődik, de mivel csak sima függvények, bármilyen nevet adhatsz nekik. Más nyelvek konstruktorai juthatnak eszedbe róluk, de Go-ban ezek is csak sima függvények.

A következő példában az egyik ilyen New függvénnyel létrehozunk egy új Shape példányt, és automatikusan beállítjuk az alakzat size mezőjének alapértelmezett értékét:

func NewShape(name string) Shape {
	return Shape{
		name: name,
		size: 100, //default-value for size is 100
	}
}

NewShape("Triangle")
// => Shape { name: "Triangle", size: 100 }

A New függvények használatának a következő előnyei lehetnek:

  • a megadott értékek ellenőrzése
  • az alapértelmezett értékek kezelése
  • mivel a New függvényeket gyakran ugyanabban a csomagban deklarálják, mint az általuk inicializált structokat, akár a struct privát mezőit is inicializálhatják

Hogy mélyebben beleásd magad ebbe a típusba, nézd meg ezeket az anyagokat: Go by Example: Structs, A Tour of Go: Structs vagy Structures in Go (structs)

A new beépített függvény

Egy structpéldány létrehozásának egy másik módja a new beépített függvény használata:

s := new(Shape) // s will be of type *Shape (pointer to shape)
fmt.Printf("name: %s size: %d\n", s.name, s.size)
// Output: name:  size: 0

Ebben a példában a new létrehozza a Shape struct egy példányát, amelyben minden érték a típusa zéróértékére inicializálódik, és visszaad egy rá mutató pointert.

Note

Többnyire nem fogsz olyan structpéldányokkal találkozni, amelyeket a new beépített függvénnyel hoztak létre. Mindig részesítsd előnyben a struct literált, egy saját New függvényt vagy bármely más, a csomag által kínált függvényt, amely segít felépíteni egy structot. A new beépített függvényt csak végső esetben használd új structpéldányok létrehozására.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Struktúrák fogalmat