Posted at

A Tour of Go

More than 1 year has passed since last update.

先日、職場の上司と「サーバサイドの開発言語を変えるとしたら何を選ぶ?」という話題になり、その中でGo言語が候補の一つとして上がりました。

私自身、Go言語(以下Go)のことをあまり知らず、Goで開発すると何が嬉しいのだろう?と気になったため少し触ってみることにしました。


gotour

Goを触ってみるのにA Tour of GoというGoのチュートリアルがあります。

https://go-tour-jp.appspot.com/welcome/1

これはgotourというGoチュートリアルをgolang.org(日本のローカライズ版はgo-tour-jp.appspot.com)上で動かしているものです。

Goをブラウザ上で実行しながら各機能を学ぶことができます。


インストール

A Tour of Go上で動かすのであれば必要ありませんが、自分のマシンにGoを入れたい場合は

公式サイトからOSに合わせてインストーラをダウンロード。

または、MacであればHomebrewから入れられます。


Packages, variables, and functions.

A Tour of GoのBasicsという章は

-Packages, variables, and functions.

-Flow control statements: for, if, else, switch and defer

-More types: structs, slices, and maps.

の3本立てとなっていて、

今回はPackages, variables, and functions.からみていきます。

Packages, variables, and functions.は

-package

-imports

-Exported names

-Functions

-Functions continued

-Multiple results

-Named return values

-Variables

-Variables with initializers

-Short variable declarations

-Basic types

-Zero values

-Type conversions

-Type inference

-Constants

-Numeric Constants

で成り立っており、この中で気になったものをピックアップします。


Exported names

Goには大文字で始まる名前は他のパッケージから参照することのできるexported nameという概念があります。他の言語で言うところのpublicと同じような感じでしょうか。

まだ深く調べていませんが、Goにはクラスがないようなのでクラス型のオブジェクト指向言語と比較できないのでなんとも言えませんが。

package main

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Pi)
}

mathのPiは大文字始まりなため、main関数から呼び出すことができます。

仮に、Piではなく、piだったら呼び出し不可能です。


Functions

関数は次のように定義します。

func add(x int, y int) int {

return x + y
}

addが関数名、その後ろの括弧内が引数、その後ろが戻り値の型です。


Multiple results

関数の戻り値を複数にすることができます。

func swap(x, y string) (string, string) {

return y, x
}

その場合、戻り値の型は括弧で括ります。省略することはできません。


Named return values

あらかじめ戻り値となる変数を宣言することで、return以下を省略することができます。

func split(sum int) (x, y int) {

x = sum * 4 / 9
y = sum - x
return
}

この場合、x, yが返されます。Multiple resultsを使った場合と相性がいいのではないかと思います。


Short variable declarations

Goは強い静的型付け言語なため、変数を宣言する際は型を明示する必要があります。

var i, j int = 1, 2

このように宣言すると、i, jにはintである1と2が代入されます。

ワンライナーでかけるのでスッキリした印象があります。

しかし、このvarを使わずに:= の代入文を使うことで、暗黙的な型変換を行うことができます。

i, j := 1, 2

これは先ほどの記述例と同義です。


Zero values

変数に初期値を与えずに宣言をすると、ゼロ値(Zero values)というものが与えられます。

例えば、

数値型(int,floatなど): 0

bool型: false
string型: ""

といった具合です。

これを知らないと

var is_valid_code bool = false;

といったように冗長な宣言をしてしまいます。


まとめ

スクリプト言語の手軽さを備えつつ、静的型付けをサポートしているいいとこ取りなところに興味をそそられます。

まだまだ調べ始めたばかりなので、またA Tour of Goを触った感想をまとめてみたいと思います。


参考

公式

https://golang.org/

http://shoma2da.hatenablog.com/entry/2014/08/16/075050

https://liginc.co.jp/284306