Goを始めてみたンGo

# タイトルは無視してやってください。
会社の方針でGoでやっていく事になりました。
ここしばらくサボっていましたが、今までもcloud9で色々試してみてたんで、今回も試してみたいと思います。

## goの導入・・・しようとしたが
ワークスペースを作る所とかは省略。
Goのワークスペースは特にテンプレートが無いようなので、Emptyを選んでいます。

```bash
$ go version
go version go1.7.3 linux/amd64
```
自分の環境で試してみたところ、いきなり入っていました・・・
少し前に他のワークスペースでgoを入れた事があったのですが、ひょっとしたらその設定などが残ってるのかもしれません。

## 改めてgoの導入

以前の記憶を頼りに、とりあえずどのように導入していったか？を書いておきます。

まずは、aptのレポジトリなどの情報を更新。

```bash:
$ sudo apt-get update
...
Reading package lists... Done
W: Size of file /var/lib/apt/lists/toolbelt.heroku.com_ubuntu_._Packages.gz is not what the server reported 721 725
```
何か出てますね。
まあ、とりあえず今のところHerokuは関係無いので放置。

次にGo関係がパッケージに存在しないか？調べてみます。

```bash
$ apt-cache search golang
dh-golang - debhelper add-on for packaging software written in Go (golang)
golang - Go programming language compiler - metapackage
...
```
他、色々出ているようですが、golangがメタパッケージとのことなので、とりあえずgolangを入れれば目的に叶うかな？

```bash
$ sudo apt-get install golang
...
$ which go
/usr/bin/go
$ env | grep GO
GOROOT=/opt/go
GOPATH=/home/ubuntu/workspace
$ mkdir bin pkg src
```
go用にバイナリ、パッケージ、ソース用ディレクトリを準備して、これでとりあえず環境構築終わり。

```bash
$ go version
go version go1.x.x linux/amd64
```
バージョンが低かった場合は、一旦標準のパッケージをパージして、新たに新しめのパッケージを導入

```bash
# sudo apt-get purge golangとしたら、依存関係のパッケージ毎削除するのにこちらを使えとかなんとか出た。
$ sudo apt-get autoremove golang
$ apt-cache search golang
...
golang-1.6 - Go programming language compiler - metapackage
golang-1.6-doc - Go programming language - documentation
golang-1.6-go - Go programming language compiler, linker, compiled stdlib
golang-1.6-src - Go programming language - source files
...
$ sudo apt-get install golang-1.6
```

現在の環境に、ワークスペース/binにインストールされたバイナリが使えるようにパスを追加

```bash
$ vi ~/.profile
...

# .profileの内容に、下の3行の内容があったりするので、これをちょっとコピーして
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
# こんなかんじに、現在のワークスペースのbinディレクトリを追加する
if [ -d "$HOME/workspace/bin" ] ; then
    PATH="$HOME/workspace/bin:$PATH"
fi
```

終了したら、いったん現在の環境に、環境変数などを反映させる。

```bash
$ source ~/.profile
```

## Hello, world!

goは言語使用自体にエコシステム（パッケージの管理など）を含めてしまっているのか、ディレクトリ構造自体が何か不自由な様子。
とりあえず、先ほど作ってあったsrcディレクトリ上にソースを用意する。

```go:src/github.com/${user_name}/hello/hello.go
package main

import "fmt"

func main() {
	fmt.Println("Hello, world!\n")
}
```
```bash
$ go run src/github.com/${user_name}/hello/hello.go
Hello, world!
```

パスのgitHub.comは、ソースをgitHub.comで管理するので、こんなかんじ。
${user_name}は、ユーザ名。
単純なプロジェクトの場合にはそんな面倒な事しないでも動くが、外部パッケージを使う時に探す場所が分からなくなるのでおかしくなるっぽい。

## Echoの導入

何か、フレームワークを導入・・・
[Go の echo ってWebサーバーでサクッと REST しちゃう](http://qiita.com/keika299/items/62e806ae42828bb3567a)を参考にサクッと。

```bash
$ go get -v github.com/labstack/echo
$ go get -v github.com/dgrijalva/jwt-go
```
getの後の-vを入れないと全く何も表示しないので正しく終了しているのか不安になる。。。
後はあちらのページの通りに・・・するとページが見つからない？！

### cloud9に合わせる
いつもなら、上のRunボタンを押すと出てくるURLにアクセスすれば表示されるのですが出てこない・・・
これは、cloud9の環境が原因かな？

通常なら、どのような設定になるのか？を調べる為に、/etcを探るとこんなのが。

```bash:/etc/apache2/sites-available/001-cloud9.conf
<VirtualHost *:8080>    DocumentRoot /home/ubuntu/workspace
    ServerName https://${C9_HOSTNAME}:443
    LogLevel info
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    <Directory /home/ubuntu/workspace>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

ServerName https://${C9_HOSTNAME}
```
ああ、これだな・・・サンプルのport番号を8080にしてアクセスして動作を確認できました。

## Fragmentaの導入・・・しようとしたが。

この後、CMSの[Fragmenta](https://fragmenta.eu)を導入して遊んでみる計画でしたが・・・力尽きました。
また今度にでも別ページなりこのページなりで試してみようかと思います。