削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
* /文
タグ: 2017年版ソースエディター
1 行
:{{Pathnav|メインページ|工学|情報技術|プログラミング}}
{{Wikipedia}}
:{{Pathnav|メインページ|工学|情報技術|プログラミング}}
{{Wikiversity|Topic:Go|Go}}
 
----
Go言語は、グーグルGoogleの開発したプログラム言語のひとつです。
主にGo言語はサーバ用途で用いられます。Go言語はオープンソース化されており、フリーです。
 
Goは、システムプログラミングを念頭に置いて設計された汎用言語です<ref name="Introduction">{{cite book
なお検索の都合などで「golang」などと表記される場合もありますが、このプログラム言語の正式名称は「Go」です。本書では説明の都合上、「Go言語」などとも呼ぶことにします(日本のIT業界でも一般的に受け入れられてい呼び方です)。
| url = https://golang.org/ref/spec#Introduction
| title = The Go Programming Language Specification
| chapter = Introduction¶
| date = Jul 26, 2021
| publisher = The Go website
}}</ref>。
強く型付けされ、ガベージコレクションされており、コンカレントプログラミングを明示的にサポートしています。
プログラムはパッケージから構築され、その特性により依存関係を効率的に管理することができます。
文法はコンパクトで解析が簡単なため、統合開発環境などの自動ツールで簡単に解析することができます。
 
尚、公式サイトのドメイン名 golang.org から '''''golang''''' と表記される場合もありますが、このプログラム言語の正式名称は '''''Go''''' です。
 
__TOC__
 
== 目次 ==
{{Wikiversity|Topic:Go|Go}}
;入門
* [[Go/環境構築と主な用途]]
31 ⟶ 43行目:
* [[/ブロック・宣言とスコープ]]
* [[/式]]
* [[/文]]
* [[/キーワードと宣言済み識別子]]
;その他
37 ⟶ 50行目:
* [[Go/ファイル入出力|ファイル入出力]]
 
== ※ 以下、未分類脚註 ==
<references />
※ 下記の記述は、もし、ある程度の量の記述がまとまったら、それからサブページを作成して、そのサブページに記述を移動してください。
 
編集の手順としては、さきに記述がある程度の完成をしてから、あとからサブページを作成することを、オススメします。
 
 
=== 文字入力の方法 ===
キーボードから文字列の入力を受け付ける方法は、Go言語では、C言語風の方法と、Java風の方法との、少なくとも2種類の方法が用意されている。
 
==== ノンバッファリングI/O ====
 
;コード例
<syntaxhighlight lang="go">
package main
 
import (
"fmt"
)
 
func main() {
fmt.Println("文字列をなにか入力してください")
var str string
fmt.Scan(&str)
 
fmt.Printf("あなたは %s と入力しました。",str )
 
}
</syntaxhighlight>
 
 
;実行例
<pre>
文字列をなにか入力してください
ghf
あなたは ghf と入力しました。
</pre>
 
 
;解説
C言語のscanf()関数が、ほぼ似た仕組みである。(というか、おそらく、GoのScanの元ネタがscanfであろう。
:(※ C言語のscanf()について詳しくは [[C言語/基礎知識#scanf関数]]を参照せよ)
 
==== バッファリングされたI/O ====
bufioパッケージは、バッファリングされたI/Oの実装です。io.Reader または io.Writer オブジェクトをラップして<ref>Goでは慣習として、統一的にインターフェースを提供する関数の末尾は -er で終わります。</ref>、同じくインターフェイスを実装した別のオブジェクト (Reader または Writer) を作成しますが、バッファリングとテキスト I/O のためのいくつかの支援が提供されます。
;コード例
<syntaxhighlight lang="go">
package main
 
import (
"bufio"
"fmt"
"os"
)
 
func main() {
fmt.Println("文字列をなにか入力してください")
 
scanner := bufio.NewScanner(os.Stdin)
if scanner.Scan() {
fmt.Printf("あなたは %s と入力しました。\n", scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "標準入力からの読み込み:", err)
}
}
</syntaxhighlight>
 
;実行例
<pre>
文字列をなにか入力してください
ghf
あなたは ghf と入力しました。
</pre>
 
;解説
scanner 以外のbufio や NewScanner なども、すべて予約語ではなく、それぞれパッケージと関数である<ref>そもそもGoには、予約語(Resurved words)はなくキーワード(''Keywords''; 例えば '''type''')と事前宣言された識別子(''Predeclared identifiers''; 例えば '''int''')がある。</ref>。
 
上記コードは、なにをしているかと言うと、おおむね
:キーボード入力のできるオブジェクトを呼び出してメモリ領域などを確保し、 (※ buffer := bufio.NewScanner(os.Stdin) あたり)
:そのオブジェクトをキーボード入力受け付けのモードに設定している、 (※ buffer.Scan() あたり)
のような流れである。
 
ちなみにJava の場合、コンソール入力の方法は、
;Java の例:<source lang=java>
Scanner scanner = new Scanner(System.in);
String inputLine = scanner.nextLine();
</source>
のようにscanner 型を使ってオブジェクトを用意して、メモリ確保のためにオブジェクトを宣言し(上記コードの Scanner scanner の部分 )、さらにそのオブジェクトをレシーバーに nextLine メソッドを適用するという仕組みである。
 
== 参考文献 ==