22
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Golangを初めて学んだので基本情報をまとめてみた

Last updated at Posted at 2019-03-19

フレームワークの評価等は個人の所感になります。

特徴

なぜGo言語 (golang) はよい言語なのか・Goでプログラムを書くべき理由
http://www.yunabe.jp/docs/why_golang_is_good.html

  • Google製(2009年)。C言語、utf8、memcachedの開発者同士が共同開発
  • 高パフォーマンス
  • シンプルで厳格な文法
    • 表現のブレが無いように複数の書き方を極力許さない
      • while無しでforで表現
      • 三項演算子無し
    • 不具合が起きそうな記述は許さない
      • コンパイル時に以下はすべてエラーとなる
        • 使われていない変数
        • 値を代入したのに読み出されていない変数
        • 読み込んだだけで使っていない外部ライブラリ
  • 公式の開発支援ツールが充実
    • フォーマッタ
      • 書式が強制される。変更不可だが書式で悩む必要が無い。
        • go fmt
          • フォーマットのみ
        • go import
          • フォーマット + 不足ライブラリ補完。gofmtの上位互換。
    • ユニットテスト
      • go test
    • 静的解析
      • golint, go vet
    • ドキュメント確認
      • godoc
  • 並列処理が簡単に書ける(goroutine/channel)
  • シングルバイナリでどこでも動作する
    • クロスコンパイルで各OS、CPUアーキテクチャ向けに単一の実行ファイルが作れる
    • デプロイは対象に実行ファイルを置くだけ、実行環境の用意は不要

  Linux: GOOS=linux GOARCH=amd64 go build main.go
  Windows: GOOS=windows GOARCH=amd64 go build main.go
  MAC: GOOS=darwin GOARCH=amd64 go build main.go
  • 文法に癖がある
    • オブジェクトでなく構造体

type Person struct{ Name string }
// Person 型に対してメソッドを定義する
func (p Person) Greet(msg string) {
    fmt.Printf("%s, I'm %s.\n", msg, p.Name)
}
func main() {
    p := Person{Name: "Taro"} // 値型の変数を用意する
    p.Greet("Hi")             //=> Hi, I'm Taro.
}
  • 返り値を複数持てる
  • 例外構文が無い。いわゆるtry-catch-finallyは以下のように表す

  package main
  import (
      "log"
      "os"
  )
  func main() {
      f, err := os.Open("filename.ext")
      if err != nil {
          log.Fatal(err)
      }
      defer f.Close()
  }

ユースケース

開発環境導入手順

前提

  • 以下の環境変数指定が必須
    • GOROOT
      • GOのシステムパス
      • 通常は/usr/local/goが多い
      • 「go env GOROOT」で確認可能
    • GOPATH
      • GO開発用の作業データパス
      • 通常は$HOME/devや$HOME/goが多いらしい
      • GOROOTと同じパスに出来ない
      • 初期設定時にPATH=$PATH:GOPATH/binを通す必要あり
        • export PATH=$PATH:$(go env GOPATH)/bin

導入手順

Linux環境で動かす前提。
バージョンは以下サイト見てその時の最新版を使うと良いと思われる。wgetの対象は適宜読み替え


  cd /usr/local/src
  wget https://dl.google.com/go/go1.11.5.linux-amd64.tar.gz
  tar zxvf go1.11.5.linux-amd64.tar.gz
  mv go /usr/local
  export GOROOT=/usr/local/go
  export GOPATH=$HOME/go
  export GOBIN=$GOPATH/bin
  export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

フレームワーク

Webフレームワークは若干乱立ぎみと思われるが、
用途上 比較的軽量シンプルなものが好まれる傾向あり(echo,Gin等)
フルスタックF/WならJavaのPlayFrameworkを参考にしたRevel等があるが、
単純にドキュメント等も多いLL系のフレームワークを選ぶ方が良さそう。
ORMはGORMがメインで使われている印象

学習方法

他言語を触った事がある人は、TourOfGoチュートリアルを一通りやれば、
基礎文法や「他言語で言うxxは、Goで言うxxだ」というざっくりイメージはつかめそうです。
学習本は実践Tips本や、チュートリアル系の手を動かせる本が良さそうです。

22
16
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
22
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?