金曜日の深夜に急にGoを始めたい衝動に駆られた
思い立った経緯
金曜日の夜にふと人気プログラミング言語について閲覧していた。そこでPythonやJavascript不動の人気に、「はい、そうですか。」気分でみていた。そこでみたGoLangをみて、「あ、せっかくだし触りだけでも今日やろうかな」と思ったので、自分への議事録のため記事を投稿。
やったこと
自分のPCでの動作環境構築と公式ドキュメントの「Packages, variables, and functions.
Learn the basic components of any Go progr」をやってみた
動作環境
OS:macOS Catalina 10.15.6
Editor:Visual Studio Code 1.47.3
pkg管理:Homebrew 2.4.9
環境構築
まずはGoLangのインストールから
hoge@hoge-MacBook-Air ~ % brew install go
...省略...
hoge@hoge-MacBook-Air ~ % go version
go version go1.14.5 darwin/amd64
インストール完了だね。
動作確認
Visual Studio Code(以下VSCode)を起動して、必要な拡張機能をインストールする。
だけをインストールしました。
そして、(Cmd+Shift+P)で全てのコマンドを表示し、以下を選択する。
- Go:Install/Update Tools
項目を全て選択し、インストールする。
インストール完了したら環境構築は完了となるので、実際にコードを試しに書いていく。
サンプルコード実装と内容の理解
公式のページ(https://golang.org/ )にならって、以下のファイルを任意のフォルダで作成。
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
そしてコンパイル実行を行う。
hoge@hoge-MacBook-Air sampleGo % go run hello.go
Hello, 世界
問題なく実行確認が完了しました。
これでとりあえずの環境構築が完了としています。
公式ドキュメントを読んでいく
A Tour of Go(https://golang.org/doc/ )でドキュメントを読んでいく。
Package & import
Goのプログラムはパッケージで構成されています。
Packageはmainから開始される。
下記のプログラムでは、"fmt"と"math/rand"をインポートしている。
package main
import (
"fmt"
"math/rand"
)
Exported names
最初の文字が大文字で始まる名前は、外部パッケージから参照できるエクポートされた名前となっている。
パッケージをインポートしているとエクスポートしている名前は参照することができる。
// Piはmathパッケージでエクスポートされている
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pi)
}
function
関数は0個以上の引数を受け取れる。
Named return values
Goでの戻り値となる変数に名前をつけることができ、ただし、名前をつけた戻り値の変数(以下のxとy)についてはreturn ステートメントに何も書かずに戻すことができ、このことをnaked returnという。推奨は使わない。
package main
import "fmt"
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main() {
fmt.Println(split(17))
}
variables
基本的には「var XXX = X」の形で宣言を行うが、関数ないだけ「XXX := X」と暗黙的な型宣言ができるが、関数の外ではエラーとなる。
基本型と初期値については以下の通り。
bool
デフォルト初期値:false
string
デフォルト初期値:""
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 の別名
rune // int32 の別名
// Unicode のコードポイントを表す
float32 float64
complex64 complex128
デフォルト初期値:0
Type conversions
Go言語では明示的な変換が必要で、以下のような形でおこなう。
もし、明示的な型を指定せずに変数を宣言する場合は、変数の右側から型推論がされる。
// 通常
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
// シンプルに
i := 42
f := float64(i)
u := uint(f)
Constants
定数はconstキーワードを使って変数と同じように宣言を行う。
定数は、文字(character)、文字列(string)、boolean、数値(numeric)のみで使えます。
なお、定数は := を使って宣言できません。
最後に
今日はここまでやったので、また衝動に駆られた際に続きをやっていこうかと。
よい気晴らしになりました。新しい言語を学び始めるとどっぷりハマってしまうので、
また忘れた頃に続きを別記事で更新します。