Druk uitvoer in console met Go

In dit artikel leggen we de nadruk op hoe je teksten kan laten afdrukken in de console met behulp van de print functie in Go. Zoals in Unix en C, beidt Go ook verschillende manieren om output op het scherm of console af te drukken. Al deze functionaliteiten kunnen worden gedaan met behulp van het fmt Go pakket. Het fmt pakket bevat de I/O functies die vergelijkbaar zijn met printf en scanf in C. De syntax is overgenomen van C, maar de implementatie is veel eenvoudiger in Go. Lees fmt Go pakket voor meer informatie.

De meest eenvoudigste manier om hiermee te beginnen is om het println– en printf-functies te gebruiken:

Println voorbeeld

package main

import "fmt"

func main() {
   fmt.Println("Go dev-tips is geweldig!")
}

Printf voorbeeld

import "fmt"

func main() {
   stringValue := "Go dev tips!"
   fmt.Printf("Hello %s",stringValue)
}

Print

De print functie gebruikt een standaardindeling voor elke waarde in de opgegeven volgorde. Indien iets mis is met het opgegeven formaat, een foutmelding wordt weer gegeven. 

De functie fmt.Print() is identiek aan de functie fmt.Println(), maar er zijn twee belangrijke verschillen:

  • Er worden geen nieuwe regel toegevoegd aan het einde van elke regel. Bij Println() is dat wel het geval.
  • Ruimte tussen argumenten wordt alleen toegevoegd als geen van beide een string is

Functie signatuur:

fmt.Println(a ...interface{}) (n int, err error)

package main

import "fmt"

func main() {
   fmt.Print("Go dev tips ","is ","geweldig") 
   // resultaat -> Go dev tips is geweldig
}

In gevallen waarmee alle tekens geen string zijn, worden spaties automatisch tussen elk teken toegevoegd:

De fmt.Print() functie kan ook gebruikt worden in plaats van fmt.println(). Net zoals al beschreven werd in de vorige sectie is dat de fmt.Println() functie nieuwe regels toevoegen aan het eind van elk regel. Hieronder staat een voorbeeld hiervan:

Tip: Als je maar één variabele hoeft af te drukken en je moet kiezen tussen fmt.println() en fmt.print() dan hang het er vanaf of je het nieuwe regelteken nodig hebt of niet.

Printf

De fmt.printf() functie vereist een formaatspecificatie en voor elke moet je een waarde mee geven die moet overeenkomen met het data type. Met zo’n functie heb je beter controle over de opbouw, maar aan de andere kant vereist het wel meer codes.

package main

import "fmt"

func main() {
   binaireWaarde := 0100
   fmt.Printf("Binaire formaat: %b", binaireWaarde)
   // output: Binaire formaat: 1000000
}

Formaatspecificaties

De volgende tabel illustreert de mogelijkheden voor formaatspecificatie:

formaat
specificatie
Definitie
%b– Voor base 2 nummersysteem (binair cijfersysteem)
– In het geval van floating point componenten: decimale notatie met een macht van twee (bijv.: -123456 -78)
%cUnicode teken, lees Generieke Unicode gebruiken in Go voor meer informatie.
%dBase 10 nummersysteem integer (int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64 and uintptr)
Int: gesigneerd 32 bits integer
Int8: gesigneerd 8-bit signed integer (bereik: -128 -> 127)
Int32: gesigneerd 32-bit integer (bereik: -2147483648 -> 2147483647)
Int64: gesigneerd 64-bit integer (bereik: -9223372036854775808 -> 9223372036854775807)
Uint: ongesigneerde 32 bits integer
Uint8: ongesigneerde 8-bit integer (bereik: 0 -> 255)
Uint16: ongesigneerde 16-bit integer (bereik: 0 -> 65535)
Uint32: ongesigneerde 32-bit integer (bereik: 0 -> 4294967295)
Uint64: ongesigneerde 64-bit integer (bereik: 0 -> 18446744073709551615)
Uintptr: ongesigneerde 64-bit integer
%oBase 8 nummersysteem (bekend als Octaal) integer. Bereik: 0- 7.
%OOctaal met ‘0o’ prefix integer.
%qEén aanhalingsteken ontsnapping teken
%xBase16 nummersysteem kleine letters vanaf a t/m f en hexadecimaal waardes, lees Hexadecimaal afdrukken in Go voor meer informatie.
%XBase 16 nummersysteem hexadecimaal in hoofdletters, lees Hexadecimaal afdrukken in Go voor meer informatie.
%UUnicode formaat, lees Hexadecimaal afdrukken in Go voor meer informatie.
%eNotatie exponent (wetenschap) (bijv.: -1.234456e+78)
%ENotatie exponent (wetenschap) (bijv.: -1.234456E+78)
%f, %FDecimaal waarde zonder exponent (floating-point). 
Nauwkeurigheid:
%f: standaard breedte (standaard nauwkeurigheid)
%9f: breedte 9 (met standaard nauwkeurigheid)
%.2f: standaard breedte met nauwkeurigheid van 2
%9.2f: breedte van 9 met nauwkeurigheid van 2
%9.f: breedte 9 met nauwkeurigheid van 0
%gHetzelfde als %e maar voor hogere exponenten
%GHetzelfde als %E maar voor grote exponenten
%xMet floating point:
– Hexadecimale notatie (decimale macht van twee exponenten) (e.g.: 0x1.3ep+42)
Met slice of strings:
– base 16 lower-case (two character per byte)
%XFor floating point:
– Upper-case hexadecimal notation decimal power of two exponent (e.g.: 0x1.3ep+42)
For slices or strings:
– Base 16 nummersysteem met kleine letters en twee tekens per byte.
%sBytes van string slice
%qEscape-indeling voor dubbele aanhalingstekens
%pEerste element van basis 16-annotatie met de ‘0x’ prefix.
Opmerking: %b,%d,%o, %x en %X werk ook met pointers. De waarde wordt geformatteerd in geheel integer. 
%tBoolean
%vWaarde in een standaardindeling die kan worden met:
%t
%d (‘%#x‘ door gebruikt van ‘%#v‘)
%g
%s
%p
\bBackspace (U0008)
\\Backslash (U005c)
\tHorizontaal tab teken (U0009)
\nNieuw lijn (U000A)
\fFormulierfeed (U000C)
\rCarriage return (U000D)
\vVerticaal tab (U000b)

Voorbeelden van geavanceerde indelingsspecificaties

FormaatspecificatieDefinitieVoorbeeld
%+dToon plusteken‘+105’
%<width>dPad met spaties (totale breedte met opvulling aan de linkerkant in het
geval de waarde kleiner is dan de opgegeven breedte)
%5d -> __105
%-<width>dPad met spaties (totale breedte met opvulling aan de rechterkant in het
geval de waarde kleiner is dan de opgegeven breedte)
%-5d -> 105__
%0<width>dPad met nullen op basis van de opgegeven breedte%05d -> 00105
%#xBase 16 met leidende 0x105 -> 0x69
%#UUnicode met karakter105 -> U+0069 ‘i’
%<width>sTotale breedte met opvulling aan de linkerkant in het geval de waarde
kleiner is dan de opgegeven breedte
%8s -> “___value” 
%-<width>sTotale breedte met opvulling aan de rechterkant in het geval de waarde
kleiner is dan de opgegeven breedte
%-8s -> “value___”

Printf fout afhandeling 

Ongeldige argument

Bij gebruik van de fmt.Printf() functie met formaatspecificatie wordt een foutmelding gegenereerd wanneer een ongeldig argument wordt opgegeven. Een voorbeeld van een dergelijk scenario is het verstrekken van een integer waar een string wordt verwacht.

Alle foutmelding begint met een string “%!” en soms door een enkel teken en eindigen met een beschrijving tussen haakjes. In dit voorbeeld verwachtte de functie een string maar kreeg een integer waarde van 24. 

Ontbrekende argumenten

Wanneer een formaatspecificatie wordt opgegeven en met geen argument, wordt een ontbrekende foutoutput gegenereerd.

Te veel argumenten foutmelding

Deze foutmelding treedt op wanneer er meer argumenten zijn dan opgegeven werd aan de formaatspecificatie(s).

De foutmelding hierboven meld aan dat er extra argumenten “Dev” van het type String en “Tips” van het type string zijn opgeeft.

Niet-int breedte foutmelding

Met een formaatspecificatie kunt je ook een aangepaste breedte voor de bijbehorende string definiëren door ‘%*s‘ te gebruiken. Een aangepaste breedte verwacht een Integer en als er geen integer wordt definieert, wordt er een BADWIDTH foutmelding gegenereerd.

Ongeldig nauwkeurigheid data type

Met een formaatspecificatie kunt je ook een aangepaste nauwkeurige waarde definiëren voor een string door de ‘%.*s’ formaat te gebruiken. Een aangepaste nauwkeurigheid waarde moet als een Int-waarde definieert worden anders wordt een BADPREC (verkeerde precisie) foutmelding gegenereerd.

Ongeldige index foutmelding

Het definiëren van de argument index is ook toegestaan met de fmt.Printf() functie door de ‘%*[index]d’ te gebruiken. Een dergelijke indelingsspecificatie definieert een integer array en de index waarop de waarde moet worden opgehaald.

Wanneer een ongeldige argument index wordt opgegeven een BADINDEX-foutmelding wordt gegenereerd aangezien de index waarde niet bestaat.

Panic foutmelding

Sommige van de boven beschreven functies kunnen panic foutmelding genereren bij het optreden in ernstige omstandigheden, bijvoorbeeld wanneer de opgegeven waarde gelijk is aan nil. In het geval van een string wordt een “<nil>” weergegeven.

Println

De fmt.Println() functie print data naar console. Bij gebruik van deze functie wordt aan het einde van elke regel een nieuwe regel automatisch toegevoegd.

Functie signatuur:

fmt.Println(...interface{}) (n int, err error)

Op basis van de signatuur bevat het functie een interface, wat betekent dat een aantal argumenten van elk type kan mee gegeven worden.

package main

import "fmt"

func main() {
   fmt.Println("Go dev tips is geweldig!")
}

‘Vet’ commando voor het scannen en vinden van syntax fouten codes

Het ‘vet’ commando zoek door je Go-broncode code heen naar synthax fouten. Met alle foutmelding voorbeelden van de vorige secties hierboven, kun je synthax fouten vastleggen die misschien niet door de compiler worden opgevangen.

Deze functie kan gebruik worden door de volgende commando:

go vet <project file> 

In dit volgende code voorbeeld gaan we het bestand print_f.go scannen op eventuele synthax fouten. Het resultaat hieronder geef aan dat er een fout is op regel 13 met de Sprintf functie die twee argumenten bevatten in plaats van één:

Volg ons:

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *