LoginSignup
4
7

More than 3 years have passed since last update.

Goを真面目に勉強する〜1.Goについて知っておく事〜

Last updated at Posted at 2019-11-25

はじめに

Goをはじめて1年半。アウトプットが進まない私が、専門家の@tenntennさんから受けたマンツーマンレッスンの内容をまとめて、Goのスキルアップを目指します。Goの基礎から丁寧に学んでいきます。
記事のまとめは以下の通りで順次作成していきます。
今回は「1.Goについて知っておく事」になります。

シリーズの一覧

  1. Goについて知っておく事(今回)
  2. 基本構文
  3. 関数と型
  4. パッケージとスコープ

本記事の内容

今回学ぶ内容は以下の通りです。
新しい言語を学習する上で、その言語が作られた背景を知っている人と知らない人では成長スピードが変わってくると教えてもらったので、今回はGoの特徴を中心に、Goが開発された背景や勉強方法をまとめます。

Goが開発された背景

Google内の課題を解決するために開発された

参考:https://talks.golang.org/2012/splash.article

  • 開発速度の低下
    • 開発規模が大きくなるに連れ、現行の言語(C++など)による開発に限界が見え始めた。
    • Goで循環参照が禁止されているのは複雑な依存関係を生み出さない仕組みだろうか。
  • マルチコア時代の開発
    • プロセッサの進化によりプロセッサ数が増え、並行性とスケーラビリティが重要になってきた。
    • ゴールーチンやチャネルによりこれらを解決しようとしている。
    • 並行プログラミングとともにガーベッジコレクタも同時に採用している。
  • 軽量プログラム言語の盛り上がり
    • Python,Rubyをはじめとするスクリプト言語のようにプログラミングの容易性が求められていた。

Goの特徴

豊富な標準ライブラリ

ファイル操作や書式に関するライブラリの他、最近作られた言語だけにWeb系のライブラリも充実しています。また、GitHubにはサードパーティのライブラリも豊富に用意されているため、簡単にそれらを利用することもできます。

ライブラリ名 使いどころ
fmt 書式に関する処理など
net/http HTTPサーバなど
encoding JSON, XML, CSVなど
html/template HTMLテンプレートなど
os, path/filepath ファイル操作など

パッケージを利用するには、利用するパッケージをインポートし、fmt.Printlnのように"パッケージ名.関数"の形で記述します。


  // fmtライブラリをインポートする
  import "fmt"

  func main() {
    // fmtライブラリを利用する
    fmt.Println("Hello world!")
  }

The Go Playground

周辺ツールの充実

開発ツールは標準ツールの他、準標準ツール、サードパーティ製ツールが充実しています。
特にgomftやgoimportsは必ず使うように心がけましょう。

ツール名 使い所
go build ビルドを行うコマンド
go test テストコードの実行
go doc ドキュメント生成
gofmt, goimports コードフォーマッター
golint, go vet コードチェッカー、リンター
gopls LSPの実装

テストコード
xxxx_test.goのように、ファイル名の最後が_test.goのファイルを自動的にテストとしてビルド&実行してくれるツールです。

コードフォーマッター
gofmtにかければフォーマットが統一できるので、複数人で開発するとフォーマットがバラバラになるといった無用なストレスから解放されます。

コードチェッカー
静的コードチェックをしてくれるツールです。ビルドが通っても、実行時エラーが出るようなコードをこのツールで潰すことができます。これも事前にチェックすることで無用なエラーに悩まされる心配がなくなります。


  // %dに対して文字列を与えると、ビルドは通るが実行時エラーになる
  fmt.Printf("%d","hello world!")

./main.go:6:2: Printf format %d has arg "hello world!" of wrong type string
Go vet exited.

The Go Playground

シングルバイナリとクロスコンパイル

Goは実行ファイルをシングルバイナリで生成するため、サーバやDocker上に実行ファイルを置くだけでサービスを実行することができます。また、クロスコンパイルに対応しているため、作ったサービスを色々な環境(Linux,Windows,Androidなど)に提供できることも特徴です。

Goを勉強するには

書籍を読む

ドキュメントを読む

コミュニティに参加する

  • Gophers Slack
    • 世界中のGopher(Goのユーザ)が集まる
  • Umeda.go
    • 大阪近辺のプログラミング言語 Go ユーザーコミュニティ

最後に

今回はGoの特徴を中心にまとめました。次回はコーディングの基本編を書いていこうと思います。

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7