Go (ohjelmointikieli)

Tämä artikkeli käsittelee ohjelmointikieltä. Sanan muista merkityksistä, katso Go (täsmennyssivu).
Go
Paradigma moniparadigmainen: imperatiivinen, rinnakkainen, strukturoitu
Yleinen suoritusmalli käännettävä
Julkaistu 2009
Suunnitellut Rob Pike, Ken Thompson
Kehittäjä Google
Vaikutteet Alef, BCPL, C, Limbo, Occam, Pascal, Smalltalk[1]
Verkkosivu go.dev
Infobox OK

Go (usein muodossa Golang)[2] on Googlen kehittämä ja marraskuussa 2009 julkistettu ohjelmointikieli.[3] Kieltä ovat olleet kehittämässä muun muassa Rob Pike ja Ken Thompson. Se on julkaistu BSD-lisenssillä.[4] Go-kielen taustalla on Rob Piken ja muiden, pääasiassa Bellin laboratorioista Googlelle siirtyneiden Go-tiimin jäsenten pitkäaikainen tyytymättömyys moderniin kieli- ja käyttöjärjestelmäympäristöön[5].

Tausta

Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä.
Voit auttaa Wikipediaa lisäämällä artikkeliin tarkistettavissa olevia lähteitä ja merkitsemällä ne ohjeen mukaan.

Tarkennus: mielipiteistettyjä väitteitä jotka tarvitsisivat lähteen

Kielen kehittänyttä Pikea olioparadigma Simulasta periytyvine luokkahierarkioineen ei ole koskaan miellyttänyt. Samoin ajatus siitä, että käännettävät ja staattisesti tyypitetyt kielet ovat kankeita ja siksi tarvitaan dynaamista tyypitystä ja skriptikieliä oli Piken mielestä harha.

Lisäksi Pike on aina ollut sitä mieltä, että CSP-malliin perustuva rinnakkaislaskenta on paras, joskaan ei ainoa tapa strukturoida modernia prosessi- ja tietoliikenneympäristöä (ja monia muita asioita) algoritmeiksi. Samalla se mahdollistaa moniprosessori- ja moniydinkoneiden tehokkaan hyödyntämisen.

Go on harkittu ortogonaalisuuteen ja säännöllisyyteen pyrkivä kokonaisuus, jossa jokaisella kielen ja kirjastojen ominaisuudella on perusteet joiden on tarkoitus tukea toisiaan ilman redundantteja tai turhia ominaisuuksia.

Ominaisuudet

Go-ohjelmointikielen maskotti.
Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä.
Voit auttaa Wikipediaa lisäämällä artikkeliin tarkistettavissa olevia lähteitä ja merkitsemällä ne ohjeen mukaan.

Tarkennus: väitteitä jotka tarvitsisivat lähteen

Tämän artikkelin tai sen osan kieliasua on pyydetty parannettavaksi.
Voit auttaa Wikipediaa parantamalla artikkelin kieliasua.
Tarkennus: epämääräisyyksiä, puhekieltä

Go-kielen "isot ominaisuudet" ovat:

  • interface-käsitteeseen ja tyyppien laajentamiseen ("type embedding") perustuva, kevyt ja joustava "olioparadigma", joka osin tulee Robert Griesemerin (ETH:n ja "Wirthin koulukunnan" miehiä) kautta. Tämä on jokseenkin uniikki lähestymistapa "valtavirran" kielissä.
  • nopea kääntäminen, joka tekee ohjelmankehityksestä yhtä joustavaa kuin tulkkiympäristöissä.
  • staattinen, turvallinen tyypitys, jossa kääntäjä kuitenkin usein johtaa tyypit implisiittisesti, eikä käyttäjän tarvitse määritellä niitä
  • CSP-mallin mukainen rinnakkaisuuden hallinta

Lisäksi Go-tiimissä on kerätty Piken, Thompsonin ja Griesemerin ja nuoremman Russ Coxin uran varrelta monta pienempää ideaa, jotka tiimi katsoo hyviksi. Nämä(kin) on nähty jo muissakin kielissä. Esim.

  • Reflektio
  • Anonyymit funktiot, sulkeumat ("closure") ja muita funktionaalisen ohjelmoinnin ideoita
  • Automaattinen roskienkeräys ("garbage collection") käännetyssä kielessä
  • Kevyt "integroitu" käännös-, ajo-, testi-, dokumentaatio ja pakettihallinta yhdellä komennolla "go", joka nojaa osin tiettyihin koodaus- ja dokumentointikonventioihin

Go-kielen sisältämien ominaisuuksien lisäksi lähes yhtä oleellisia ovat asiat, jotka siitä on tietoisesti jätetty pois:

  • poikkeukset (rajoitettu muoto on mukana)
  • standardikirjastot eivät määrittele graafista käyttöliittymää

Tyyppiparametrinen geneerisyys puuttui alussa, tekijöiden mukaan pelkkä interface-käsite oli riittävä. Käyttäjien palautteen vuoksi geneerisyys lisättiin versiossa 1.18.

Go-projektilla on kattava standardikirjasto, joka sisältää esim. välineet moderniin verkko-ohjelmointiin HTTP/HTML/JSON/XML-ympäristössä. Koska standardikirjastot eivät määrittele graafista käyttöliittymää, Go-ohjelmat on usein rakennettu tässä kirjastossa toteutetun Web-palvelimen avulla. Go käyttää yleensä staattista linkitystä, jolloin esim. Web-palvelinpohjaisen Go-sovelluksen voi asentaa käyttöön yhtenä binaaritiedostona ilman ulkoisia riippuvuuksia. CGO-lisäosan avulla voi kuitenkin kutsua erillisiä C-kielisiä kirjastoja.

Hello World

Yksinkertainen esimerkki "hello.go":[6]

package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}

Jokainen go-ohjelma kuuluu johonkin pakettiin (esimerkissä main). Ohjelmaan tuodaan paketti fmt, joka sisältää standarditulostukseen tarvittavan toiminnon. Ohjelman suoritus alkaa main()-funktiosta. Ohjelma käyttää fmt.Println()-metodia rivin esittämiseen.

Ohjelma suoritetaan komentoriviltä:

go run hello.go

.. jossa hello.go on lähdekooditiedoston nimi.

Huomaa, että go-kääntäjä vaatii lohkot aloittavat aaltosulut rivin loppuun, ei omalle rivilleen.

Ohjelmien kääntäminen

Käännetty ohjelma tehdään komennolla go build.[7]

Kääntäjä tukee UTF-8-muotoista lähdekoodia, kuten koko standardiympäristö ja syötteen käsittely. UTF-8 on sallittu tunnusten nimissä.

Lähteet

  1. Pike, Rob: Hello, Gophers! talks.golang.org. Viitattu 20.2.2017.
  2. Is the language called Go or Golang? – Frequently Asked Questions (FAQ) The Go Programming Language. Viitattu 27.12.2021. (englanniksi)
  3. Google-go-language
  4. Go on Googlen uusi ohjelmointikieli MBnet. 12.11.2009. Sanoma Magazines. Viitattu 19.8.2012. [vanhentunut linkki]
  5. http://herpolhode.com/rob/utah2000.pdf
  6. https://golang.org
  7. https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies

Aiheesta muualla

  • Go-ohjelmointikielen kotisivu
  • Hyvä tapa seurata Go-uutisia on tunniste #golang Twitterissä
  • Golang-nuts keskusteluryhmä
  • IRC-kanava #go-nuts, irc.freenode.net
  • The Go Programming Language Redditissä
  • Slack https://gophers.slack.com/
  • n
  • k
  • m
Yleisimmät ohjelmointikielet
Tuotantokäytössä
Akateemiset
Historialliset
  • n
  • k
  • m
Tuotteet
Laitteisto
Kehitys
Ohjelmointikielet
  • Carbon
  • Dart
  • Go
Viihde
Viestintä
Hakukone
Navigointi
Liiketoiminta
ja rahoitus
Organisointi
ja tuottavuus
Koulutus
Muut
Yritys
Osastot
Tapahtumat
  • Android
    • Developer Challenge
    • Developer Day
    • Developer Lab
  • Code-in
  • Code Jam
  • Developer Live
  • Doodle4Google
  • I/O
  • Jigsaw
  • Lunar X Prize
  • Science Fair
  • Summer of Code
  • Talks at Google
  • YouTube
    • Awards
    • Comedy Week
    • Live
    • Music Awards
    • Space Lab
    • Symphony Orchestra
Henkilöstö
  • Luokka
Auktoriteettitunnisteet Muokkaa Wikidatassa
Kansainväliset
  • FAST
Kansalliset
  • Saksa
  • Israel
  • Yhdysvallat