Go言語はじめたよ!
約半年後には新卒でサーバサイドマンになる身としては今更ですが、Go言語を触り始めました。実務でも使うそうですし、それ以前から気になっていましたので、良い機会だと思って触り始めます。
勉強方法
勉強するにあたって、本を1冊買いました。
改訂2版 みんなのGo言語
しかし、初級者向けではありませんでした(遅い)
内容としては、チーム開発やコーディングに置いて注意すべきこと、考え方等でとても実用的ではあるのですが、Go言語を始めて触るという方には少し早い内容でした。
そのため、こちらの書籍で紹介されていた「A Tour of Go」を利用して勉強したいと思います。
さっそく環境構築
購入した本にはMac用の環境構築方法しか載っていなかったので、Windows用は自分で調べました。今回は一番シンプルなmsiを利用した方法を使います。
まずは、公式ページでmsiをダウンロードします。
→Downloads-The Go Programming Language
こちらで、Featured downloadから「Microsoft Windows」を選択してください。
ローカルの任意の場所にmsiをダウンロードしてください。
msiを開くと以下のような画面が出てくると思います。
基本的にNextとか押して進んでいけば大丈夫です。
途中でディレクトリを聴かれるので、希望があれば変更してください。
PATHは自動で追加されるので、msiの処理が終了したらセットアップ完了です。
試しに、「go version」とコマンドプロンプトから入力して、バージョンが表示されれば完了です。
※バージョンは違って大丈夫です。
HelloWorldしてみる。
どこの業界でも挨拶が基本らしいのでひとまず挨拶しておきます。
main.goというファイルを作成して以下の内容を書き込みました。
1 2 3 4 5 |
package main func main(){ println("Hello Go-lang") } |
余談ですが、IDEとして私はJetBrainsのGoLandを使用していますが、VisualStudioCode等のエディタで全く問題ないです。(学割の恩恵)
実行には以下のコマンドを使用します。
1 2 |
> go run main.go Hello Go-lang |
尚、ビルドのみの場合は以下のコマンドになります。
1 |
> go build main.go |
因みに、ここで利用している println 関数は末尾を改行する関数なので、
1 2 3 4 5 6 |
package main func main(){ print("Hello ") println("Go-lang") } |
このように print にすることで末尾が改行されません。
試しに実行して見ると、先程と同じ結果になるのが解かります。
1 2 |
> go run main.go Hello Go-lang |
余談ですが、ネットの噂ではlnはLINE(行)の略称から来ているそうですよ。
パッケージ
Go言語はパッケージ(package)で構成されており、プログラムは main パッケージから開始されます。そのため、先程の例では1行目に
1 |
package main |
の表記がありました。
それでは、外部のパッケージを読んでみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
package main // パッケージのインポート import ( "fmt" "time" ) func main(){ // 時間を呼び出す fmt.Printf("the time is %s !", time.Now()) } |
今回は2種類のパッケージを呼び出しました。
“fmt” はC言語から派生した書式でC言語の printf や scanf に似た関数を持っています。
今回の例では printf に似た Printf 関数を使用しています。尚、呼び出す際には元のパッケージである “fmt” も先頭に付けて fmt.Printf() と表記します。
“time” はその名の通り時間用のパッケージです。
time.Now() で現在時刻を呼び出すことが出来ます。
尚、このコードを実行すると以下のように表示されます。
1 2 |
>go run main.go the time is 2020-09-18 02:27:12.9546901 +0900 JST m=+0.003000801 ! |
関数を作ってみる
続いて、自分で関数を作ってみます。
今回は、掛け算をするだけの単純な関数を作ってみました。
1 2 3 4 5 6 7 8 9 10 11 |
package main import "fmt" func multiplication(x int, y int) int { return x * y } func main() { fmt.Println(multiplication(10, 10)) } |
少し機能を分かり易くすると以下のようになります。
1 2 3 4 5 6 |
func 関数名(引数1 型, 引数2 型) 戻り値の型{ 処理 return 戻り値 } |
引数の省略
先程の関数ですが、引数が両方とも同じ型のため、以下のように略すこともできます。
1 2 3 |
func multiplication(x, y int) int { return x * y } |
戻り値
戻り値は以下のように複数指定できます。
1 2 3 |
func double(x int, y int)(int, int){ return x * 2, y * 2 } |
また、こんな書き方にもできます
1 2 3 4 5 |
func double(x int, y int)(doubleX int,doubleY int){ doubleX = x * 2 doubleY = y * 2 return } |
これは、戻り値となる変数を予め宣言することで、return時にその変数が返されます。
このようにreturnステートメントに何も書かずに返すことを naked return と呼ぶそうです。
尚、長い関数で利用すると可読性に難があるため、短い関数で使用することを推奨します。
Goの変数
今回は最後に変数に触れます。
参考にした「A Tour of Go」の順序に従って書いているのですが、関数よりも変数が後に来るのは少し意外でしたが分かり易かったです!
まず、変数は以下のように宣言します。
1 2 3 |
var x, y int x = 5 y = 10 |
少し機能を分かり易くすると以下のようになります。
1 |
var 変数1, 変数2 型 |
このように末尾に型を書きます。
型の省略
以下のように宣言と同時に初期化することで型を省略することも可能です。
1 |
var x, y = 5, 10 |
また、これを更に以下のように省略することが可能です。
1 |
x, y := 5, 10 |
この書き方は関数内のみで可能な書き方です。
このような明示的な型を指定しない場合は、初期値の値から型推論されます。
初期値が数値である場合は、その数値の精度に基づいて
- int
- float64
- complex128
が割り当てられます。
型の種類に関してはこちらを参照してみて下さい!
初期値
変数に初期値を与えずに宣言した場合は以下の値が初期値として渡されます。
- 数値型:0
- bool型:0
- string型:””(空文字列)
この初期値をゼロ値というそうです。
定数
Goでの定数は以下のように定義します。
1 |
const million = 1000000 |
定数では := は使用できません。
定数は、
- 文字
- 文字列
- boolean
- 数値
で利用できます。
型変換
例えば、intからfloat64への変換は以下のように行います。
1 |
var z float64 = float64(x) |
こんな風な省略も可能です。
1 |
z := float64(x) |
正直、この型変換方法はシンプルで可読性が高く良いなと思いました。
〆
今回はインストールから基礎までをまとめました。
とても触り易い言語で、可読性が高いためチーム開発には良いなと思いました。
これからさらに学び続けて行きたいと思います!
参考にした記事
Go言語のインストールとhello worldを表示する(Windows10) – ITSakura
今回のブログ曲
今回投稿中に聴いていた曲はこちら
因みに曲ではないですが、個人的にハマっているYouTubeチャンネルはこちら。
アイアンマンを作ろうとしてて、めちゃくちゃ面白いです。