Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go初心者が躓いたところ ~ Difficulty of Go for Beginners ~

kuwako
March 26, 2019

Go初心者が躓いたところ ~ Difficulty of Go for Beginners ~

Difficulty of Go for Beginners

kuwako

March 26, 2019
Tweet

More Decks by kuwako

Other Decks in Programming

Transcript

  1. 自己紹介 アカウント • github: kuwako / twitter: @MasakiKuwako 経歴 •

    WEBメディアの会社に新卒で入って 4年 ◦ PHP/JS/AndroidJava/Scala • アドテクの会社で1年 ◦ PHP/JS/Scala • 2018/12 メルカリ入社 ◦ カスタマーサポート向けのツールを作ってます ◦ PHP/JS/Go
  2. 自己紹介 アカウント • github: kuwako / twitter: @MasakiKuwako 経歴 •

    WEBメディアの会社に新卒で入って 4年 ◦ PHP/JS/AndroidJava/Scala • アドテクの会社で1年 ◦ PHP/JS/Scala • 2018/12 メルカリ入社 ◦ カスタマーサポート向けのツールを作ってます ◦ PHP/JS/Go ◦ Go歴は1ヶ月程度です。ご容赦ください。
  3. agenda 1. ポインタの宣言とデリファレンス 2. 構造体の初期化 3. デバッグ 4. package名 5.

    unexportなmethodのテスト 6. シンタックスシュガーによる型の解釈の変換
  4. package名 model - item.go => package model - user.go =>

    package model - item_test.go => package model_test - user_test.go => package model_test 同じディレクトリには同じpackage名しか使えない ※ _test.go は除く(testも{package名}_testしか使えない) golang.org より意訳 Goの規約では、パッケージ名はインポートパスの最後 の要素であるべきです。 例えば、"crypto/rot13"であればrot13と名付けられるべ きです。 ただし、実行可能コマンドは常に package mainでなけ ればなりません。
  5. 2. 値がポインタレシーバのメソッドをもっている場合 Animal does not implement Creature (echo method has

    pointer receiver) と言われる => interfaceを通すと、値型 -> ポインタの型の解釈の変換ができない
  6. interfaceの挙動について Why value stored in an interface is not addressable

    in Golang When an interface value is created, the value that is wrapped in the interface is copied. It is therefore not possible to take its address, and even if you did, using a pointer to the interface value would have unexpected effects (ie. unable to alter the original copied value). インターフェース値が作成されると、そのインターフェースにラップされている値がコピーされます。 そのため、 そのアドレスを取得することはできません。たとえ行ったとしても、インターフェース値へのポインターを使用す ると、予期しない結果が生じる可能性があります(つまり、元のコピーされた値を変更できません)。 interface値を使うとき、値がコピーされて別のメモリ領域に格納される => 実体からポインタへの型の解釈の変換は不可能
  7. 検証してみた (値の場合) 値 x 値レシーバの場合 interfaceに保存するときに値がコピーされて別のメモ リ領域に保存されるので、 interface値にするとポイン タが変わっている =>

    値から元のポインタへの解釈の変換ができない ==> (推測) echo()がポインタレシーバだった場合はメ ソッド側からは渡された変数が echo()を実装していな いように見えるのでAnimal does not implement Creature と言われた