【Go!】Golang環境構築~Mac(M1チップ)で~【Go!】

# はじめに
Mac(M1チップ)環境でGolangの環境構築していきます。
~~goenvでの構築のやり方で進めていきます。~~
色々試行錯誤しましたが、goenvで導入した場合、最新版の１つ下のバージョンまでしかインストールできませんでした。
VScodeをいじってるときに最新版じゃないよってアップデート急かされるので、結局公式HPで最新版インストールすることにしました。
まぁもしgoenvに変えたいときでもやり方はわかったので。goenvの導入方法も記しておきます。
## goenv??????
goのバージョン管理を行うためのツールです。
プロジェクト毎に、goのバージョン指定できます。
(ぼくはバージョン違う場合はDockerで仮想環境作っちゃうかも。。。)
Pythonでいうpyenv、Rubyでいうrbenv。。。
# 環境構築
## 公式からGolangインストール
[ここのリンク](https://golang.org/dl/)からインストール
下の方にarm版があるのでこれをインストールする。
**arm版でないとVScodeでデバッグできない**ので必ずarm版で！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/e924ce74-0f88-21b5-6f22-6b028bd8f8cc.png)
PATHを指定する必要なし。
下のVScodeで実践！の項目まで飛ばしてください！
## goenv導入
goenvで導入してみたがgoenvでインストールできる
### インストール
homebrewでもできるけどバージョンが低いのでこっちでインストール。

```sh
$ git clone https://github.com/syndbg/goenv.git ~/.goenv
```
### PATHを通す
まだbash使ってる方は`~/.zshenv`の部分を`~/.bash_profile`にしてもらえば^^;

```sh
$ echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.zshrc
$ echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(goenv init -)"' >> ~/.zshrc
$ source ~/.zshrc
```
### バージョン確認
表示されればOKです！

```sh
$ goenv -v
```
## goの設定
### インストール
インストールできるバージョンの一覧を表示

```sh
$ goenv install -l
```
```sh
$ goenv install　バージョン
```
### 使用するバージョンの設定
```sh
$ goenv global バージョン
```
### 特定のディレクトリ内だけのバージョン設定
```
$ goenv local 1.16.0
```
### バージョン確認
これで指定したバージョンが表示されればOK!

```sh
$ go version
```
### PATHを通す
bashの方は`~/.bash_profile`に。

```sh
$ echo 'export PATH="$GOROOT/bin/$PATH"' >> ~/.zshrc
$ echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.zshrc
$ source ~/.zshrc
```
## VScodeで実践！
### 環境構築
今回はテストフォルダを作ってその中で作業を進めていきます。

```sh
# 任意のディレクトリで
$ mkdir test
$ cd test
$ touch main.go
$ code .
```
で、VScodeが開かれます。
### goの拡張機能インストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/dd6eb15e-68b9-01df-40e7-4d9ce8bd58c5.png)

`shift + command + p`で`go: install/update tools`入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/7293163b-cf73-b3da-f401-83161eb9d5c6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/5cf2d8d3-ac9f-d7d7-f0c1-c9aee96ba37f.png)
左上のチェックで全チェックでOKボタン。
全部SUCCESSEDしたらで完了。
### goファイル修正
```main.go
package main

import "fmt"

func main() {
	msg := "hello world"
	fmt.Println(msg)
}
```
### 起動確認

```sh
$ go run main.go
```
### mod作成
作業ディレクトリ内でgo.modを作成します。
`go mod init フォルダ名(プロジェクト名)`
今回はtestなのでコレ

```
$ go mod init test
```
go.modというファイルが生成されました。
### ブレークポイント
main.goにブレークポイントを置きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/826149e4-4534-2a43-33be-0248931ddc73.png)
### デバッグ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/1f8384a5-79c7-e8a9-37bc-6e32a51b8b88.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/7e02982c-f9ec-87ac-18cf-49175cd3da37.png)
これでmsgの中身が見れたりして今どういう状態か把握することができます。
使い方は色々いじってみてください！
# まとめ
とりあえずGo入れてみたわけですが、色々基礎的なサイトとか覗いてみました。
これ！Cだ！！！
`Printf`、`Println`懐かしい！！！でも末尾にセミコロンはいらないみたいだ。
元々SE時代にC#やってたぼくにはもしかするとrubyよりGoの方が合っているのでは！？
rubyやってて動的型付けで解せぬ部分もあったしな〜。
静的型付け言語万歳！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399745/598eb385-25ea-a8bf-435b-d59a94e4c0d9.png)
変数のところ指すと型わかるっぽい。
C言語が元になってるならシステム系でも使えんのかな？
てかこれMac必要なくなるのでは？