Oblikovanje vaše kode je pomemben način za izboljšanje njene berljivosti, doslednosti in ponovne uporabe. Pravilno oblikovano kodo je lažje razumeti, spreminjati in vzdrževati.
Ena od odličnih funkcij Go-ja so njegove dobro definirane konvencije oblikovanja. Za samodejno oblikovanje kode lahko uporabite vgrajeni paket za formatiranje in ukaz go fmt. To bo pomagalo zagotoviti, da ga bodo lahko drugi programerji Go čim lažje prebrali.
Paket Format in ukaz fmt
The format paket izvaja standardno oblikovanje za Pojdi na izvorno kodo. Paket interoperira z go format orodje ukazne vrstice za prilagodljivost pri oblikovanju kode Go.
Paket formata je podmodul v paketu go. Evo, kako ga lahko uvozite:
uvoz"go/format"
Po dokumentaciji ukaza go fmt lahko brskate tako, da navedete pomoč ukaz pred fmt ukaz:
pojdi pomagat fmt
Podajte ime datoteke za ukazom fmt, da formatirate to datoteko. To bo prilagodilo presledke in zamike vaše kode, da bodo v skladu s standardi Go.
go fmt main.go
V zakulisju je go fmt vzdevek za ukaz gofmt, natančneje:
gofmt -l -w
Te zastavice povzročijo, da gofmt zapiše vse spremembe v vsako datoteko, ki jo posredujete, in navede imena datotek, ki jih spremeni.
Dodate lahko -x zastavico za ukaz fmt. Zastavica -x pomaga pri zapisovanju sprememb iz oblikovalnika v izvirno datoteko.
go fmt -x main.go
The -n zastavica deluje podobno kot -x, vendar ne spreminja. Namesto tega prikaže ukaze, ki bi se go fmt izvajali brez -n:
go fmt -n main.go
Zastavica pove oblikovalcu, naj prikaže spremembe, kar vam omogoča, da jih najprej pregledate, preden jih uporabite.
Tu je preprost program Go, ki prebira cela števila od nič do pet in natisne niz »Hello World!«.
// formatiranje datoteke z imenom main.go, kot je prikazano v zgornjem primeru
paket glavni
uvoz"fmt"
funkglavni() {
var x int=5
za jaz:=0;jaz fmt. Println("Pozdravljen, svet!")
}
}
Formatiranje izvorne kode Go
Paket formatov vsebuje a Vir funkcijo za formatiranje datotek Go iz programov. Datoteko boste morali prebrati in vsebino posredovati kot argumente funkciji Source.
Funkcija Source bo vrnila formatirano vsebino datoteke, ki jo lahko zapišete v datoteko ali novo.
Datoteke lahko berete z ReadFile funkcija ioutil paket. Funkcija ReadFile sprejme ime datoteke in vrne vsebino datoteke ter napako za obdelavo.
fileContent, err := ioutil. ReadFile("main.go")
če napaka!= nič {
dnevnik. Fatalln("Pri branju datoteke je prišlo do napake", napaka)
}
Posredovanje vsebine datoteke funkciji Source vrne formatirano vsebino datoteke in napako za obdelavo.
formatirano, napaka := format. Vir (fileContent)
če napaka!= nič {
dnevnik. Fatalln("Prišlo je do napake pri oblikovanju izvorne funkcije", napaka)
}
Formatirano vsebino datoteke lahko zapišete v datoteko z WriteFile funkcija ioutil paket. Funkcija WriteFile sprejme ime datoteke, vsebino in način dovoljenja za datoteke, ki vrne vse napake. Način dovoljenja je pomemben le, če datoteka ne obstaja, v tem primeru jo bo WriteFile ustvaril.
The 0644 način dovoljenja za datoteke daje:
- Dovoljenja za branje in pisanje lastnika datoteke.
- Dovoljenja za branje drugim uporabnikom v isti skupini kot lastnik.
- Brez dovoljenj za druge uporabnike.
napaka = ioutil. WriteFile("main.go", oblikovano, 0644)
če napaka!= nič {
dnevnik. Fatalln("Pri pisanju datoteke je prišlo do napake", napaka)
}
Lahko pa izvorno kodo Go posredujete funkciji Source za oblikovanje. Kodo lahko določite v bajtni rezini s kljukicami (`):
paket glavni
uvoz (
"fmt"
"go/format"
)funkglavni() {
// preprost program, ki z matematiko izračuna površino trikotnika
// funkcija
formatirano, napaka := format. Vir ([]bajt(`
paket glavni
uvoz(
"fmt"
"matematika"
)
funkglavni(){
var a float64=3
var b float64=4
var c float64=5
var s float64=(a+b+c)/2
var območje float64=matematika. Sqrt (s*(s-a)*(s-b)*(s-c))
fmt. Println("Površina trikotnika je: ",območje)
}
`))
če napaka!= nič {
dnevnik. Fatalln("Prišlo je do napake pri oblikovanju izvorne funkcije", napaka)
} drugače {
fmt. Println(vrvica(formatirano))
}
}
Pri oblikovanju boste morali rezino bajta pretvoriti v niz z vrvica funkcijo. Tukaj je formatirana izvorna koda.
Prilagajanje postopka oblikovanja
Postopek oblikovanja lahko prilagodite s paketi formata Config struct. Struktura Config vsebuje polja, v katerih lahko podate možnosti formata ob instanciranju.
uvoz"go/format"
config := &format. Config{
// Tabwidth nastavi število presledkov na zavihek.
Širina zavihka: 8,// UseTabs označuje, ali naj oblikovalnik uporablja tabulatorje namesto
// presledki.
UseTabs: lažno,// TabIndent se uporablja za določitev, ali naj bo začetni zamik
// narejeno z uporabo zavihkov ali presledkov.
Tabulator: prav,// NoFinalTab določa, ali je treba odstraniti zadnji zavihek
// vrstice, preden so oblikovane.
NoFinalTab: prav,// Presledki določajo, ali naj se za poravnavo uporabijo presledki.
Prostori: prav,
// NoTrimTrailingSpace določa, ali naj sledi presledek
// izrezane iz vrstic, preden so oblikovane.
NoTrimTrailingSpace: lažno,
}
Polja lahko uporabite za prilagajanje delovanja vašega oblikovalnika tako, da nastavite možnosti glede na vaše zahteve.
Nato lahko uporabite izvorno metodo te strukture za oblikovanje bajtne rezine na podlagi vaše konfiguracije.
funkglavni() {
fileContent, err := ioutil. ReadFile("main.go")// upoštevajte, da je to izvorna metoda tipa `config`, ne iz
// sam paket `format`, čeprav je funkcionalnost enaka, boste
// tega se morate držati, če morate konfigurirati oblikovalnik
formatirano, napaka := konfig. Vir (fileContent)če napaka!= nič {
dnevnik. Fatalln("Prišlo je do napake pri oblikovanju vrste konfiguracije", napaka)
}
ioutil. WriteFile("main.go", oblikovano, 0644)
}
Klicanje konfiguracije. Funkcija Source(), kot je ta, oblikuje vsebino main.go datoteko z uporabo konfiguracijskih možnosti. Vrne oblikovano vsebino kot bajtno rezino in napako.
Niz lahko formatirate in manipulirate v Go
Format paket in ukaz go fmt vam lahko pomagata avtomatizirati postopek oblikovanja kode.
Go ponuja tudi paket fmt za oblikovanje nizov in paket nizov za manipulacijo nizov.
Paket fmt izvaja enostavnejši formatiran V/I s funkcijami, ki so analogne funkcijama C za printf in scanf. Funkcija nizov izvaja preproste funkcije za manipulacijo nizov, kodiranih z UTF-8.