Börja utveckla med Go på Mac

Vad du ska skapa

Webapplikationer är en del av livet dessa dagar. De språk, av Google, är ett användbart språk för att göra webbaserade applikationer. Jag ska visa dig hur du ska börja använda Go på en Mac.

Ställa in Go-miljön

Det enklaste sättet att installera programmeringsspråk är av homebrew. Om du inte har installerat homebrew men handledningen Homebrew Demystified: OS X: s Ultimate Package Manager kommer att visa dig hur.

I en terminal skriver du:

brygga installationen gå 
Hitta vägen Installera

För att hitta platsen för installera katalog, skriv det här kommandot i ditt terminalprogram:

ls -la "som går" 

Du borde få detta resultat:

lrwxr-xr-x 1 raguayhjul 25 maj 14 15:11 / usr / local / bin / go -> ... /Cellar/go/1.2.2/bin/go 

Detta visar att huvudinstallationen av är /usr/local/Cellar/go/1.2.2. Du måste konfigurera miljövariabeln GOROOT att vara libexec katalog över den katalogen.

Skapa katalogen i hemkatalogen . De Språket lagrar alla nedladdade paket där. Lägg till i din .bashrc fil och / eller .zshrc fil den här raden:

exportera GOPATH = "/ Användare // gå "export GOROOT =" // Libexec" 

Om du använder fisk, lägg till det här till din config.fish fil:

set -xg GOPATH "/ Användare // gå "set -xg GOROOT" // Libexec" 

För att testa, skriv följande i en terminal:

gå version 

Det ska skriva ut versionen av , som är installerat. På mitt system just nu visar det gå version go1.2.2 darwin / amd64.

För att söka efter nya versioner, låt HomeBrew räkna ut det. På kommandoraden skriver du:

brygg uppdatering brygga uppgradering 

De uppdatering Kommandot kommer att få en lista över uppdaterade program. De uppgradering kommando gör den faktiska uppgraderingen. På så sätt behöver du aldrig jaga de olika webbplatserna för att hitta uppdateringar.

Ställa in redigeraren

Nu när är på systemet måste du ställa in redigeraren. jag använder Sublim Text 3, vim, och Emacs mycket. Därför måste jag få mina redaktörer att snabba med .

För Sublim Text, det är lätt. Installera Package Manager för Sublime Text. Detta möjliggör enkla paketinstallationer. Paketet du vill installera är goSublime. goSublime ger dig språk syntax markering och a byggsystem.

Att installera syntax markering för Emacs, installera eLisp rutinerna som finns i $ GOROOT / misc / emacs till din emacs elisp-mapp. För Emacs För att ladda de nya filerna lägger du till den här raden i .emacs filen i hemmappen:

(kräver "go-mode-belastning) 

Stödet till vim tar mer arbete. I en terminal kör dessa våldsamt slag kommandoreder:

mkdir -p $ HOME / .vim / ftdetect mkdir -p $ HOME / .vim / syntax mkdir -p $ HOME / .vim / autoload / go ln -s $ GOROOT / misc / vim / ftdetect / gofiletype.vim $ HEM / .vim / ftdetect / ln -s $ GOROOT / misc / vim / syntax / go.vim $ HEM / .vim / syntax ln -s $ GOROOT / misc / vim / autoload / go / complete.vim $ HEM / .vim / autoload / go echo "-syntax på" >> $ HOME / .vimrc 

Den sista raden behövs bara om du inte redan har syntax på i din .vimrc.

Bibliotek och hur man använder dem

Traditionellt är bibliotek basen för modulär kod för återanvändning. I , bibliotek är paket. Go-språket kommer med många paket inbyggda. Du kan skanna igenom dem på paketsidan. Det finns också många paket och projekt från tredje part.

För Titel Case Server, Jag ska använda tredjepartspaketet web.go. Det är en enkel webbserverram som förenklar skapandet av webbaserade applikationer i . Om du vill ladda det paketet på ditt system skriver du följande:

börja installera github.com/hoisie/web 

De Installera kommandot tar ett argument som är en webbadress, utan http: //, för ett paket att ladda ner. Den är placerad i $ GOPATH-katalogen som skapades tidigare.

Projektet: Title Case Server

Titelfall är en av de mest kräsna sakerna. Vissa människor gillar vissa ord alltid små bokstäver. Andra tycker att ord ska vara alla titelfall. Därför, för att göra det ordentligt (vilket de flesta paketrutiner inte gör) måste du kontrollera varje ord mot två ordböcker för att få allt rätt. Det gör ett bra nybörjareprojekt på ett nytt programmeringsspråk.

// // Paket: Huvud // // Beskrivning: Detta är huvudpaketet för goTitleServer. // Detta är ett enkelt webbteknologibaserat titelfall // textserver. // paketet huvud 

De // symbolen anger en kommentar. Kompilatorn ignorerar allt efter det i linjen. Jag gillar att kommentera allt. När du läser koden år senare hjälper kommentarerna dig att komma ihåg hur programmet fungerar.

Linjen efter kommentarerna är förpackningsdeklarationen. Varje fil som Användningar måste vara en del av ett paket. Varje program har bara en huvud paket som måste ha main () fungera. Det berättar kompilatorn var man ska börja köra programmet.

// // Importera de bibliotek vi behöver för servern. // import ("github.com/hoisie/web" "os" "strängar") 

För att använda paket måste du importera dem. Alla paket som används måste vara i detta uttalande. Jag inkluderar de två baspaketen av os för operativsystemsfunktionerna, och strängar för att manipulera strängar. De github.com/hoisie/web lastar web.go paket för att göra webbservern.

// // Funktion: homePage // // Beskrivning: Den här funktionen kommer att servera startsidan för inmatning av strängen // för att konvertera. // func homePage () sträng return "     Titel Case Server        

Titel Case Server

Text som ska åtgärdas:

Resultat:

'

Den här funktionen skapar hemsidan. Detta är vad servern ger till en webbläsare som begär webbplatsens hemsida. De func kommandot är en funktionsdeklaration. De hemsida är namnet på funktionen. De () berättar kompilatorn att den här funktionen inte tar några ingångar. De sträng Efter parentesen berättar kompilatorn om att funktionen kommer att returnera en sträng.

Allting inne i är koden för funktionen. Denna funktion är enkel: lämna tillbaka den citerade strängen till den som ringer till funktionen. I , du kan citera strängar med "", ", och ". Jag använde den sista här för att ha en multipellinjesträng som inte behandlas alls. Du kallar det en bokstavlig sträng.

Genom att använda den bokstavliga citatmetoden kan jag layouta webbsidan precis som jag normalt skulle. Ingenting inuti kryssmarkeringena behandlas av kompilatorn. Den kopieras direkt till programmet, och programmet returnerar det till webbläsaren på begäran.

// // Funktion: titleCase // // Beskrivning: Detta tar en sträng och konverterar den till Titelfall. Det då // returnerar strängen. // // Inmatning: // val resten av webbläsaren om det anges. // func titleCase (ctx * web.Context, val string) string // // Få strängen att konvertera och dela upp den med mellanslag. // words: = strings.Split (ctx.Params ["text"], "") // // Den uppsättning ord som ska vara små bokstäver alltid, såvida det inte är det första ordet // av titeln. // lägre: = [...] sträng "till", "an", "och", "till", "som", "men", "av", "för", "om", "in" "on", "vs.", "via", "via", "en" / "med", " / // En rad ord som alltid ska vara heltäckande. // övre: = [...] sträng "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X" "HTML", "CSS", "AT & T", "PHP" // // För varje ord i titeln. // för jag, _: = intervallord // // Antag att ordet inte finns i stor- eller mindre bokstäver. // up: = false low: = false // // Gå igenom varje ord i små bokstäver. // för j, _: = intervall lägre om strängar.ToLower (ord [i]) == lägre [j] // // Det matchar. Kontrollera att ordet i arrayen är detsamma. // Ställ upp flaggan som sant. // ord [i] = lägre [j] low = true // // Gå igenom varje ord i storformatuppsättningen. // för k, _: = range upper if strings.ToUpper (ord [i]) == övre [k] // // Det matchar. Kontrollera att ordet är arrayen är densamma. // Ställ in den låga flaggan till sann. // ord [i] = övre [k] up = true // // Om ordet inte fanns i övre eller nedre matrisen, gör sedan en normal // titel-konvertering. Detta gör det första bokstäverna och alla // de andra bokstäverna små bokstäver. // if (! up) && (! low) ord [i] = strings.Title (ord [i]) // // Se till att det första ordet är titelfall! // ord [0] = strings.Title (words [0]) // // Återgå Titel genom att sammanfoga alla ord med ett mellanslag. // return strings.Join (ord, "") 

Den här koden gör det att arbeta med att översätta en sträng som ges till webbservern in i titelfallen motsvarande.

De ctx * web.Context, val string berättar kompilatorn om att denna funktion får två variabler. En är en pekare till web.Context datastruktur definierad i web.go paket. Den andra är en sträng. Du deklarerar en variabel ingång med ett namn och typen av variabel.

De * symbolen anger en pekare. En pekare är en adress till platsen i minnet för datastrukturen. följer C datapekareformat.

Det första uttalandet får namnet parameter text att webbläsaren passerar till servern och delar upp den med mellanslag. De strings.Split kallar Dela funktionen inuti strängar paket. Du kan tänka på paket som liknar objekt i C ++. Du ringer dem med hjälp av a . mellan paketnamnet och funktionsnamnet.

I varje paket är varje funktion som börjar med en bokstav tillgänglig från utsidan av paketet. Varje funktion som börjar med små bokstäver är endast tillgänglig från insidan av paketet.

När strings.Split funktionen delar upp en sträng av separatorn, den returnerar en rad strängar. Utsignalen tilldelas sedan till variabeln ord. För att skapa en ny variabel, måste den första gången den används, använda en : = att tilldela det. Om du vill ändra samma variabel till en annan uppsättning strängar, skulle du använda = operatör.

Skapa sedan två arrayer för de olika ordlistorna. lägre är för alla små bokstavsord, och övre för alla överordnade ord. De [...] berättar för kompilatorn att få antalet uppdrag från data. På så sätt kan du lägga till ord i listan utan att oroa dig för att öka räkningen. De sträng berättar kompilatorn att varje post i arrayen är en sträng.

jag använder för ... sortiment loopar till sekvens över arraysna. Den första går över varje ord som ges i ingången, medan två andra slingor går igenom varje ordord för ord för varje ord. Det konverterar först ordet till små bokstäver, jämför det med varje ord i lägre ordbok. Om det finns en match, tvingar det ordet till allt mindre fall genom att tilldela ordpositionen till strängen i ordlistan. Det gör då exakt samma sak med övre ordbok.

Om ordet var inte i endera ordboken, då utför den strings.Title funktion till ordet. Detta tvingar den första bokstaven att vara stor och resten resten små bokstäver.

Slutligen gjorde det första ordet titelfall oavsett vad. De strings.Join funktionen monterar en rad strängar med ett mellanslag. Den returnerar resultaten till funktionens uppringare.

// // Funktion: killServer // // Beskrivning: Den här funktionen stoppar servern. // func killServer () sträng os.Exit (0) returnera "" 

De killServer funktion gör exakt vad namnet innebär: dödar webbservern. Det ringer ett samtal till os.Exit () funktion i os paket.

// // Funktion: Huvud // // Beskrivning: Det här är huvudfunktionen som kallas programkörning. // func main () // // ställa in titlecase webbadressen till den korrekta funktionen. // web.Get ("/ titlecase /(.*)", titleCase) // // Ställ in en sökväg för att döda servern. // web.Get ("/ kill", killServer) // // skicka hemsidan till den korrekta funktionen. // web.Get ("/", homePage) // // Kör servern på den lokala maskinen i port 9911 // web.Run ("127.0.0.1:9910") 

De huvud funktionsanvändning web.Get att ställa in Skaffa sig protokollvägar för hemsidan, dödsidan och rutin för titellådomvandlare. De webb är web.go paket som vi hämtade tidigare. De Skaffa sig definierar a HTML Get begäran. Det finns också Sätta, Posta, och Radera operatörer som du kan definiera.

De web.Run uttalandet startar webbservern på den angivna adressen och porten. De web.go paketet tar över därifrån och samtalar dina rutiner när de adresser som definieras får begäras.

sammanställa

Nu när programmet är klart måste du sammanställa det. Att sammanställa en programmet berättar du att bygga filen med huvudfunktionen. För att kompilera detta program skriver du:

gå bygg goTitleServer.go 

När det är klart kommer du att ha goTitleServer i katalogen. Det är det fulla programmet. Du kan starta det med:

./ goTitleServer 

Öppna sedan en webbläsare till http://127.0.0.1:9910. Du borde se detta:

goTitleServer Running

Ange din sträng i Text som ska åtgärdas: textrutan, tryck på Konvertera, och den konverterade strängen kommer att visas i Resultat: textruta.

Titel Case Server Workflow

Jag lägger naturligtvis detta program i en Alfred arbetsflöde. Det är en del av nedladdningen tillsammans med goTitleServer.go fil. Detta ger ett exempel på att du använder servern utan en webbläsare. Den använder följande bash-kod för att fråga servern:

query = "echo" query "| sed -e s / / + / g "; curl" http: // localhost: 9910 / titlecase /? text = $ query "; 

Den första raden ändrar alla utrymmen i fråga sträng till +. De ringla Kommandot är ett standard Unix-kommando för att få information från en webbserver. Kommandoraden kommer att använda ringla kommandot en urlförfrågan som webbsidan skulle skapa för att skicka till den. Vad återkommer i resultaten från att konvertera strängen till titelfallet.

De Alfred snabbt Kommandon för detta arbetsflöde är:

tis: lansering-Kommandot startar servern. Du måste starta servern innan du kan konvertera.

TCS: konvertera-Detta kommando tar en sträng som ska konverteras. Arbetsflödet visar resultatet i en anmälan och kopierar det till urklippet.

TCS: döda-Detta kommando dödar webbservern.

Det finns också en hotkey som du måste tilldela för att ta det aktuella urvalet och köra det genom titelsystemservern och klistra in det på nytt.

Slutsats

Nu när du har systemet konfigurerat att skriva och kompilera webbapplikationer med , du måste börja skriva lite! Ta den här kodbasen och expandera den till fler textbehandlingsfunktioner för att skapa en bra textbehandlingsserver.