mem. golangに入門してみた時にやったこと

golangを触ってみる際に個人的にやったことを備忘録として残しておく。

## 主にやったこと
* A Tour of Go を少し触る
* MAC環境にAtomでGolangの開発環境を作る

## A Tour of Go

基本中の基本？なのか、「Go 入門」などでググるとだいたいの人が[この " A Tour of Go "](https://go-tour-jp.appspot.com/)を読んだ後にxxしました。とゆーてるので、ひとまずここから始めてみることに。

変わっているな、と思った点だけ少しメモ。（そもそも他の言語もそんなに詳しくないので違いはあまりわからないが。。）

* Stacking defers
    * `defer へ渡した関数が複数ある場合、その呼び出しはスタック( stack )されます。 呼び出し元の関数がreturnするとき、 defer へ渡した関数は LIFO(last-in-first-out) の順番で実行されます。`
    * 実行はされるが呼び出し順序が少し違うとのこと
* Pointers
    * 懐かしのポインタが存在。ただ、Cとは違ってポインタ演算はないとのこと。
* Arrays
    * 配列はあります。
    * `var a [10]int`
    * こんな感じで、配列数の後ろに型名を宣言
    * そして、配列の要素数は変えられないらしい
* Slices are like references to arrays
    * sliceというもので配列の一部を表現
    * a[1:4]でa配列の１番目〜３番目までの要素を参照できる。
    * sliceの一部を更新すると、元の配列が更新される！！

```go
func main() {
	names := [4]string{
		"John",
		"Paul",
		"George",
		"Ringo",
	}
	fmt.Println(names)

	a := names[0:2]
	b := names[1:3]
	fmt.Println(a, b)

	b[0] = "XXX"
	fmt.Println(a, b)
	fmt.Println(names)
}
```
上みたいに書くとこうなる。

```
[John Paul George Ringo]
[John Paul] [Paul George]
[John XXX] [XXX George]
[John XXX George Ringo]
```

A Tour of Goはこの後もかなり続きそう。。
性格的に、やりながら覚える派なので、一旦ここまでにして何か作りたいところ。
ということで、開発環境のセットアップを行う。

# 開発環境のセットアップ for MAC OS

ググるといろいろな環境、IDEなどある模様。
Visual Studio Codeをおすすめしているサイトもあったが、今回はAtomで設定をする。
[ここ](https://qiita.com/croquette0212/items/3ef6003c6bb621b59b97)をみると、VSCとAtomで大差はなさそうだったので、最近エディタとして使い始めたAtomになれることも視野に。

## 私の環境

OS: OS X Yosemite 10.10.5

Homebrew,Atomはインストール済み

## やること
[ここ](https://startappdevfrom35.com/atomsettingforgolangdev/)を参考にいろいろ入れていく。

* goenvのインストール
* Goのインストール
* $GOHOMEの設定
* 依存パッケージのインストール
* Atomの関連パッケージインストール
* 動作確認

## 開発環境インストール

### goenvのインストール

shellで以下を実行

```
$ brew install goenv
```

.bash_profileに以下を追記

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

### Goのインストール
コマンドでインストール可能なGoのバージョンを確認

```
$ goenv install -l
Available versions:
  1.2.2
  1.3.0
  1.3.1
　（略）
  1.11beta2
  1.11beta3
  1.11rc1
  1.11rc2
  1.11.1
  1.11.2
  1.11.3
  1.11.4
  1.12beta1

```
ん。現在（２０１９年５月２日時点）での最新安定版は1.12.4らしいのだが、見当たらない。
ひとまず、1.11.4を入れることに。

```
$ goenv install 1.11.4
Downloading go1.11.4.darwin-amd64.tar.gz...
-> https://dl.google.com/go/go1.11.4.darwin-amd64.tar.gz
Installing Go Darwin 64bit 1.11.4...
Installed Go Darwin 64bit 1.11.4 to /Users/ken/.goenv/versions/1.11.4
$ goenv global 1.11.4
```
確認。バージョンがでればOK

```
$ source ~/.bash_profile
$ go version
go version go1.11.4 darwin/amd64
```

### GOHOMEの設定

>Go言語では、ワークスペースというディレクトリ下で開発作業を行ないます。
このディレクトリ下に、ソースコード、外部ライブラリー、コンパイル済み実行ファイルなど、
開発に必要なものから出力まで、全てが格納されます。

とのことなので、設定する。

```
$ pwd
/Users/ken/Work
$ mkdir go
$ vi ../.bash_profile
# for golang
export GOPATH=$HOME/Work/go
export PATH=$PATH:$GOPATH/bin
```
`source ~/.bash_profile`を忘れずに。

### 依存関係のあるパッケージをインストール

```
$ go get golang.org/x/tools/cmd/goimports
$ go get github.com/nsf/gocode
$ go get github.com/rogpeppe/godef
$ brew install go-delve/delve/delve
```
### atom関連パッケージをインストール

```
$ apm install go-plus
$ apm install godef
```
### 動作確認

作業用のディレクトリを作る

```
$ mkdir $GOPATH/src/test
```
作ったディレクトリに以下の内容でAtomからファイルを開き、test.goを作る

```go
package main

import "fmt"

func main() {
  fmt.Println("Test")
}
```
ファイルを保存をするとコンパイルが走り、以下のようなメッセージが出る。

```
?   	test	[no test files]

Done
```
コマンドラインから以下を実行

```
$ go run test.go
Test
```
動いた！

以上で完了。