誰にも見えないブログ

雑なメモ。まとまってない文章等

第30回横浜Go読書会に参加

2019/08/24 横浜go勉強会

改訂2版 みんなのGo言語

改訂2版 みんなのGo言語

冒頭からp29「積極的に defer を使う」まで読んだ。

  • 後半ちょっと集中力が切れてメモが取れていません。

  • 右上のgopherくんがパラパラ漫画になってる

前書きなど

  • 最近ではGo Moduleが重要
  • GoはC言語またはLL言語(Ruby/Perl/Python)のユーザーに強くお勧め。
  • 本書で文法の紹介はしない
    • Go routineの話がないのは寂しい

1.1開発環境の構築

  • godoc標準で入っているのか?
  • GOPATH以下の/bin/をPATHに通す
    • go getでインストールモジュールと開発するモジュールの場所を帰るのに便利 
  • go getで外部パッケージをインストール
    • CPANRubyGemsのように中央サーバーを持たない
    • URLをそのまま指定する
    • 例:go get github.com/motemen/gore/cmd/gore
    • Modulesが有効な場合は$GOPATH/srcではなく$GOPATH/pkg/modの下に展開される
  • goのrepl gore
    • 今までの実行をmain部に入れて実行している?
    • time nowなどのあたいは毎度変わる
  • ghqでプロジェクトを一元管理
  • pecoでリポジトリ間の移動
    • ghqに入れたディレクトリにpecoで簡単に移動できる(Ctri + ])
    • 使ってる人はあまりいない?
  • go製ツールはbrewだけでなくgo getでも取得できる
    • ただしGoの環境が必要。
    • 問答無用でmasterブランチの最新コミットが取得される?
    • github releaseからコードを取得するためのghgというツールもある。
  • Goの実行環境整備が他の言語と衝突することは少ない?
  • ghqで裏のフォルダ管理などを上手いことやってくれるのんで初心者向けではある。

    • go getではインストールするディレクトリを

      1.2エディタと開発環境

  • vim + vim-go(プラグイン)

    • https://github.com/fatih/vim-go
    • 横浜Goの参加者はこれの利用者が多いようだ
  • Emacs
  • GoLand
  • Visual Studio Code
    • バージョンが上がって壊れた時などに一時的にgolandを使うことがある。
  • デフォルトで同行されていないが公式が作っているツール群
  • goではgofmtでコードスタイルが強制される
    • 無駄な議論の排除
  • goimports
    • importの自動削除・挿入
    • 結構importsしてくくれないことがある
      • 自社製のパッケージなどインポートしてくれないことがあるらしい。
  • Lint
    • golit:Goらしくないソースに警告
      • -min_confidenceオプションで検査の厳しさを調整できる
    • govet:バグの原因になりそうなものを警告
  • go doc
    • -srcオプションでソースが見れる
    • godoc
      • 昔はスタンダードライブラリと自分が作ったパッケージが混ざって一覧表示されていたので使いにくかった
      • 今は別れて一覧化されている
  • gopls golspの名前盛り上がってる

1.3 Goをはじめる

  • 教育リソース:Atour of go

    • https://tour.golang.org
  • パッケージ分割

    • 他の言語と違ってgoでは クラス定義の階層と名前空間が対応してない
  • サブパッケージのインポート
  • 依存管理
  • Modules(Go1.13)
    • go modサブコマンド
    • 依存モジュールの抽出・自動更新のための機能?
  • build
    • makeを使うらしい(以外)

1.4Go らしいコードを書く

  • Effective Go:https://golang.org/doc/effective_go.html
  • panicは大域脱出できるか、本当に例外的な時しか使わないので基本使わない。
  • Goのregexpパッケージは遅い
    • 最悪時間を緩和するために平均時間を犠牲にしている?
  • 正規表現遅いけど結構使う
  • SyncMapがあるからそれを使おう。
  • 継承より移譲を選ぶ

  • OS間の違い

    • Linuxでは動くがWindowsでは動かない種類のファイル操作がある。
      • Closeする前にrename,removeする操作など

次回は「積極的にUTF-8を扱う」から