(Translated by https://www.hiragana.jp/)
Go (プログラミング言語) - Wikipedia コンテンツにスキップ

Go (プログラミング言語げんご)

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Go
Go
Goのロゴ
パラダイム 構造こうぞうプログラミング手続てつづがたプログラミング命令めいれいがたプログラミング並行へいこう計算けいさんオブジェクト指向しこうプログラミング関数かんすうがたプログラミング ウィキデータを編集
登場とうじょう時期じき 2009ねん11がつ10日とおか (14ねんまえ) (2009-11-10)
設計せっけいしゃ Robert Griesemer、ロブ・パイクケン・トンプソン
開発かいはつしゃ Google
最新さいしんリリース 1.22.4[1] ウィキデータを編集/ 2024ねん6がつ4にち (33にちまえ)
型付かたつ つよ静的せいてきかた推論すいろん構造こうぞうてき英語えいごばん[2][3]
おも処理しょりけい gc、gccgo
影響えいきょうけた言語げんご C言語げんご、Oberon-2、Limbo、Active Oberon、Communicating Sequential ProcessesPascalOberon-2Smalltalk、Newsqueak、Modula-2、Alef、APLBCPL、Modula、Occam ウィキデータを編集
影響えいきょうあたえた言語げんご Crystal
プラットフォーム DragonFly BSDFreeBSDLinuxmacOSNetBSDOpenBSDPlan 9 from Bell LabsSolarisMicrosoft WindowsiOSAndroidAIXillumos ウィキデータを編集
ライセンス BSDライセンス ウィキデータを編集
ウェブサイト
拡張子かくちょうし go ウィキデータを編集
テンプレートを表示ひょうじ

Goプログラミング言語げんごの1つである。Googleにおいて2009ねん[4]ロバート・グリースマロブ・パイクケン・トンプソンによって設計せっけいされた[5]。Goは、静的せいてき型付かたつC言語げんご伝統でんとうのっとったコンパイル言語げんごメモリ安全あんぜんせいガベージコレクション構造こうぞうてき型付かたつ英語えいごばんCSPスタイルの並行へいこうせいなどの特徴とくちょう[6]。Goのコンパイラ、ツール、およびソースコードは、すべてフリーかつオープンソースである[7]

また、軽量けいりょうスレッディングのための機能きのうPythonのような動的どうてき型付かたつ言語げんごのようなプログラミングの容易よういせい、などの特徴とくちょうもある。Go処理しょりけいとしてはコンパイラのみが開発かいはつされている。マスコット・キャラクターはGopher(ホリネズミ)。

発表はっぴょう当初とうしょLinuxMac OS Xのみしかサポートしていなかったが[8]、2012ねん3がつにリリースされたバージョン1.0からはWindowsもサポートされている[9]。2014ねん12月にリリースされたバージョン1.4からAndroidをサポートし[10]、2015ねん8がつ19にちにリリースされたバージョン1.5からiOSをサポートしている[11]。また、2011ねん5がつ10日とおか公開こうかいされた Google App Engine 1.5.0でも、Go言語げんごがサポートされている[12]。2018ねん8がつにリリースされたバージョン1.11からWebAssemblyをサポートした[13]

名称めいしょう[編集へんしゅう]

しばしばGolangGo言語げんご表記ひょうきされることがあるが、言語げんご正式せいしき名称めいしょうGoである[14]。golangという通称つうしょうは、公式こうしきサイトのドメインであるgolang.org由来ゆらいするものである。このドメインになったのはgo.org取得しゅとくできなかったからであるとされている[14]

また、公式こうしきのロゴではすべて大文字おおもじGOえがかれているが、言語げんご名前なまえとしてはGoであるとされている[14]

歴史れきし[編集へんしゅう]

GoのマスコットGopher
現在げんざいのマスコットGopher。以前いぜんはGoのロゴとして使用しようされていた。

2009ねん11月10にちにGoがはじめて発表はっぴょうされ[15]、バージョン1.0が2012ねん3がつ28にちにリリースされた[16]。GoはGoogleの本番ほんばんシステムの一部いちぶ使用しようされており、多数たすう企業きぎょうやオープンソースプロジェクトでも使用しようされている[17]

おもつぎの2つの実装じっそう存在そんざいする。

  • GoogleのGoツールチェイン。複数ふくすうのプラットフォームをサポートとしており、LinuxBSDmacOSPlan 9Windows、そして(2015ねんから)モバイルデバイスで動作どうさする[18]。このGoコンパイラは、バージョン1.5からセルフホスティングされるようになった[19]
  • 2つのコンパイラgccgo。これは、GCCのフロントエンドである[20]

Goの起源きげんはGoogleのエンジニアであるRobert Griesemer、ロブ・パイクケン・トンプソンによる、あたらしいプログラミング言語げんご設計せっけいする実験じっけんてきなプロジェクトにはしはっする。Googleなど、おおくのIT企業きぎょうではソースコードの複雑ふくざつさや肥大ひだい問題もんだいになっていた。言語げんごがよくける批判ひはん解決かいけつするとともに、それらの言語げんごのよい特徴とくちょうをできるかぎそこなわないようにすることを目指めざした。かれ設計せっけいしゃたちは、あたらしい言語げんごとして、以下いか特徴とくちょうつものを構想こうそうしていた[21]

のインタビューで、3にん言語げんご設計せっけいしゃすべてが、あたらしい言語げんご設計せっけいするおもなモチベーションとしてC++がきでないこと英語えいごばん共有きょうゆうしていたことをべている[23]

バージョン1.6から、64ビットMIPSじょう動作どうさするLinuxばんおよび32ビットx86じょう動作どうさするAndroidばん実験じっけんてきなポート(移植いしょく)が追加ついかされた[24][25]

2017ねん7がつ13にち、バージョン2へのみへの開始かいし発表はっぴょうされた[26]。バージョン1.xけいとバージョン2の開発かいはつ並行へいこうしておこなわれ、バージョン1.20がバージョン2と同義どうぎとなると宣言せんげんされている。

2018ねん4がつきゅうロゴ(Gopherマスコット)がテキストと3ほん直線ちょくせんからなるあたらしいデザインのものに変更へんこうされた。しかし、マスコットはそのままわっていない。

2021ねん8がつ16にち、バージョン1.17がリリースされる。64ビットのARMアーキテクチャーようWindowsがサポートされる[27]。バージョン2けいは、Nightly Buildけいであり、公式こうしきにはリリースされていない。これは、プログラム・アーキテクチャーの変更へんこうがユーザーに多大ただい負担ふたんあたえること配慮はいりょしているためである(Rustからの反省はんせい)。

コードれい[編集へんしゅう]

Hello world[編集へんしゅう]

つぎのコードはGoでいたHello worldプログラムである。

package main

import "fmt"

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

並行へいこうせいれい[編集へんしゅう]

つぎのサンプルプログラムは、Goの並行へいこうせい機能きのうをデモンストレーションする非同期ひどうきプログラムの実装じっそうである。2つの"goルーチン"(軽量けいりょうスレッド)をげている。一方いっぽうはユーザーがテキストを入力にゅうりょくするのを待機たいきし、他方たほうはタイムアウトを実現じつげんする。selectぶんが2つのgoルーチンがメインルーチンにメッセージを送信そうしんするのを待機たいきし、最初さいしょ到達とうたつしたメッセージにたいして動作どうさ実行じっこうする(コードれいはDavid Chisnallのほんのコードを一部いちぶ修正しゅうせいしている)[28]:152

package main

import (
    "fmt"
    "time"
)

func readword(ch chan string) {
    fmt.Println("Type a word, then hit Enter.")
    var word string
    fmt.Scanf("%s", &word)
    ch <- word
}

func timeout(t chan bool) {
    time.Sleep(5 * time.Second)
    t <- true
}

func main() {
    t := make(chan bool)
    go timeout(t)

    ch := make(chan string)
    go readword(ch)

    select {
    case word := <-ch:
        fmt.Println("Received", word)
    case <-t:
        fmt.Println("Timeout.")
    }
}

言語げんご機能きのう特徴とくちょう[編集へんしゅう]

文法ぶんぽう[編集へんしゅう]

構文こうぶん様々さまざま言語げんご部分ぶぶんてき類似るいじしている。変数へんすうなどにおけるかた記法きほうLimboからいだものとおもわれる、型名かためいこうおけするもので、PascalAda類似るいじしている。ブロックの区切くぎりになみ括弧かっこ使つか記法きほうC言語げんごおおくと同様どうようである。forぶんifぶんでは、条件じょうけんしきまる括弧かっこくくらず、帰結きけつ部分ぶぶんにはなみ括弧かっこ必須ひっすである。定数ていすう生成せいせいiotaはASP由来ゆらいである。に、並列へいれつ処理しょりについて、CSP参考さんこうとしている[29]チャネルによるスレッドあいだ通信つうしん機能きのう構文こうぶんがある。

構造こうぞうたい[編集へんしゅう]

Goにはユーザー定義ていぎふくごうがた記述きじゅつすることのできる構造こうぞうたい機能きのうがあり、下記かきのように記述きじゅつする。

package main

import "fmt"

// あたらしい構造こうぞう体型たいけい定義ていぎかくフィールドの識別子しきべつしとその型名かためい指定してい
type Person struct {
    name string // 名前なまえ
    age int // 年齢ねんれい
}

// メソッドの定義ていぎ
func (m *Person) PrintName() {
    fmt.Printf("Name = %s\n", m.name)
    //fmt.Printf("Name (%T) = %#v\n", m.name, m.name)
}

func (m *Person) PrintAge() {
    fmt.Printf("Age = %d\n", m.age)
    //fmt.Printf("Age (%T) = %#v\n", m.age, m.age)
}

func main() {
    var person Person
    person.name = "John Smith"
    person.age = 24
    // 以下いかのようにくこともできる。
    //person := Person{ "John Smith", 24 }
    person.PrintName()
    person.PrintAge()
    // 以下いかのように書式しょしき指定していすると、型名かためいとリテラル表現ひょうげん出力しゅつりょくできる。
    fmt.Printf("person (%T) = %#v\n", person, person)
}

上記じょうきれいでは、nameおよびageというフィールドをPerson構造こうぞうたいかた定義ていぎし、さらにその構造こうぞうたい対応たいおうするPrintName()およびPrintAge()というメソッドを定義ていぎしている。GoにはJavaのような言語げんごつクラスやオブジェクトのような概念がいねんいが、実質じっしつてきには構造こうぞうたいはそれらにちか役割やくわり提供ていきょうする。

Goでは、関数かんすう(m *Person)のようなレシーバーの宣言せんげん追加ついかしてメソッドを定義ていぎする。レシーバーの宣言せんげん(変数へんすうめい 型名かためい)記述きじゅつする。レシーバーない変数へんすうめい自由じゆう指定してい可能かのうであり、かたわたし、ポインターわたしの2種類しゅるいから指定していできる。

かたとメソッドがはなされており、かた一切いっさいメソッドに依存いぞんしない。メソッドとかたは、メソッドの追加ついか対象たいしょうとなる型名かためいをレシーバーの型名かためい指定していすることで関連付かんれんづけるようになっている。メソッドはかたからはなされているためかた本体ほんたい変更へんこうすることなくメソッドを追加ついかすることが可能かのうであり、どういちパッケージない限定げんていではあるが、開放かいほうされたかた実現じつげんしている。

Goにはかた自身じしん初期しょきしたり終了しゅうりょうしたりする機能きのう存在そんざいしない。つまりJavaの静的せいてきイニシャライザやC#の静的せいてきコンストラクタに相当そうとうする機能きのうがない。初期しょきかた所属しょぞくしない関数かんすうや、かたのメソッドでおこなうようになっている。

あたらしいかた定義ていぎ[編集へんしゅう]

Goではtype構文こうぶん利用りようして既存きそんかたからあたらしいかた定義ていぎできる。

つぎれいでは、intかたもとMathInt というあたらしいかた定義ていぎしている。

type MathInt int

これはC/C++におけるtypedefやC#におけるusingエイリアスディレクティブとちがい、たん既存きそんかた別名べつめいあたえているのではなく、もとintかたべつかた定義ていぎしているてんおおきくことなる。

あたらしく定義ていぎしたかたであれば、もとかた構造こうぞう体型たいけいでなくともメソッドを追加ついかすることができる。たとえばintかたやマップがたといった事前じぜん定義ていぎがた (がた) にたいしてもメソッドを追加ついかすることが可能かのうである。

事前じぜん定義ていぎがたからあたらしいかた定義ていぎした場合ばあいたとえば下記かきのような記述きじゅつ可能かのうとなる。

package main

import (
    "fmt"
    "math"
)

type MathInt int

func (x MathInt) Abs() float64 {
    return math.Abs(float64(x))
}

func main() {
	var x MathInt = -10
	fmt.Printf("%d\n", x) // -> -10
	fmt.Printf("%f\n", x.Abs()) // -> 10.000000
	fmt.Printf("%T\n", x) // -> main.MathInt
}

Go 1.9ではtypeキーワードを利用りようしたかたエイリアス (type alias) 構文こうぶん別途べっと追加ついかされた[30]。こちらはC/C++のtypedefやC#のusingエイリアスディレクティブと類似るいじ機能きのうである。

package main

import (
    "fmt"
    "math"
)

type MyInt = int

func main() {
    var x MyInt = -10
	fmt.Printf("%d\n", x) // -> -10
    fmt.Printf("%f\n", math.Abs(float64(x))) // -> 10.000000
	fmt.Printf("%T\n", x) // -> int
}

匿名とくめいフィールド[編集へんしゅう]

Goには継承けいしょう意図いとてき実装じっそうされていない。しかし匿名とくめいフィールドという機能きのうもちいることで、ある構造こうぞうたいおなじフィールド、メソッドを構造こうぞうたい容易ようい作成さくせいすることができる。

type Base int

func (_ *Base) Function() {
}

type Derived struct {
  Base
}

// れい
var derived Derived
derived.Function()

このようにしてつくられた構造こうぞうたいから匿名とくめいフィールドでもちいられたもととなる構造こうぞうたいかた暗黙あんもくてきにキャストするような機能きのう存在そんざいしていない。

interface[編集へんしゅう]

GoにはC++や言語げんごにおける仮想かそう関数かんすうったクラスが存在そんざいしない。かた追加ついかしたメソッドは一種いっしゅ仮想かそう関数かんすうである。Goにおいてのたいはinterfaceがた使用しようして実現じつげんする。

interfaceがた実装じっそう一切いっさいたずメソッドの形式けいしきだけを定義ていぎしたかたであり、そのてんはC#など最近さいきん言語げんごのinterfaceとおなじである。ただし、Goのinterfaceがたは、代入だいにゅうできるかたとの関連かんれんけが不要ふようである。interfaceに定義ていぎしているメソッドをすべっていればどんなオブジェクトでも代入だいにゅう可能かのうである。

Goにおけるinterfaceのれい下記かきしめす。

type Container interface {
	Begin() Iterator
	End() Iterator
}

Goのinterfaceは、MLのsignatureや、かつてg++に存在そんざいしたsignatureというC++拡張かくちょうまったおな機能きのうである。

defer[編集へんしゅう]

Goではdeferぶんという例外れいがい安全あんぜん強制きょうせい実行じっこうのしくみを採用さいようしている。

deferぶんは、deferキーワードにつづけて、関数かんすうしまたはメソッドしを記述きじゅつすることで関数かんすう終了しゅうりょう[注釈ちゅうしゃく 1]指定していした処理しょりしを実行じっこうする。

ファイルのオープンとクローズなど、くみになる作業さぎょう両方りょうほうおこなわれる必要ひつようがあるものにおお使つかわれる。

defer下記かきよう記述きじゅつする。

defer 関数かんすうしまたはメソッド

deferはブロックをたずふかくなるようなことはない。ただし、関数かんすう以外いがいのブロックを無視むしするてん注意ちゅうい必要ひつようである。たとえばループちゅうdefer使用しようした場合ばあい、ループないでは指定していした関数かんすうばれず関数かんすう終了しゅうりょうdefer指定していしたすべての関数かんすうしがおこなわれる。

deferには、関数かんすうしまたはメソッドししか記述きじゅつできず[注釈ちゅうしゃく 2]しきぶん直接ちょくせつ記述きじゅつすることはできないが、下記かきのように無名むめい関数かんすう即時そくじ実行じっこう利用りようして、任意にんいしきぶん実行じっこう可能かのうである。

defer func() {
	message := "done"
	fmt.Println(message)
}()

例外れいがい処理しょり[編集へんしゅう]

言語げんご使つかわれている方式ほうしき例外れいがい処理しょり機能きのうはない。Goにも例外れいがいがあり、リカバーとわせてtry-catchのようなこともできるが推奨すいしょうされない。例外れいがい機能きのうは、おもに0除算じょざんなどきてはならないことに使つかわれ普通ふつう強制きょうせい終了しゅうりょうするが、リカバーによって強制きょうせい終了しゅうりょうしないようにすること可能かのうである。Goでは、事前じぜん例外れいがいきないよう確認かくにんすることや、成功せいこうかどうかのBoolかえことのような、例外れいがいこさない方法ほうほうこのまれる。

ダウンキャスト[編集へんしゅう]

Goはインターフェースがたから、基底きていがた(インターフェースがた変換へんかんされるまえかた)を動的どうてき安全あんぜんるダウンキャストの仕組しくみとして「かたアサーション」とばれる機能きのうそなえている。

// Value のかえしはどんなかたでもかまわない
var i interface{} = Value()

/*
    i の基底きていがたを string と仮定かていし、
    実際じっさいにそうであれば s には変換へんかん結果けっかが、 ok には true がセットされ、
    そうでなければ s にはstringがた初期しょき(ゼロ)が、 ok には false がセットされる。

    以下いかように2つかえし無視むしすると、i の基底きていがたが string でなければ暗黙あんもくてきにランタイムパニックとなる
    s := i.(string)
*/
if s, ok := i.(string); ok {
    fmt.Println ("文字もじれつ: ", s)

} else {
    var kind string

    // かたswitch
    switch i.(type) {
    case int:
        kind = "数値すうち"
    default:
        kind = "その"
    }

    fmt.Printf ("%s: %v\n", kind, i)
}

標準ひょうじゅんパッケージのreflectを使つかうことで[31]対象たいしょうがたやそのなどの詳細しょうさいることができる。

名前なまえとモジュールの管理かんり[編集へんしゅう]

Goには名前なまえとモジュールを管理かんりするために、パッケージという仕組しくみをっている。

基本きほんてきなパッケージの使用しようれい下記かきしめす。

package main			// 現在げんざいのソースファイルが所属しょぞくするパッケージめい指定してい
				// ほん記事きじれいでは省略しょうりゃくされていることおおいが本来ほんらい必須ひっすである
 
import _ "./sub/a"		// (1)ソースファイルちゅうから名前なまえ使用しようされないパッケージの
import . "./sub/b"		// (2)パッケージめい省略しょうりゃくして、パッケージない名前なまえ現在げんざいのソースファイルにすべ
import alias_c "./sub/c"	// (3)パッケージめい別名べつめいけてパッケージめい現在げんざいのソースファイルに
import "./sub/d"		// (4)パッケージめい末端まったんのパッケージめいおな名前なまえけて現在げんざいのソースファイルに

func main() {
	Function()		// (2)のパッケージに所属しょぞくするFunctionの
	alias_c.Function()	// (3)のパッケージに所属しょぞくするFunctionの
	d.Function()		// (4)のパッケージに所属しょぞくするFunctionの
}

Goには多彩たさいimportぶん存在そんざいするが、その構成こうせい要素ようそは、別名べつめい指定していGoのソースを格納かくのうしたフォルダーの指定してい(またはパッケージバイナリー)という非常ひじょう単純たんじゅんなものである。Goでは名前なまえ管理かんりとモジュールの指定していひとつの構文こうぶんにまとめることで、言語げんごではわずらわしいモジュールの結合けつごう簡潔かんけつなものとしている。

Go名前なまえ管理かんり特筆とくひつするてんとして名前なまえ解決かいけつ方法ほうほうとして階層かいそうがた名前なまえ空間くうかんではなく別名べつめい仕組しくみ(のみ)を採用さいようしているてんげられる。名前なまえ解決かいけつをするためになが名前なまえ[注釈ちゅうしゃく 3]記述きじゅつするわずらわしさはない。

さらGoにはモジュール管理かんりてんでも特筆とくひつすべきてんがある。Goはソースファイルちゅうひと初期しょき関数かんすうinit)を定義ていぎすることで、初期しょき関数かんすうにより実行じっこう広域こういき変数へんすう初期しょきできるという機能きのうっている。この初期しょき関数かんすうばれるソースファイルは、main関数かんすう定義ていぎされたソースファイルから連鎖れんさてきimportされたパッケージにふくまれるソースファイルだけである。この特性とくせいにより使つか予定よていもないのに初期しょきコードが実行じっこうされるおそれはない。また、パッケージがはじめて参照さんしょうされるまで初期しょき遅延ちえんされてしまうということもない。

アクセス指定してい[編集へんしゅう]

Go には、かたレベルのアクセス指定してい存在そんざいしないが、パッケージレベルでのアクセス制御せいぎょ存在そんざいする。パッケージレベルでのアクセス制限せいげんはシンボルめい変数へんすうめい、メソッドめい関数かんすうなど)の先頭せんとういち文字もじ大文字おおもじ小文字こもじかで決定けっていする。大文字おおもじであればパッケージにたい公開こうかいされ、小文字こもじであれば非公開ひこうかいとなる。

提供ていきょうしない機能きのう[編集へんしゅう]

かた継承けいしょうアサーションオーバーロードといった機能きのうをあえて提供ていきょうしていない。[29]FAQにおいてオーバーロードは効率こうりつてき見地けんちから排除はいじょされたことがべられている。関数かんすう多値たちかえすことができるので、それによりエラーの報告ほうこく容易よういである、としている。

処理しょりけい[編集へんしゅう]

Go言語げんご処理しょりけいは2種類しゅるいある[32]

gcはGo言語げんご実装じっそうされたセルフホスティングのGo言語げんごコンパイラである。バージョン1.4以前いぜんはC言語げんご実装じっそうされていたが、バージョン1.5でC言語げんごからGo言語げんごへの変換へんかんツールでコンパイラの実装じっそう言語げんごえて、以降いこうはGo言語げんご開発かいはつしている。構文こうぶん解析かいせきyaccbison使用しようしている。

Gccgoは、再帰さいき下降かこうパーサをつC++フロントエンド、バックエンドに標準ひょうじゅんGCC利用りようしたサードパーティー開発かいはつのGo言語げんごコンパイラである。

脚注きゃくちゅう[編集へんしゅう]

注釈ちゅうしゃく[編集へんしゅう]

  1. ^ それがパニックによる中断ちゅうだんであったとしても。
  2. ^ 関数かんすうすこともできない。
  3. ^ 完全かんぜん修飾しゅうしょくめい

出典しゅってん[編集へんしゅう]

  1. ^ Release History”. Template:Cite webしエラー:引数ひきすう accessdate必須ひっすです。
  2. ^ Why doesn't Go have "implements" declarations?”. go.dev. 2015ねん10がつ1にち閲覧えつらん
  3. ^ Pike, Rob (2014ねん12月22にち). “Rob Pike on Twitter”. 2016ねん3がつ13にち閲覧えつらん。 “Go has structural typing, not duck typing. Full interface satisfaction is checked and required.”
  4. ^ Kincaid, Jason (2009ねん11月10にち). “Google’s Go: A New Programming Language That’s Python Meets C++”. TechCrunch. https://techcrunch.com/2009/11/10/google-go-language/ 2010ねん1がつ18にち閲覧えつらん 
  5. ^ Language Design FAQ”. go.dev (2010ねん1がつ16にち). 2010ねん2がつ27にち閲覧えつらん
  6. ^ Metz, Cade (2011ねん5がつ5にち). “Google Go boldly goes where no code has gone before”. The Register. 2018ねん7がつ24にち閲覧えつらん
  7. ^ go.dev
  8. ^ go installation guide
  9. ^ Go version 1 is released” (2012ねん3がつ28にち). 2012ねん3がつ29にち閲覧えつらん
  10. ^ プログラミング言語げんご「Go 1.4」がリリース、Androidを正式せいしきにサポート” (2014ねん12月12にち). 2015ねん8がつ26にち閲覧えつらん
  11. ^ Go 1.5 is released” (2015ねん8がつ19にち). 2015ねん8がつ26にち閲覧えつらん
  12. ^ Google App Engine Blog, Tuesday, May 10, 2011
  13. ^ Go 1.11 is released”. The Go Blog (2018ねん8がつ24にち). 2018ねん10がつ4にち閲覧えつらん
  14. ^ a b c Frequently Asked Questions (FAQ) - The Go Programming Language
  15. ^ Hey! Ho! Let's Go!”. Google Open Source. Google. 2018ねん5がつ17にち閲覧えつらん
  16. ^ Gerrand. “Go version 1 is released - The Go Blog”. 2018ねん2がつ4にち閲覧えつらん Shankland, Stephen (2012ねん3がつ30にち). “Google's Go language turns one, wins a spot at YouTube: The lower-level programming language has matured enough to sport the 1.0 version number. And it's being used for real work at Google.”. CBS Interactive Inc (2012-03-30発行はっこう). https://www.cnet.com/news/googles-go-language-turns-one-wins-a-spot-at-youtube/ 2017ねん8がつ6にち閲覧えつらん. "Google has released version 1 of its Go programming language, an ambitious attempt to improve upon giants of the lower-level programming world such as C and C++."  Release History”. 2018ねん7がつ24にち閲覧えつらん
  17. ^ “Go FAQ: Is Google using Go internally?”. https://go.dev/doc/faq#Is_Google_using_go_internally 2013ねん3がつ9にち閲覧えつらん 
  18. ^ Google's In-House Programming Language Now Runs on Phones”. wired.com (2015ねん8がつ19にち). 2018ねん7がつ24にち閲覧えつらん
  19. ^ Go 1.5 Release Notes”. 2016ねん1がつ28にち閲覧えつらん。 “The compiler and runtime are now implemented in Go and assembler, without C.” Go 1.5が登場とうじょう、AndroidにつづいてiOSアプリも開発かいはつ可能かのう。ガベージコレクションも大幅おおはば改善かいぜん” (2015ねん8がつ24にち). 2015ねん8がつ26にち閲覧えつらん
  20. ^ FAQ: Implementation”. go.dev (2010ねん1がつ16にち). 2010ねん1がつ18にち閲覧えつらん Installing GCC: Configuration”. 2011ねん12月3にち閲覧えつらん。 “Ada, Go and Objective-C++ are not default languages”
  21. ^ Pike, Rob (2010ねん4がつ28にち). “Another Go at Language Design”. Stanford EE Computer Systems Colloquium. Stanford University. 2018ねん7がつ24にち閲覧えつらん Video available.
  22. ^ Frequently Asked Questions (FAQ) - The Go Programming Language”. go.dev. 2016ねん2がつ26にち閲覧えつらん
  23. ^ Andrew Binstock (2011ねん5がつ18にち). “Dr. Dobb's: Interview with Ken Thompson”. 2014ねん2がつ7にち閲覧えつらん Pike, Rob (2012ねん). “Less is exponentially more”. 2018ねん7がつ24にち閲覧えつらん Robert Griesemer (2015ねん). “The Evolution of Go”. 2018ねん7がつ24にち閲覧えつらん
  24. ^ Go 1.6 Release Notes - The Go Programming Language
  25. ^ 末岡すえおか洋子ようこ (2016ねん2がつ19にち). “「Go 1.6」リリース、こまかな性能せいのう改善かいぜんなどがメインのリリースに”. 2016ねん2がつ20日はつか閲覧えつらん
  26. ^ Cox, Russ. “Toward Go 2 - The Go Blog”. 2018ねん2がつ4にち閲覧えつらん
  27. ^ Go 1.17 is released - go.dev”. go.dev. 2021ねん9がつ19にち閲覧えつらん
  28. ^ Chisnall, David (2012). The Go Programming Language Phrasebook. Addison-Wesley. https://books.google.com/books?id=scyH562VXZUC 
  29. ^ a b https://go.dev/doc/faq
  30. ^ Go 1.9 Release Notes - The Go Programming Language
  31. ^ reflect - The Go Programming Language
  32. ^ §Implementation | Frequently Asked Questions (FAQ) - The Go Programming Language

関連かんれん項目こうもく[編集へんしゅう]

解説かいせつ書籍しょせきなど[編集へんしゅう]

  • 松木まつき雅幸まさゆき、mattn、藤原ふじわら俊一郎しゅんいちろう中島なかじまだいいち上田うえだ拓也たくやまき大輔だいすけ鈴木すずき健太けんた:「改訂かいてい2はん みんなのGo言語げんご」、技術評論社ぎじゅつひょうろんしゃISBN 978-4-297-10727-7(2019ねん8がつ1にち)。
  • Alan A.A.Donovan, Brian W.Kernighan ちょ柴田しばた芳樹よしき 翻訳ほんやく:「プログラミング言語げんごGo」、丸善まるぜん出版しゅっぱんISBN 978-4-621-30025-1(2016ねん6がつ20日はつか)。

Goのtourを直接ちょくせつダウンロードして、オフラインで学習がくしゅうすることも可能かのうである。方法ほうほうとしては、まずオフィシャルサイトから最新さいしんばんのgo-langをダウンロードしてインストールしたのちgo install golang.org/x/website/tour@latest実行じっこうすることで必要ひつよう最小限さいしょうげんのファイルがダウンロードされる。その、tourを実行じっこうすることで、オフラインでGoの文法ぶんぽうまなぶことができる。

外部がいぶリンク[編集へんしゅう]