Vous êtes sur la page 1sur 8

Pgina1

16
DistribuirGo
Cdigo
DepoisdeterescritoalgumcdigoGo,huma
boachancedequevocvaiquereroutro
pessoasparasercapazdeuslo.PorqueGo
compiladoestaticamente,possveldistribuirbinrio
pacotesassimcomovocdistribuircdigo
escritosemC,ouqualqueroutroestaticamentecompilado
lngua.
1 $OtoolL6.out
2 6.out:
3 /Usr/lib/libSystem.B.dylib
Sadade:otool
ProgramascompiladospelaGcsoestaticamenteligado
assimvocpodeapenasdistribuirasadade6L
semsepreocuparcomquaisqueroutrasbibliotecas.Se
vocestdistribuindocdigo,especialmentepacotes
Page2
234 CAPTULO16:DistribuiodeGoCdigo
emformadefonte,entoGofornecealgunsajudante
utilitriosparatornarsuavidaumpoucomaisfcil.
InstalandopacotesdeTerceiros
0 $Irbuscargithub.com/dustin/gomemcached
1 $Irinstalargithub.com/dustin/gomemcached
2 $ls/go/src/pkg/github.com/dustin/gomemcached/
3 README.markdown cliente
4 gocache mc_constants.go
5 servidormc_constants_test.go
6 $Ls/go/pkg/darwin_amd64/github.com/dustin/
7 gomemcached.a
Irpacotes,comoexecutveis Go,podeser
distribudoemformatobinrio.Talcomoacontececombinrio
executveis,estesestolimitadosaumaarquitetura
eumaplataforma,porissonoorecomendado
mecanismodedistribuio.
Ocomandogoproporcionaumautilizaofcildemuito
mecanismoparaainstalaodepacotesdeirde
fonte.Normalmente,vocvaiusloemduasetapas.
Ocomandogogetvaibuscarocdigodo
orepositrioremoto.Gosabesobrevrias
locaisdecdigoespecfico,incluindoGoogleCode
eGitHub.Paraoutros,vocpodeespecificarumaURL
comonomedosistemadecontrolederevisoanexado,
comoexample.com/my/project.hgparabuscarapartirde
umrepositriomercurial.Ocomandovaiinstalar
emseguida,constrieinstalalo.
Asfontesserocolocadosnodiretriosrc/pkg
Pgina3
InstalandopacotesdeTerceiros 235
nasuainstalaoGoeocompilado
binrionodiretriopkg,emumsubdiretrio
correspondenteasuaarquitetura.
OURLnoinciodestaseoparaum
pacotequeforneceumaimplementaomemcached
paraGo.Sevocquiserusarestepacote,ento
vocdeveespecificarocaminhocompletoremotono
importardirectiva,assim:
mcimport"github.com/dustin/gomemcached/
client"
Issopermitequevriospacotescomomesmo
citaracoexistir,contantoqueelestmdiferentes
URLs.
Existemmuitosoutrospacotesdisponveisparaalm
abibliotecapadro,embora,comocomqualquer
outralngua,aqualidadevariaconsideravelmente.
Vocpodeencontrarumalistadeamaioriadelesemmovimento
dashboard: http://godashboard.appspot.com/
pacote
Pgina4
236 CAPTULO16:DistribuiodeGoCdigo
Criandopacotes
1 pacoteporexemplo
2
3 //Umainterfaceexemplonumpacote
4 tipodeinterfaceExemplo{
5 //Retornaonomedestetipo
6 Nome()string
7 //Identificadorexclusivoparaotipode
8 id()uint32
9 }
10
11 //Criaumnovovalordeimplementao
12 //AinterfaceExemplo
13 funcnewexample(){Exemplo
14 returnnew(concreteType)
15 }
De:pkg/src/eg/types.go
Nscriamosummontedepacotesquejestono
exemplos.Ou,maisprecisamente,criamos
umpacotechamadomainummontedevezes.Sevoc
olharnodiretriopkgnasuainstalaoGo,
entovocvaiencontrarum.umarquivoparacadapacote
quevocinstalou.
Aumarquivo.umumarquivodebibliotecaesttica.Ele
contmasadadocompilador.TheGo
compilador,aocontrriodeumcompiladorC,emitebastante
demetadadosnobinrioresultante,incluindoo
conjuntodefunesexportadasetipos.
Pequenospacotes,incluindoummontedepadro
pacotesdebibliotecas,socompiladosapartirdeumanicafonte
arquivos.Outrospodemsercompiladosapartirdemaisde
um.Sevocestcompilandovriosarquivosemum
Page5
Criandopacotes 237
nicopacote,entovocdevepasslasparaGC
comoumanicachamada.Issonecessrioporque
ficheirosindividuaisdeumpacotepodetermtuo
dependncias,quespodemserresolvidospor
considerandoosseusarquivosdeorigememcombinao.
Oexpacoteexemplomostraisso.um
pacotetrivialcontendodoisarquivos.Sevoctentar
compilarouisoladamente,entovocvaiter
erros.A/eg/concrete.gopkg/srcreferesea
umainterfacequenoestdefinidonoarquivoo
pkg/src/eg/types.goarquivorefereseaumaestruturaque
definidoemoutrolugar.
1 pacoteporexemplo
2
3 TipoconcreteTypestruct{}
4 const(
5 concreteTypeIduint32=0
6 )
7
8 func(sconcreteType)Nome()string{
9 voltar"tipoConcreto"
10 }
11 func(sconcreteType)id(){uint32
12 voltarconcreteTypeId
13 }
14 func(sconcreteType)isEqual(oexemplo)bool{
15 retornarconcreteTypeId==o.id()
16 }
De:pkg/src/eg/concrete.go
Arquivosdeorigemdentrodomesmopacotepodereferirse
paraunsdosoutrosvariveis privadasetipos.
Noexistetalcoisacomoumavariveldearquivolocalem
Pgina6
238 CAPTULO16:DistribuiodeGoCdigo
Vai.Osarquivosdeorigemsoapenasumaconveninciaparao
programadorelesnotmqualquersignificado
paraalngua.AocontrriodeC,noexistenenhum extern
directivanoGo,dizendoaocompiladorqueum
smboloquenopodeverrealmenteexiste.O
Ircompiladordevesercapazdeencontrartodosossmbolos
quequerreferirse,queremarquivosdeorigemou
pacotes.
Amaioriadosexemplosatagoratmsidoauto
contida,porissonopasseimuitotempo
olhandoregrasdevisibilidadedomovimento.Outrosidiomas
terumconjuntodepalavraschavequedescrevemavisibilidadede
vriossmbolos.Gousaumaabordagemmaissimples:
qualquercoisaquecomeacomumaletramaiscula
1

pblico,eassimpodeseracessadoapartirdeoutra
pacote.Qualqueroutracoisaprivado,oquesignificaque
elespodeseracessadoapartirdeummesmopacote.
Paraconstruiropacote,vocprecisarusaromovimento
construireirinstalarferramentas.Aetapadeconstruo
realmenteopcional:sevocomitilo,emseguida,irinstalar
irexecutlodeformaimplcita.Antesdeexecutarumououtro
comando,vocprecisatercertezadequepodeir
encontrarseusarquivosdeorigem,eque,aps
compilaessercapazdeencontrarogerado
pacote.IstocontroladoatravsdoGOPATH
variveldeambiente.Estecontmumalistade
caminhosqueGovaiusar,almdainstalao
localparaoprincipalambienteGo.
Irpacotesdevemestardeacordocomomesmolayout
1
ConformedefinidopelaespecificaoUnicode,incluindo
letrasmaisculasnolatinos,como.
Pgina7
Criandopacotes 239
comoaprincipalrvoreGo.Odiretrioquevocadicionar
aoGOPATHdeveconterumdiretriosrc,
quedeveconterumsubdiretrioparacada
pacote.Quandovocexecutavoinstalar,eleircriaruma
diretriopkgsenojexisteme
irinstalaropacotel.Vocpode,ento,
importlo,assimcomovocfariacomqualqueroutropacote.
1 $GOPATHexportao='pwd'
2 $ls
3 src
4 $Irconstruirporexemplo
5 $Irinstalareg
6 $ls
7 pkgsrc
8 $Filepkg/darwin_amd64/eg.a
9 pkg/darwin_amd64/eg.a:Arquivoaratual
Sadade:gobuild
Page8
240 CAPTULO16:DistribuiodeGoCdigo
DocumentandoSeuCdigo
0 $Irdocporexemplo,
1 PACOTE
2
3 pacoteporexemplo
4 importar"porexemplo"
5
6 TIPOS
7
8 tipodeinterfaceExemplo{
9 //Retornaonomedestetipo
10 Nome()string
11 //Contmmtodosfiltradasounoexportadas
12 }
13 Umainterfaceexemplonumpacote
14
15 funcnewexample()Exemplo
16 Criaumnovovalordeimplementao
17 ainterfaceExemplo
GOnotemarquivosdecabealhoparaajudarseparado
interfaceeimplementao.Estaseparao
impostapelalinguagem,equeml
afontepodeverfacilmentequaisossmbolossero
exportadoequesomantidasemsigilo.
Terquelerocdigofontedeumpacote
paraentendercomoelefuncionanooideal,e
nodeveserincentivada.Outilitriodocgo
ltodososarquivosdeorigemparaumpacote,
extraitodososcomentriosqueaparecemacimapblico
declaraeseasapresentaaousurio.
Persuadirosdesenvolvedoresaescreverdocumentao
umadastarefasmaisdifceisnaprogramao,assim
Page9
Manterseatualizado 241
GoDocdestinaseasertrivialutilizar.Hsim
nenhumasintaxeespecialparauslo:eleextraiqualquer
comentarqueapareceacimadeumadeclarao.
Esperemosque,pelotempoquevocleuataqui,
vocolhouparaadocumentaodopacotede
sitedaGo.Sesim,entovocjviu
asadado GoDoc .Naverdade,vocjusouo
ferramentadiretamente.Quandoexecutadocomosinalizadorhttp,ele
nosgeraHTML,eletambmfuncionacomoumweb
servidorpublicaradocumentao.
Vocpodeespecificarosinalizadorsrcparagerarinterno
documentao.Istomenostilporque
pessoasqueusamasinterfacesinternasso,provavelmente,
olhandoparaosarquivosdeorigem,masasadade
GoDocpodesermaisfcildenavegar.
Manterseatualizado
0 $IrferramentadecorreodiftrimStrings.go
1 diftrimStrings.gofixo/trimStrings.go
2 @@6,7+6,7@@
3 funomain(){
4 str:="\tIstoumastring\n"
5 str=strings.Trim(str,"\t\n\r")
6 palavras:=strings.Split(str,"",1)
7 +palavras:=strings.Split(str,"")
8 _para,palavra:=Rangepalavras{
9 fmt.Printf("%s\n",palavra)
10 }
11 $IrferramentadecorreotrimStrings.go
12 stringssplitfixa:trimStrings.go
Page10
242 CAPTULO16:DistribuiodeGoCdigo
AlinguagemGoebibliotecassoconstantemente
evoluo.Seriabastantefrustranteterde
manterreescreverumaplicativograndeIrparaprevenir
quesepartacomasversesmaisrecentesdo
lngua.Felizmente,estanonecessria:a
ferramentadecorreovaifazerissoporvoc.
Desdequecomeceiaescreverestelivro,o
strings.Split() funoqueeuuseino
oexemplotrimStrings.gonoCaptulo6,
ManipulandoStrings,fuidetomartrs
argumentosparatomardois,entoeuprecisavamodificar
lo.Oexemplonoinciodestaseomostra
comoeufizisso.
Eununcaconfiarinteiramenteautomticadecdigoreescrever
ferramentas,porissoopteiporexecutarcorrigircomaopodiff
primeira.Issomostraasmudanasqueelevaifazerparaque
quevocpodevlosparaasanidade.Estamudana
pareciasensata,entoeucorriaferramentanovamentee
modificaodoexemplo.
Sevocexecutaromovimentoferramentadecorreoajuda,emseguida,eleirlistartodos
asmodificaesquesepodemfazer.Vocpode
acharquevocnoquerfazertudoisso
mudanasevocpodeusaraoporpararestringir
aumalistadeapenasalgunsdeles.

Vous aimerez peut-être aussi