Docker上のCentOSにgoa導入
Goをインストールしてみるよ https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz
cd /usr/local/src wget https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz tar -C /usr/local/ -xzf go1.12.4.linux-amd64.tar.gz
- PATH設定
vi ~/.bashrc
export GOROOT=/usr/local/go
export GOPATH=/go
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
source ~/.bashrc
go version
- glideをインストールする
curl https://glide.sh/get | sh
$GOPAH/bin の下にインストールされる
- goaをインストールする
アプリ用のディレクトリを作成する
mkdir -p $GOPATH/src/cellar && cd $GOPATH/src/cellar
- glide.yamlを編集
package: cellar import: - package: github.com/goadesign/goa version: master vcs: git subpackages: - client - design - design/apidsl - dslengine - goagen - middleware - package: golang.org/x/tools subpackages: - go/ast/astutil - package: gopkg.in/yaml.v2
- パッケージをインストールする
yaml に記載したとおりにパッケージがインストールされるって!
glide install -v
vendor ディレクトリ以下に、パッケージがインストールされている
glide.lock ファイルが作成されている
- goagenをビルドする
cd ./vendor/github.com/goadesign/goa/goagen
go build
→cannot find package...のエラー
→yamlにパッケージを追加して glide up する。
Docker for windowsのインストール
そもそもHyper-Vとは・・・ Windows Server 2008以降に搭載されたサーバ仮想化技術
Docker for Windowsダウンロード Docker Desktop for Mac and Windows | Docker Download for Windows ※IDもってたのでログインしてダウンロード
インストール exe起動 Linuxコンテナを使う、にチェックしてインストール開始 デスクトップのショートカットから起動 お。起動時にエラー
Hardware assisted virtualization and data execution protection must be enabled in the BIOS
BIOSの設定変更が必要、と・・。
タスクマネージャで仮想化確認→「有効」になってる。はて。
いったんHyper-Vを無効化して再起動。
Docker起動→当然起動しない
もういっかいHyper-Vを有効化して再起動
Docker起動。なんか起動した。
Dockerログイン
Windows Power Shell で docker run hello-world →Hello from Docker! と表示された。OKぽい
docker ps →なにも表示されない。コンテナ作ってないので当然。
srcディレクトリ mkdir -p ~/src/centos7-go →{ユーザディレクトリ}/src/centos7-go
Dockerコンテナ起動
docker run --privileged -it -d -v ~/src/centos7-go:/go -h go -p 8000:80 --name centos7-go centos:7 /sbin/init
あら。ドライブのシェア設定ができてなかった。 Dockerタスクアイコン右クリック→Setting→SharedDriveでCドライブにチェック、Apply →Firewallでシェア設定できないとのこと。Nortonのファイアウォールがじゃましてるかな?
- ファイアウォールの設定
ローカルセキュリティポリシー 「ネットワークリストマネージャーポリシー」の「識別されていないネットワーク」を開く 場所の種類を未構成からプライベートに変更 ノートンの設定>ファイアウォールの一般設定タブからデバイスの信頼の設定を開きます 追加するから適当な名前でIPアドレス「10.0.75.0」「10.0.75.1」の2つのデバイスを追加 →PC再起動 →再起動後、Share設定できた。
もういっかい
docker run --privileged -it -d -v ~/src/centos7-go:/go -h go -p 8000:80 --name centos7-go centos:7 /sbin/init
docker ps →CentOSのコンテナが動いていることを確認。
Dockerだよね
ちょっとまって、いろいろ手を出す前にDockerおさえよう
いっかい挫折してるからね
Go言語の勉強をはじめる
- 入門サイト
Go言語を学習してみよう(2):HelloWorldを見ていく - Qiita
このへんみながらさわってみる。
なんか、一見優しいんだけど、暗黙的なことが多くてへたすると品質グダグダになりそう・・・。
パッケージのメンバ(変数、関数)名の先頭が 大文字→public、小文字→private みたいなの。 おばちゃんは明示的に「public!!!」って書きたくなるなあ。
Go言語はオブジェクト指向プログラミング言語ではありませんが、 構造体とそのメソッドを用いることである程度オブジェクト指向「らしく」プログラミングを行うことができます。
ふむふむ。
インタフェースの実装に明示的な宣言が必要なJavaやC#と違い、 Go言語ではインタフェースが必要とするメソッドをすべて実装した時点で、自動的にそのインタフェースを実装したとみなされます。 このような、振る舞いから型を決める仕組みはダックタイピングと呼ばれ、(仕様は多少違いますが)Ruby等の言語でも採用されています。
配列とスライス。長さを指定した場合は「配列」、指定しない場合は「スライス」で、 メモリの使い方が違う、と。(スライスは値自体ではなく、要素への参照をもつ。)
カジュアルなだけにPGの技術力に品質が左右されそう。
あとはGCが気になるけど
これ後で読んでおこう
いま興味があることのメモ
Golang APIサーバを立てる機会があればGoでやってみたい。
TypeScript やってみたい。次の案件で導入してみよう
CI(継続的インテグレーション) 小さい案件だとなかなかここまでやらないけど、予算のゆるす範囲でできるだけ整備していきたいと思う。
仕事を作ること いままで(今も)流れてくるままに仕事をこなしているけど、 小さいものでもいいから自分で仕事を作り出せるようになりたい。 まったく未知の分野だけど、なにかきっかけを探したい。