Konštanty a vlastné typy v Go

Sunday, Nov 22, 2020 by Lenka
Go programovanie s konštantami a vlastnými typmi.

V Go je veľmi jednoduché vytvoriť si vlastný typ (custom type), vytvoriť konštantu vlastného typu alebo enumerátor (enum).

Konštanta (Constant)

Ako už názov KONŠTANTA (constant) označuje niečo fixné - pevné/stálé, aj v programovacích jazykoch je to rovnaké. Keď je raz hodnota konštanty definovaná, už viac nemôže byť zmenená. V Go to platí rovnako.

Konštanta v Go môže byť akýkoľvek z jednoduchých a zložených typov - celočíselná konštanta (integer), konštanta s plávajúcou desatinnou čiarkou (float, complex), znak (character), reťazec (string), pravdivostná konštanta (boolean). Tiež rozlišujeme enumované konštanty (enum).

S konštantou pracujeme ako s regulárnou premennou s jedinou výnimkou, že hodnota konštanty musí byť známa pri kompilácii a teda nemôže byť priradená k hodnote vrátenej volaním funkcie. Taktiež ju nemôžeme meniť počas behu programu. Konštantu definujeme pomocou rovná sa = (bez :), prípadne môžeme explicitne definovať typ const <názov> <typ> = <hodnota>.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const a = 11 // allowed
	  a = 12 // reassignment not allowed
	  
  var b = math.Sqrt(4)   // allowed
const c = math.Sqrt(4)   // not allowed

const d int = 5 // allowed
const e := 5 	// not allowed

const i, j, k = 2, int64(2), int32(2) // int constant
const l, m    = 2.2, complex(2i) 	  // float, complex constant
const s       = "hello" 			  // string constant

iota

Go má špecialnu konštantu nazývanú iota, ktorej defaultná hodnota je 0 a automaticky narastá o 1, keď je priradená k inej konštante.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
const (
    a = iota // iota = 0
    b = iota // iota = 1
    c = iota // iota = 2
)

const d = iota // iota value reset to 0 because assign into another variable with const keyword

const (
	e = iota - 1 // -1
	f		 	 //  0
	g		 	 //  1
	h		 	 //  2
)

Vlastný typ (Custom type)

Vlastný typ vytvoríme pomocou type <meno> <podkladový-typ> pričom podkladový typ (underlying type) je typ, ktorý Go pozná (int, float64, struct,…).

Meno typu (ale tiež aj premenných a funkcií) je tzv. identifikátor. Go používa UTF-8 kódovanie namiesto ASCII, preto môžeme vytvoriť pomenovanie napríklad z písmen gréckej abecedy (𝛼ϒ je korektný názov premennej). Podčiarkovník ’_’ je špeciálny prípad identifikátora, takzvaný prázdny identifikátor. Identifikátor môže začínať veľkým alebo malým písmenom, čím rozlišujeme, či sa jedná o verejný (public) alebo súkromný (private, package private) identifikátor.

Identifikátory nemôžu:

  • začínať číslicou (4teen, 9th),
  • byť jedným z kľúčových slov v Go (for, if),
  • obsahovať operátory (+plus, *star).
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main

import "fmt"

type Identificator int
type Name string

func register(id Identificator, name Name) {
	fmt.Println("User: %d %s\n", id, name)
}

func main() {
	var i Identificator = 123
	var n Name = "Joe"
	
	register(i, n)
}
$ go run main.go
User: 123 Joe

Na akú kávu máš chuť?

Konštanty a vlastné typy môžeme použiť v príklade s kávovarmi z minulého týždňa. Vytvoríme si konštanty typu coffeeSize a nahradíme to všade, kde sme používali size (type int).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
type coffeeSize int

const (
	ristretto coffeeSize = 20
	espresso 			 = 30
	doppio				 = 60
	lungo				 = 90
	caffeeCrema			 = 150
)

type coffeePower int

const (
	strong coffeePower = iota 	// 0
	lessStrong 					// 1
	normal						// 2
	weakest						// 3
)

Referencie

  1. Go by Example: Constants
  2. An Introduction to Programming in Go: Constants
  3. Effective Go: Constants

Vaše otázky, návrhy a komentáre

Verím, že vás tento návod inšpiroval a budem vďačný ak dáte spätnú väzbu a pomôžete mi zamerať sa na to čo by vás zaujímalo.

TAK ČO HOVORÍŠ ?

Kontaktuj nás ak potrebuješ pomoc, veľmi radi pomôžeme.

Kontaktuj nás