Literalai, taškas ir kopijos
Kelios struct smulkmenos, kurios greitai taps kasdienybe.
Literalų formos. Su laukų vardais (rekomenduojama — tvarka nesvarbi, praleisti laukai gauna nulines reikšmes) arba be vardų (visi laukai, tiksliai ta tvarka):
a := Item{Title: "Dune", Pages: 412} // Read praleistas → false
b := Item{"Dune", 412, true} // be vardų — visi ir iš eilės
var c Item // nulinis struct: "", 0, false
Pastebėk: nulinės reikšmės veikia ir struct viduje — var c Item yra saugus, tuščias įrašas (2 pamokos taisyklė galioja kiekvienam laukui).
Keitimas per tašką. a.Pages = 500 — laukas pakeičiamas vietoje, kaip paprastas kintamasis.
Kopijos. Struct — reikšmė, todėl priskyrimas ir perdavimas į funkciją daro pilną kopiją:
a := Item{Title: "Dune", Pages: 412}
b := a // b — pilna KOPIJA
b.Pages = 500
fmt.Println(a.Pages) // 412 — originalas nepasikeitė
Spąstai. Tai 3 pamokos kopijos spąstai, tik dabar — su visu įrašu:
markRead(it Item)viduje pakeitęsit.Read = truepakeisi tik kopiją, originalas liksfalse. Kol kas sprendimas tas pats — funkcija grąžina pakeistą įrašą (it = markRead(it)). 11 pamokoje*Itemrodyklė leis keisti originalą tiesiogiai — būtent todėl ji finaliniame projekte privaloma.