Begynn å utvikle Med Go på Mac

Start Utvikling Med Go på Mac
Hva du skal lage

webapplikasjoner er en del av livet i disse dager. The Go språk, av Google, er et nyttig språk for å lage web-baserte applikasjoner. Jeg skal vise deg hvordan du kommer i gang med å bruke Go på en Mac.

Sette opp Go Miljø

Den enkleste måten å installere Go programmeringsspråk er av Homebrew. Hvis du ikke har installert Homebrew ennå, opplæringen Homebrew Demystified: OS X sin Ultimate Package Manager vil vise deg hvordan

I en terminal, skriv:.
Brygge installere goFinding farten Installer

For å finne plasseringen av gå install, skriver denne kommandoen på din terminal program:
ls -la `som go`

Du bør få dette resultatet:
lrwxr-xr-x 1 raguay hjulet 25 mai 14 15:11 /usr /local /bin /gå - > ../Cellar/go/1.2.2/bin/go

This Viser at hovedinnretningen på Go er /usr/local/Cellar/go/1.2.2. Du må sette opp miljøvariabelen GOROOT å være libexec katalog av den katalogen.

I hjemmekatalog, lage katalogen gå. Farten språket vil lagre alle nedlastede pakker der. Legg til din .bashrc fil og /eller .zshrc fil denne linjen:
eksport GOPATH = "/Users /< brukernavn > /gå" eksport GOROOT = "/< din gå installasjon > /libexec"

Hvis du bruker fisk, legg dette til din config.fish filen:
satt -xg GOPATH "/Users /< brukernavn > /go" set -xg GOROOT "/< din gå installasjon > /libexec "

For å teste gå, skriver følgende i en terminal:
gå versjonen

Det bør skrive ut den versjonen, i går, som er installert. På mitt system akkurat nå, viser det gå versjonen go1.2.2 darwin /amd64.

For å se etter nyere versjoner, la homebrew finne ut av. På kommandolinjen, skriv: updatebrew
brygge oppgradere

Oppdateringen kommandoen vil få en liste over oppdaterte programmer. Oppgraderingen kommandoen gjør selve oppgraderingen. På denne måten trenger du aldri å jakte de forskjellige nettsider for å finne oppdateringer.

Sette opp Editor

Nå som Go er på systemet, må du sette opp redaktøren. Jeg bruker Sublime Text 3, Vim, og Emacs mye. Derfor jeg trenger å få mine redaktører opp til hastighet med Go.

For Sublime Text, er det enkelt. Installer Package Manager for Sublime Text. Dette gjør det mulig for enkel installasjon av pakker. Pakken du ønsker å installere er goSublime. goSublime gir deg Gå språk syntaks utheving og en Go bygge system.

Hvis du vil installere Go syntax highlighting for Emacs, installere eLisp rutiner som finnes i $ GOROOT /Diverse /emacs til emacs elisp mappe. For Emacs å laste inn de nye filene, legger du denne linjen til .emacs fil i hjemmet mappe: product: (krever 'go-mode-load)

støtte for Vim tar mer arbeid. I en terminal, kjøre disse bash kommandolinjene:
mkdir -p $ HOME /.vim /ftdetectmkdir -p $ HOME /.vim /syntaxmkdir -p $ HOME /.vim /Autostart /goln -s $ GOROOT /Diverse /vim /ftdetect /gofiletype.vim $ HOME /.vim /ftdetect /ln -s $ GOROOT /Diverse /vim /syntaks /go.vim $ HOME /.vim /syntaxln -s $ GOROOT /Diverse /vim /Autostart /go /complete.vim $ HOME /.vim /Autostart /goecho "syntaks på" > > $ HOME /.vimrc

Den siste linjen er bare nødvendig hvis du ikke allerede har syntaks i din .vimrc.

Biblioteker og hvordan du bruker dem

Tradisjonelt bibliotek er grunnleggende om modularizing kode for gjenbruk. I farten, biblioteker er pakker. Farten språket kommer med mange pakker innebygd. Du kan skanne gjennom dem på pakker siden. Det er også mange 3. parts pakker og prosjekter.

For tittel tilfelle Server
, jeg kommer til å bruke tredjeparts pakke web.go. Det er en enkel web-server rammeverk som forenkler opprettelsen av web-baserte applikasjoner i Go. For å laste den pakken på systemet, skriver du inn følgende:
gå installere github.com/hoisie/web

The installasjonskommandoen tar et argument som er en web-adresse, uten http: //, for en pakke for å laste ned . Det er plassert i $ GOPATH katalogen som ble opprettet tidligere

Prosjekt: Tittel. Sak Server

Tittel saken er en av de mest kresen ting. Noen mennesker liker visse ord alltid små bokstaver. Andre mener ordene skal være alt tittel tilfelle. Derfor, for å gjøre det riktig (som de fleste pakkerutiner ikke gjør), må du sjekke hvert ord mot to ordbøker med ord for å få alt rett. Det gjør en flott nybegynner prosjekt i et nytt programmeringsspråk
////Package. Hoved ////Beskrivelse: Dette er hovedpakken for goTitleServer .//Dette er en enkel web-teknologi basert tittel tilfelle //tekst server .//pakken hoved

//symbolet angir en kommentar. Kompilatoren ignorerer alt etter det i linjen. Jeg liker å kommentere alt. Når du leser koden år senere, kommentarene hjelpe deg å huske hvordan programmet fungerer.

linje etter kommentarene er pakken erklæringen. Hver fil som Go bruker må være en del av en pakke. Hvert program har bare én hoved pakke som må ha main () funksjonen. Som forteller kompilatoren hvor du skal begynne å kjøre programmet.
////Import bibliotekene som vi trenger for serveren .//import ("github.com/hoisie/web" "os" "strenger") < p> For å gjøre bruk av pakker, må du importere dem. Alle pakker som brukes må være i denne uttalelsen. Jeg er blant de to base pakker av os for operativsystemfunksjoner og strenger for å manipulere strenger. Den github.com/hoisie/web laster web.go pakke for å lage web-serveren
////Funksjon:. Hjemmeside ////Beskrivelse: Denne funksjonen vil serveren hjemmesiden for inputing strengen //til konvertere .//func hjemmeside () string {return `<! DOCTYPE html > < html lang =" no "> < head > < meta charset = "utf-8" /> < title > tittel tilfelle Server < /title > <! - [if IE] > < script src = "http://html5shiv.googlecode.com/svn/trunk/html5.js" > < /script > < [endif] - >!; < style > body {width: 100%; } Header {bakgrunn: lyseblå; width: 80%; høyde: 100px; margin: 20px auto; border-radius: 10px; } Header h3 {text-align: center; padding-top: 40px; font-size: 28px; } Innhold {font-size: 16px; } Innhold skjema {font-size: arve; margin: auto; padding-left: 8px; width: 80%; text-align: center; } Innhold skjema p innspill {width: 80%; } Innhold skjema knapp {margin: auto; border-radius: 10px; } ≪ /style > < script type = "text /javascript" src = "http://code.jquery.com/jquery-1.11.1.min.js" > < /script > < script type = "text /javascript" > window.convert = function () {$ .ajax ({Type: "GET", url: "http://127.0.0.1:9910/titlecase/", data: {text:. $ ("# text") val ()}}) gjort (funksjon (msg) {$ ("# resultat") val (msg),..}); }; < /script > < /head > < body > < header > < h3 > tittel tilfelle Server < /h3 > < /header > < innhold > < form action = "/titlecase /" method = "get" > < p > Tekst å fikse: < innspill id = "text" type = "text" name = "text" > < /input > < /p > < knappen type = "button" id = "konvertere" text = "konvertere" onclick = "window.convert ();" > Konverter < /knapp > < p > Resultater: < innspill id = "resultatet" type = "text" name = "resultatet" > < /input > < /p > < /skjema > < /content > < footer > < /footer > < /body > < /html > `}

Denne funksjonen lager hjemmesiden. Dette er hva server gir til en nettleser som ber forsiden av nettstedet. Den func kommandoen er en funksjon erklæring. Hjemmesiden er navnet på funksjonen. The () forteller kompilatoren at denne funksjonen ikke tar noen innganger. Strengen etter parentes forteller kompilatoren at funksjonen vil returnere en streng.

Alt innsiden av {} er koden for funksjonen. Denne funksjonen er enkel: returnere sitert streng til den som ringer av funksjonen. I farten, kan du sitere strenger med "", '' og ``. Jeg brukte den siste hit for å ha en flere linjer streng som ikke er behandlet i det hele tatt. Kaller du det en streng.

Ved å bruke den bokstave sitat metoden, jeg kan layout på nettsiden akkurat som jeg ville normalt. Ingenting innsiden av aksemerkene blir behandlet av kompilatoren. Det er kopiert direkte i programmet, og programmet går den tilbake til nettleseren på forespørsel
////Funksjon:. TitleCase ////Beskrivelse: Dette tar en streng og konverterer den til tittel tilfelle. Deretter //returnerer strengen .////Input: //val resten av url hvis gitt noen .//func titleCase (CTX * web.Context, val streng) strengen {////Få strengen til å konvertere og dele den opp med mellomrom. //Ord: = strings.Split (ctx.Params ["tekst"] ",") ////Rekken av ord som bør være lavere tilfelle alltid, med mindre det er det første ordet //av tittelen. //Nedre: = [...] strengen {"to", "et", "og", "i", "som", "men", "med", "i", "hvis", "i "," den "," eller "," er "," med "," et "," den "," over "," vs "," vs "," via "," via "," en " } ////Rekken av ord som bør være alle store bokstaver alltid. //Øvre: = [...] string {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X "," HTML "," CSS "," AT & T "," PHP "} ////For hvert ord i tittelen. //For i, _: = range ord {////Anta ordet ikke er i store bokstaver eller små arrays. //Up: = false lav: = false ////Loop gjennom hvert ord i den nedre tilfelle array. //For j, _: = spenner lavere {if strings.ToLower (ord [i]) == lavere [j] {////Det matcher. Kontroller at ordet i rekken er den samme. //Sett opp flagg som sant. //Ord [i] = lavere [j] lav = true}} ////Loop gjennom hvert eneste ord i store bokstaver array. //For k, _: = spenner øvre {if strings.ToUpper (ord [i]) == øvre [k] {////Det matcher. Sørg for at ordet er rekken er den samme. //Sett lav flagget til sann. //Ord [i] = øvre [k] opp = true}} ////Hvis ordet ikke var i den øvre eller nedre rekke, og deretter gjøre en normal //tittel tilfelle konvertering. Dette gjør den første bokstav er stor og alle //andre bokstaver små bokstaver. //Hvis & (opp!); &Amp; (! lave) {ord [i] = strings.Title (ord [i])}} ////Sørg det første ordet er tittelen saken! //Ord [0] = strings.Title (ord [0]) ////Returner tittel ved å bli med alle ordene med et mellomrom. //Returnerer strings.Join (ord, "")}

Denne koden gjør arbeidet med å oversette en streng gitt til webserveren i til tittelen tilfelle tilsvarende.

CTX * web.Context, val string forteller kompilatoren at denne funksjonen får to variabler. Den ene er en peker til web.Context datastrukturen som er definert i web.go pakken. Den andre er en streng. Du deklarerer en variabel innspill ved navnet og den type variabel.

* symbolet angir en peker. En peker er en adresse til plasseringen i minnet for datastrukturen. Gå følger C data peker formater.

Den første setningen får parameter som heter tekst som nettleseren sender til serveren og deler den opp med mellomrom. Den strings.Split kaller Split funksjon innsiden av strenger pakken. Du kan tenke på pakker som ligner på objekter i C ++. Du kaller dem ved hjelp av en. mellom navnet pakken og funksjonsnavnet.

I hver pakke, hver funksjon som starter med en stor bokstav er tilgjengelig fra utsiden av pakken. Hver funksjon som starter med en liten bokstav er kun tilgjengelig fra innsiden av pakken.

Når strings.Split funksjon som deler opp en streng av separatoren, returnerer den en rekke strenger. Utgangen blir så tilordnet de variable ord. For å opprette en ny variabel, første gang det er brukt, må du bruke en: = å tildele den. Hvis du ønsker å endre samme variabel til en annen tabell med strenger, vil du bruke = operatør.

Deretter oppretter to arrays for de forskjellige ordlister. lavere er for alle små bokstaver ord, og øvre for alle store bokstaver ord. Den [...] forteller kompilatoren for å få antall oppdrag fra dataene. På den måten kan du legge til ord i listen uten å bekymre økes telling. Strengen forteller kompilatoren at hver oppføring i rekken er en streng.

Jeg bruker for..range looper å sekvensere over arrays. Den første som går over hvert ord gitt i input, mens to andre sløyfer gå gjennom hver ordbok over ord for hvert ord. Den konverterer første ordet til små bokstaver, sammenligner det til hvert ord i den nedre ordbok. Hvis det er en kamp, ​​tvinger det ordet til alle små bokstaver ved å tilordne det ordet posisjon til strengen i ordlisten. Det gjør da akkurat det samme med øvre ordbok.

Hvis ordet ikke var i enten ordlisten, så det utfører strings.Title funksjonen til ordet. Dette tvinger den første bokstaven til å være store bokstaver og resten små bokstaver.

Til slutt, det første ordet gjort tittel tilfelle uansett hva. Den strings.Join funksjon samler rekken av strenger ved hjelp av et mellomrom. Det returnerer resultatene til den som ringer til funksjonen
////Funksjon:. KillServer ////Beskrivelse: Denne funksjonen vil stoppe serveren .//func killServer () string {os.Exit (0) return " "}

killServer funksjonen gjør akkurat det navnet tilsier: dreper webserveren. Det brytes et kall til os.Exit () -funksjonen i os pakken
////Funksjon:. Hoved ////Beskrivelse: Dette er den viktigste funksjonen som er tilkalt programmet kjører .//func main ( ) {////sette titlecase webadressen til riktig funksjon. //Web.Get ("/titlecase /(.*)", titleCase) ////Sett opp en sti for å drepe serveren. //Web.Get ("/kill", killServer) ////sende hjemmesiden til riktig funksjon. //Web.Get ("/", hjemmeside) ////Kjør server på den lokale maskinen på port 9911 //web.Run ("127.0.0.1:9910")}

Den viktigste funksjonen bruker nettet. Få å sette opp Hent protokoll ruter for hjemmesiden, kill side, og tittelen saken Kalkulator rutine. Nettet er web.go pakke som vi lastet ned tidligere. Get definerer en HTML Get forespørsel. Det er også Put, Post, og Slett operatører som du kan definere.

web.Run uttalelse starter webserveren på den gitte adressen og porten. Den web.go pakken overtar derfra og kaller dine rutiner når adressene definerte bli forespurt.

Kompilere

Nå som programmet er gjort, må du kompilere den. Å lage en
program, forteller du den til å bygge filen med den viktigste funksjonen. For å kompilere dette programmet, skriver du:
gå bygge goTitleServer.go

Når den er ferdig, vil du ha goTitleServer i katalogen. Det er hele programmet. Du kan starte den med:
./goTitleServer

Then åpne en nettleser for å http://127.0.0.1:9910
. Du bør se denne:
goTitleServer Running

Skriv inn strengen i Tekst å fikse: tekstboksen, trykker Convert, og den konverterte teksten vises i resultatene. Tekstboks

tittel tilfelle Server arbeidsflyt

jeg naturligvis sette dette programmet i en Alfred arbeidsflyt. Det er en del av nedlastingen sammen med goTitleServer.go filen. Dette gir et eksempel på bruk serveren uten en nettleser. Den bruker følgende bash-kode for å spørre serveren:
query = `echo" {query} "| sed -e 's //+ /g'`; curl "http: //localhost: 9910 /titlecase /text = $ query";

Den første linjen endrer alle mellomrom i søkestrengen til +. Curl kommandoen er en standard unix kommando for å få informasjon fra en webserver. Kommandolinjen vil bruke curl kommandoen en url forespørsel som web side ville skape for å sende til den. . Hva er returnert i resultatene fra konvertering strengen på tittelen tilfelle

Alfred spør kommandoene for denne arbeidsflyten er:

tis: lansering-Denne kommandoen lanserer serveren. Du har til lansert serveren før du kan konvertere

TCS. Konvertere-Denne kommandoen tar en streng å konvertere. Arbeidsflyten viser resultatet i en melding, og kopierer den til utklippstavlen

TCS. Kill-Denne kommandoen dreper webserveren

Det er også en hurtigtast som du må tilordne å ta. gjeldende valg og kjøre det gjennom tittelen saken server og lim den tilbake på plass.

Konklusjon

Nå som du har systemet konfigurert til å skrive og kompilere webapplikasjoner ved hjelp av Go, må du starte skrive noen! Ta denne kodebasen og utvide det til flere tekstbehandling funksjoner for å gjøre en stor tekstbehandling server. Anmeldelser