ProgrammatieGo ontwikkelaar

Wat is een blank identifier in Go en waar moet je deze correct gebruiken? Zijn er 'valkuilen' bij het gebruik ervan?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

Blank identifier (_) is een speciale identifier in Go die wordt gebruikt om waarden te negeren. Het wordt gebruikt wanneer de geretourneerde waarde van een functie niet nodig is, bij het importeren van pakketten alleen voor het oproepen van hun init of bij het implementeren van interfaces.

Voorbeelden:

// Negeer de geretourneerde foutwaarde data, _ := ioutil.ReadFile("file.txt") // Import van een pakket alleen voor bijeffecten import _ "net/http/pprof"

Bovendien helpt de blank identifier bij het implementeren van een interface zonder expliciet alle methoden te gebruiken:

var _ io.Reader = (*MyReader)(nil) // compilatie faalt als het type de interface niet implementeert

Misleidende vraag

Kan de blank identifier worden gebruikt voor permanente onderdrukking van fouten? Is dit een veilige praktijk?

Antwoord: Nee. Hoewel de blank identifier het mogelijk maakt om een fout te negeren, is dit geen veilige praktijk — het onderdrukken van fouten leidt vaak tot fatale bugs of onjuiste werking van het programma. Fouten moeten altijd bewust worden behandeld, en de blank identifier mag alleen op duidelijk begrijpelijke plekken (zoals expliciet onbelangrijke logica) worden gebruikt om ze te onderdrukken.

Voorbeelden van echte fouten door gebrek aan kennis over dit onderwerp


Verhaal

In een applicatie voor het werken met bestanden gebruikte de ontwikkelaar overal de constructie _, _ = file.Write(...), waarbij hij fouten bij het schrijven negeerde. Als gevolg hiervan bleef het programma 'doorgaan alsof alles goed was' bij een volle schijf of een schrijffout, wat leidde tot gegevensverlies.


Verhaal

In een auditproject dacht de auditor dat als een functie een fout retourneert, deze altijd moest worden onderdrukt (_). Hierdoor werden fouten bij het schrijven van logboeken tijdens het testen niet opgemerkt — belangrijke gegevens gingen verloren en de oorzaak werd niet begrepen.


Verhaal

Een student, die Go aan het leren was, gebruikte een blank identifier bij het importeren van meerdere externe pakketten, hoewel dit helemaal niet nodig was. Hierdoor verdubbelde de grootte van het binaire bestand bijna, omdat alle side effects van de pakketten in de uiteindelijke applicatie waren opgenomen.