- HashMapのストレージがメモリじゃなくてファイルなだけなやつ
- Go
とりあえず動くレベルの物体ができた github.com
とりあえず動くレベルの物体ができた github.com
とりあえずDockerってなあに?のところまで読んだ。(p70)
Dockerコンテナのテンプレ 環境に色々準備の定義をまとめたやつ的な 「centosのイメージにapacheとwebアプリ入れてwebアプリ起動するぞ」ここまでをまとめたやつみたいな
Dockerイメージを置いとけるリポジトリ CLIでイメージをpullしたりpushしたりできる Dockerレジストリの一つ
Dockerイメージから作成された実際の仮想環境
$ echo '{"version":1.0}' | docker container run -i --rm gihyodocker/jq:1.5 '.version'
containerで起動したjqが入力のechoを受け取る
ローカルの特定のポートをdockerコンテナで開いてるポートにつなぐ
コンテナの標準出力を表示する
コンテナ内でコマンド実行
docker containr exec -it sh
で、コンテナに入って直接操作できる。
コンテナ間/コンテナ・ホスト間でファイルをコピーできる
不要なコンテナを破棄
不要なイメージを破棄
使ってないコンテナ/イメージ/ボリューム/ネットワークを削除
// TODO ボリュームとネットワークてなんだろ
コンテナ内のシステムリソース確認
なんか自分がなんの勉強してるのかがとっちらかってるのとふわっとやめてるやつが結構あるので整理がてらまとめてみる。
Goのチュートリアル的なやつ。
同僚がGoやってて楽しそうだったのでやってみようと思ってやってみた。
A Tour of Goが終わった時点で、もうちょっと包括的に説明してるチュートリアルをやりたいと思ったので見たUdemyの動画。
Go: The Complete Developer's Guide (Golang) | Udemy
現時点でセクション40まで見た。実際の開発を通じて各機能を使ってみよう的な感じ。
1/4くらいみた。会社の昼休みにだらだら読んでる。来月中に読み終わりたい。
多分先に読んどいた方が開発効率がはっきりと上がる気がしていいだろうなと思って読んでる。だいたい想定通りな感じ。
ひたすらイングリッシュベルでDME Teensをやり続けている。今月は76レッスン=31時間受講した。 効果のほどがいまいちわからんけどTOEICの点数は上がっているのでよしとする。iKnowが停滞しているのでやりたいがいつやろうかなー。会社の昼休みにやってたんだけどIntellJのハンズオン読み始めてから全然やらなくなってしまった。
俺が今まで得てきたプログラミングにおける知見はほとんどトランザクションスクリプトをいかに整理してまとめるか、のところなんだなというのを実感した。 コンピューターサイエンス的な知見を得ていく必要がある。道筋がわからない問題があるがとりあえずGoならわかるシステムプログラミングをやりきる。
9/10追記 コピーはされるが、sliceはarrayへのポインタを持っていて、コピーしてもそのポインタは変わらないので参照先にarrayは同じ、と言う話だった
レシーバは明示的にポインタを渡さない限り値のコピーが渡されると思っていたがそういうことでもないようだ。
package main import ( "fmt" ) type TestSlice []string func (t TestSlice) printPointer1(){ fmt.Printf("pointer in main:%p\n", t) // 同じポインタ } func (t *TestSlice) printPointer2(){ fmt.Printf("pointer in main:%p\n", *t) // 同じポインタ fmt.Printf("pointer in main:%p\n", t) // 違うポインタ ts := *t ts[0] = "YES" // *t[0] = "YES" // invalid operation: t[0] (type *TestSlice does not support indexing) } func main() { t := TestSlice([]string{"one", "two", "three"}) fmt.Printf("pointer in main:%p\n", t) // 同じポインタ t.printPointer1() t.printPointer2() }
レシーバにSliceそのものを指定した場合、メソッドの中で参照されるレシーバのポインタは呼び出し元と同様となった。(=値のコピーではない) また、Sliceのポインタで値を受ける場合、その値はポインタのポインタのような形になるようだった。 この際*ts[0]を参照できないのは型の情報がないからという理解でいいのだろうか。いまいちわからない。
Frequently Asked Questions (FAQ) - The Go Programming Language とりあえずSliceやMapのレシーバはポインタ渡しのような動きをするらしい。 レシーバだからどうこうではなく引数でも同じ動きになる。
package main import ( "fmt" ) type TestSlice []string func test(t TestSlice) { fmt.Printf("pointer in main:%p\n", t) // 同じポインタ } func main() { t := TestSlice([]string{"one", "two", "three"}) fmt.Printf("pointer in main:%p\n", t) // 同じポインタ test(t) }
MapやSliceはポインタを持った構造体のようなもので、言語仕様としてその「内部で持っているポインタ」をSliceのポインタとして使う、みたいな感じになっているんだろうか。 いまいち理解できていない気がする。
インラインコメントがあるとコードを大枠で見れない
とりあえずブックマークレットにした
javascript:document.querySelectorAll(".inline-comments").forEach(function(item){item.setAttribute("style", "display:none")})