Goで最初のプログラムを書く方法

前書き

「Hello、World!」プログラムは、コンピュータープログラミングの古典的かつ古くからの伝統です。 これは初心者向けのシンプルで完全な最初のプログラムであり、環境が適切に構成されていることを確認するのに適した方法です。

このチュートリアルでは、Goでこのプログラムを作成する方法を説明します。 ただし、プログラムをより面白くするには、従来の「Hello、World!」プログラムを変更して、ユーザーに名前を尋ねるようにします。 その後、グリーティングで名前を使用します。 チュートリアルを完了すると、実行すると次のようなプログラムが作成されます。

OutputPlease enter your name.
Sammy
Hello, Sammy! I'm Go!

前提条件

このチュートリアルを開始する前に、コンピューターにlocal Go development environmentを設定する必要があります。 これらのチュートリアルのいずれかに従って、これを設定できます。

[[step-1 -—- writing-the-basic-“ hello-world-”-program]] ==ステップ1—基本的な“ Hello、World!”を書くプログラム

「Hello、World!」を書くためにプログラムで、nanoなどのコマンドラインテキストエディタを開き、新しいファイルを作成します。

nano hello.go

ターミナルウィンドウでテキストファイルが開いたら、プログラムを入力します。

hello.go

package main

import "fmt"

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

コードのさまざまなコンポーネントを分類しましょう。

packageは、このファイルが属するコードバンドルを定義するGokeywordです。 フォルダごとに存在できるパッケージは1つだけであり、各.goファイルはファイルの先頭で同じパッケージ名を宣言する必要があります。 この例では、コードはmainパッケージに属しています。

importはGokeywordであり、このファイルで使用する他のパッケージをGoコンパイラに通知します。 ここでは、標準ライブラリに付属しているfmtパッケージをインポートします。 fmtパッケージは、開発時に役立つフォーマットおよび印刷機能を提供します。

fmt.Printlnは、fmtパッケージに含まれるGofunctionであり、画面にテキストを印刷するようにコンピューターに指示します。

fmt.Println関数の後には、引用符で囲まれた"Hello, World!"などの一連の文字が続きます。 引用符の内側にある文字はすべてstringと呼ばれます。 fmt.Println関数は、プログラムの実行時にこの文字列を画面に出力します。

CTRL + Xと入力して、nanoを保存して終了します。ファイルを保存するように求められたら、Yを押します。

これで、プログラムを試すことができます。

[[step-2 -—- running-a-go-program]] ==ステップ2—Goプログラムの実行

「Hello、World!」プログラムを作成したら、プログラムを実行する準備が整います。 goコマンドを使用し、その後に作成したファイルの名前を続けます。

go run hello.go

プログラムが実行され、次の出力が表示されます。

OutputHello, World!

実際に何が起こったのかを見てみましょう。

Goプログラムは、実行する前にコンパイルする必要があります。 ファイルの名前(この場合はhello.go)を使用してgo runを呼び出すと、goコマンドはアプリケーションをcompileし、結果のバイナリを実行します。 compiledプログラミング言語で記述されたプログラムの場合、コンパイラはプログラムのソースコードを取得し、別のタイプの低レベルコード(マシンコードなど)を生成して実行可能プログラムを生成します。

Goアプリケーションには、mainパッケージと、アプリケーションのエントリポイントとして機能する正確にonemain()関数が必要です。 main関数は引数をとらず、値を返しません。 代わりに、パッケージを実行可能パッケージとしてコンパイルする必要があることをGoコンパイラに伝えます。

コンパイルされると、コードはmainパッケージにmain()関数を入力して実行されます。 行fmt.Println("Hello, World!")callingfmt.Println関数で実行します。 Hello, World!の文字列値は、関数に対してpassedになります。 この例では、文字列Hello, World!は、メソッドに渡される値であるため、argumentとも呼ばれます。

Hello, World!の両側にある引用符は、文字列の開始位置と終了位置をGoに指示するために使用するため、画面に出力されません。

このステップでは、Goを使用して実用的な「Hello、World!」プログラムを作成しました。 次のステップでは、プログラムをよりインタラクティブにする方法を探ります。

[[step-3 -—- prompting-for-user-input]] ==ステップ3—ユーザー入力のプロンプト

プログラムを実行するたびに、同じ出力が生成されます。 このステップでは、ユーザーに名前を入力するようにプログラムに追加できます。 次に、出力でそれらの名前を使用します。

既存のプログラムを変更する代わりに、nanoエディターでgreeting.goという新しいプログラムを作成します。

nano greeting.go

まず、次のコードを追加します。これにより、ユーザーに名前を入力するように求められます。

greeting.go

package main

import (
    "fmt"
)

func main() {
  fmt.Println("Please enter your name.")
}

ここでも、fmt.Println関数を使用して、画面にテキストを印刷します。

次に、強調表示された行を追加して、ユーザーの入力を保存します。

greeting.go

package main

import (
    "fmt"
)

func main() {
  fmt.Println("Please enter your name.")
  var name string
}

var name string行は、varkeywordを使用して新しい変数を作成します。 変数にnameという名前を付けると、タイプはstringになります。

次に、強調表示された行を追加して、ユーザーの入力をキャプチャします。

greeting.go

package main

import (
    "fmt"
)

func main() {
  fmt.Println("Please enter your name.")
  var name string
  fmt.Scanln(&name)
}

fmt.Scanlnメソッドは、新しい行または( )文字で終わるキーボードからの入力を待つようにコンピューターに指示します。 これによりプログラムが一時停止し、ユーザーは必要なテキストを入力できます。 ユーザーがキーボードのENTERキーを押すと、プログラムは続行されます。 次に、ENTERキーストロークを含むすべてのキーストロークがキャプチャされ、文字列に変換されます。

これらの文字をプログラムの出力で使用したいので、これらの文字をwritingで保存し、nameという文字列variableに格納します。 Goは、プログラムの実行が完了するまで、その文字列をコンピューターのメモリに保存します。

最後に、プログラムに次の強調表示された行を追加して、出力を印刷します。

greeting.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関数は文字列を受け取り、特別な印刷verbs%s)を使用して、nameの値を文字列に挿入します。 これを行うのは、Goがstring interpolationをサポートしていないためです。これにより、変数に割り当てられた値を取得して、文字列内に配置できます。

CTRL + Xを押してnanoを保存して終了し、ファイルの保存を求めるプロンプトが表示されたら%(​​t2)sを押します。

次にプログラムを実行します。 名前の入力を求められるので、名前を入力してENTERを押します。 出力は、期待どおりではない場合があります。

OutputPlease enter your name.
Sammy
Hi, Sammy
! I'm Go!

Hi, Sammy! I'm Go!の代わりに、名前の直後に改行があります。

プログラムは、プログラムに続行するように指示するために押したENTERキーを含む、キーストロークのallをキャプチャしました。 文字列では、ENTERキーを押すと、改行を作成する特殊文字が作成されます。 プログラムの出力は、あなたがそれをするように命じたとおりにしています。その新しい行を含む、入力したテキストが表示されます。 出力が期待したものではありませんが、追加の機能で修正できます。

エディターでgreeting.goファイルを開きます。

nano greeting.go

プログラムで次の行を見つけます。

greeting.go

...
fmt.Scanln(&name)
...

その直後に次の行を追加します。

greeting.go

name = strings.TrimSpace(name)

これは、fmt.Scanlnでキャプチャした文字列に対して、Goの標準ライブラリstringsパッケージのTrimSpace関数を使用します。 strings.TrimSpace関数は、文字列の最初と最後から、新しい行を含むすべてのスペース文字を削除します。 この場合、ENTERを押したときに作成された文字列の最後にある改行文字が削除されます。

stringsパッケージを使用するには、プログラムの先頭にインポートする必要があります。

プログラムで次の行を見つけます。

greeting.go

import (
    "fmt"
)

次の行を追加して、stringsパッケージをインポートします。

greeting.go

import (
    "fmt"
  "strings"
)

プログラムには、次のものが含まれます。

greeting.go

package main

import (
        "fmt"
        "strings"
)

func main() {
    fmt.Println("Please enter your name.")
    var name string
    fmt.Scanln(&name)
    fmt.Printf("Hi, %s! I'm Go!", name)
    name = strings.TrimSpace(name)
}

nanoを保存して終了します。 CTRL + Xを押し、ファイルを保存するように求められたら%(​​t2)sを押します。

プログラムを再度実行します。

go run greeting.go

今回は、名前を入力してENTERを押すと、期待どおりの出力が得られます。

OutputPlease enter your name.
Sammy
Hi, Sammy! I'm Go!

これで、ユーザーからの入力を取得して画面に印刷するGoプログラムができました。

結論

このチュートリアルでは、ユーザーからの入力を受け取り、結果を処理し、出力を表示する「Hello、World!」プログラムを作成しました。 作業する基本的なプログラムができたので、プログラムをさらに拡張してみてください。 たとえば、ユーザーの好きな色を聞いて、好きな色は赤であるとプログラムに言わせます。 この同じ手法を使用して、単純なMad-Libプログラムを作成することもできます。