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プログラムを作成することもできます。