【Go言語入門】1.環境構築から出力まで

前々からGoを使って何か作りたかったので、それに向けて自分用にキャッチアップを進めるがてら公式をなぞってみる。

開発環境はLinux Mint 19.1 Tessaです。

インストール

肌感ですが、他の言語と比べるとHello worldまでは一番楽でした。

ここの手順通りにすると、コマンドラインから解凍、パス設定ができます。

複数バージョン管理が可能なpyenvやrbenv、nvmのようにgoにもgoenv があるので、ここではそれを使っています。

git clone https://github.com/syndbg/goenv.git ~/.goenv

ホームディレクトリの.bashrcか.zshrcに以下を記述。(なければ作成)

export GOENV_ROOT=$HOME/.goenv
export PATH=$GOENV_ROOT/bin:$PATH
eval "$(goenv init -)"

再起動してgoenvコマンドを叩いた時、以下のようにusageがでれば使える状態になってます。

goenv 2.0.0beta11
Usage: goenv <command> [<args>]

Some useful goenv commands are:
   commands    List all available commands of goenv
   local       Set or show the local application-specific Go version
   global      Set or show the global Go version
   shell       Set or show the shell-specific Go version
   install     Install a Go version using go-build
   uninstall   Uninstall a specific Go version
   rehash      Rehash goenv shims (run this after installing executables)
   version     Show the current Go version and its origin
   versions    List all Go versions available to goenv
   which       Display the full path to an executable
   whence      List all Go versions that contain the given executable

See 'goenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/syndbg/goenv#readme
goenv install -l

でインストール可能なバージョン群が見られます。

使用するバージョンを決めたら、早速インストール。

# 任意のバージョン
goenv install *.*.*
goenv global *.*.*
goenv rehash

ついでにグローバル設定もしておきます。

goコマンドを打った時、

Go is a tool for managing Go source code.

Usage:

	go <command> [arguments]

The commands are:

	bug         start a bug report
	build       compile packages and dependencies
	clean       remove object files and cached files
	doc         show documentation for package or symbol
	env         print Go environment information
	fix         update packages to use new APIs
	fmt         gofmt (reformat) package sources
	generate    generate Go files by processing source
	get         add dependencies to current module and install them
	install     compile and install packages and dependencies
	list        list packages or modules
	mod         module maintenance
	run         compile and run Go program
	test        test packages
	tool        run specified go tool
	version     print Go version
	vet         report likely mistakes in packages
...

のようなusageが出れば完了です。

適当なワークスペースを作り、拡張子goのファイルを作成。

package main

import "fmt"

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

※A Tour of Goの写経です。

ファイルが存在する階層で、

go build hello.go

./hello
# >>> Hello, world

という形で実行できるようになります。

また、

go run hello.go

これで即時実行できます。

Goのプログラムはパッケージ群から構成されており、mainパッケージから開始されるようです。

なんとなくC言語と似ている気がする。

Imports/Packages

Goでは複数パッケージのインポートは

import (
  "fmt"
  "math/rand"
)

or

import "fmt"
import "math/rand"

という具合に追加していくみたいです。

ちなみにカンマは不要です。

ちなみにシングルクォーテーションにするとエラーが出るのでここも注意ですね。

出力

これからお世話になりそうな関数なので、一応ピックアップ。

fmt.Println(math.pi)

fmt.Printf("Now you have %g problems.", math.Sqrt(7))

Println

print lineの略で、Println(“a”, “b”…)のように書く。

引数間には空白、最後に改行文字を出力する。

Printf

print formatの略で僕はC言語の学習で大変お世話になりました。

C/C++の標準出力関数同様、fmt.Printf(“My name is %s”, name)のような書き方をします。

例のフォーマット%sstringです。

他にも

  • 論理値 – %t
  • 整数 – %d
  • 浮動小数 – %g
  • 文字列 – %s
  • ポインタ – %p

など指定子は色々あります。

ただしGoには汎用的な指定方法があり、%vで適宜デフォルトフォーマットを適用してくれるので、これである程度はカバーできます。

上記の指定対象の型はざっくりなので、詳細はこちらで確認できます。

ひとまず今回はこのあたりで。