Goで最初のプログラムを作成する方法
序章
「Hello、World!」 プログラムは、コンピュータプログラミングにおける古典的で昔ながらの伝統です。 これは初心者向けのシンプルで完全な最初のプログラムであり、環境が適切に構成されていることを確認するための良い方法です。
このチュートリアルでは、Goでこのプログラムを作成する手順を説明します。 ただし、プログラムをより面白くするために、従来の「Hello、World!」を変更します。 ユーザーに名前を尋ねるようにプログラムします。 次に、挨拶でその名前を使用します。 チュートリアルが終了すると、実行すると次のようなプログラムが作成されます。
OutputPlease enter your name. Sammy Hello, Sammy! I'm Go!
前提条件
このチュートリアルを開始する前に、コンピューターにローカルGo開発環境をセットアップする必要があります。 これは、次のいずれかのチュートリアルに従って設定できます。
- GoをインストールしてmacOSにローカルプログラミング環境をセットアップする方法
- GoをインストールしてUbuntu18.04にローカルプログラミング環境をセットアップする方法
- GoをインストールしてWindows10にローカルプログラミング環境をセットアップする方法
ステップ1—基本的な「Hello、World!」を作成するプログラム
「Hello、World!」を作成するにはプログラムで、nanoなどのコマンドラインテキストエディタを開き、新しいファイルを作成します。
nano hello.go
ターミナルウィンドウにテキストファイルが開いたら、プログラムを入力します。
hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
コードのさまざまなコンポーネントを分解してみましょう。
packageは、このファイルが属するコードバンドルを定義するGoキーワードです。 フォルダごとに存在できるパッケージは1つだけであり、各.goファイルは、ファイルの先頭で同じパッケージ名を宣言する必要があります。 この例では、コードはmainパッケージに属しています。
importはGoキーワードで、このファイルで使用する他のパッケージをGoコンパイラに通知します。 ここでは、標準ライブラリに付属しているfmtパッケージをインポートします。 fmtパッケージは、開発時に役立つフォーマットおよび印刷機能を提供します。
fmt.PrintlnはGo関数で、fmtパッケージに含まれており、コンピューターにテキストを画面に印刷するように指示します。
fmt.Println関数の後には、引用符で囲まれた"Hello, World!"などの一連の文字が続きます。 引用符で囲まれた文字は、文字列と呼ばれます。 fmt.Println関数は、プログラムの実行時にこの文字列を画面に出力します。
CTRL + Xと入力して、nanoを保存して終了します。ファイルの保存を求めるメッセージが表示されたら、Yを押します。
これで、プログラムを試すことができます。
ステップ2—Goプログラムの実行
「Hello、World!」でプログラムが作成されたら、プログラムを実行する準備が整います。 goコマンドに続けて、作成したファイルの名前を使用します。
go run hello.go
プログラムが実行され、次の出力が表示されます。
OutputHello, World!
実際に何が起こったのかを調べてみましょう。
Goプログラムは、実行する前にコンパイルする必要があります。 ファイル名(この場合はhello.go)でgo runを呼び出すと、goコマンドはアプリケーションをコンパイルし、結果のバイナリを実行します。 コンパイル済みプログラミング言語で記述されたプログラムの場合、コンパイラはプログラムのソースコードを取得し、別の種類の低レベルコード(マシンコードなど)を生成して実行可能プログラムを生成します。
Goアプリケーションには、mainパッケージと、アプリケーションのエントリポイントとして機能する one main()関数が必要です。 main関数は引数をとらず、値を返しません。 代わりに、パッケージを実行可能パッケージとしてコンパイルする必要があることをGoコンパイラに通知します。
コンパイルされると、コードはmainパッケージのmain()関数を入力して実行されます。 呼び出しfmt.Println関数によって行fmt.Println("Hello, World!")を実行します。 次に、Hello, World!の文字列値が関数に渡されます。 この例では、文字列Hello, World!は、メソッドに渡される値であるため、引数とも呼ばれます。
Hello, World!の両側にある引用符は、文字列の開始位置と終了位置をGoに指示するために使用するため、画面に出力されません。
このステップでは、動作する「Hello、World!」を作成しました。 Goでプログラムします。 次のステップでは、プログラムをよりインタラクティブにする方法を探ります。
ステップ3—ユーザー入力のプロンプト
プログラムを実行するたびに、同じ出力が生成されます。 このステップでは、プログラムに追加して、ユーザーに名前の入力を求めることができます。 次に、それらの名前を出力で使用します。
既存のプログラムを変更する代わりに、nanoエディターでgreeting.goという新しいプログラムを作成します。
nano greeting.go
まず、次のコードを追加します。これにより、ユーザーは名前を入力するように求められます。
あいさつ.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
}
ここでも、fmt.Println関数を使用して、画面にテキストを印刷します。
次に、強調表示された行を追加して、ユーザーの入力を保存します。
あいさつ.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
var name string
}
var name string行は、varキーワードを使用して新しい変数を作成します。 変数にnameという名前を付けると、タイプはstringになります。
次に、強調表示された行を追加して、ユーザーの入力をキャプチャします。
あいさつ.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
var name string
fmt.Scanln(&name)
}
fmt.Scanlnメソッドは、新しい行または(\n)文字で終わるキーボードからの入力を待つようにコンピューターに指示します。 これによりプログラムが一時停止し、ユーザーは任意のテキストを入力できるようになります。 ユーザーがキーボードのENTERキーを押すと、プログラムは続行されます。 次に、ENTERキーストロークを含むすべてのキーストロークがキャプチャされ、文字列に変換されます。
これらの文字をプログラムの出力で使用したいので、書き込みによってこれらの文字をnameという文字列変数に保存します。 Goは、プログラムの実行が終了するまで、その文字列をコンピュータのメモリに保存します。
最後に、プログラムに次の強調表示された行を追加して、出力を印刷します。
あいさつ.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
var name string
fmt.Scanln(&name)
fmt.Printf("Hi, %s! I'm Go!", name)
}
今回は、fmt.Printlnメソッドを再度使用する代わりに、fmt.Printfを使用しています。 fmt.Printf関数は文字列を受け取り、特殊な印刷動詞(%s)を使用して、nameの値を文字列に挿入します。 これは、Goが文字列補間をサポートしていないためです。これにより、変数に割り当てられた値を取得して、文字列内に配置できます。
CTRL + Xを押してnanoを保存して終了し、ファイルの保存を求めるメッセージが表示されたらYを押します。
次に、プログラムを実行します。 名前の入力を求められるので、名前を入力してENTERを押します。 出力は、期待したものと正確に一致しない場合があります。
OutputPlease enter your name. Sammy Hi, Sammy ! I'm Go!
Hi, Sammy! I'm Go!の代わりに、名前の直後に改行があります。
プログラムは、プログラムに続行するように指示するために押したENTERキーを含む、すべてのすべてのキーストロークをキャプチャしました。 文字列でENTERキーを押すと、改行を作成する特殊文字が作成されます。 プログラムの出力は、あなたが指示したとおりに実行されます。 入力したテキスト(新しい行を含む)が表示されます。 期待した出力ではありませんが、追加の機能で修正できます。
エディタでgreeting.goファイルを開きます。
nano greeting.go
プログラムで次の行を見つけます。
あいさつ.go
... fmt.Scanln(&name) ...
その直後に次の行を追加します。
あいさつ.go
name = strings.TrimSpace(name)
これは、fmt.Scanlnでキャプチャした文字列に対して、Goの標準ライブラリstringsパッケージのTrimSpace関数を使用します。 strings.TrimSpace関数は、文字列の最初と最後から、新しい行を含むすべてのスペース文字を削除します。 この場合、ENTERを押したときに作成された文字列の最後にある改行文字が削除されます。
stringsパッケージを使用するには、プログラムの先頭にインポートする必要があります。
プログラムで次の行を見つけます。
あいさつ.go
import (
"fmt"
)
次の行を追加して、stringsパッケージをインポートします。
あいさつ.go
import (
"fmt"
"strings"
)
これで、プログラムには次のものが含まれます。
あいさつ.go
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println("Please enter your name.")
var name string
fmt.Scanln(&name)
name = strings.TrimSpace(name)
fmt.Printf("Hi, %s! I'm Go!", name)
}
nanoを保存して終了します。 CTRL + Xを押し、ファイルを保存するように求められたらYを押します。
プログラムを再度実行します。
go run greeting.go
今回は、名前を入力してENTERを押すと、期待どおりの出力が得られます。
OutputPlease enter your name. Sammy Hi, Sammy! I'm Go!
これで、ユーザーからの入力を受け取り、それを画面に出力するGoプログラムができました。
結論
このチュートリアルでは、「Hello、World!」を作成しました。 ユーザーからの入力を受け取り、結果を処理し、出力を表示するプログラム。 使用する基本的なプログラムができたので、プログラムをさらに拡張してみてください。 たとえば、ユーザーの好きな色を尋ね、プログラムにその好きな色が赤であると言わせます。 これと同じ手法を使用して、単純なMad-Libプログラムを作成することもできます。