由于刚开始学习Golang,所以我整理了一些基础信息
对于框架的评价等是个人的感受。
特征
为什么Go语言(golang)是一种好的编程语言?为什么应该使用Go来编写程序?
http://www.yunabe.jp/docs/why_golang_is_good.html
-
- Google製(2009年)。C言語、utf8、memcachedの開発者同士が共同開発
-
- 高パフォーマンス
バブルソート性能比較で、PHP5.6の82倍、PHP7の32倍
https://liginc.co.jp/284306
素数計算性能比較で、Pythonの80倍、C, Javaとほぼ同速度
シンプルで厳格な文法
表現のブレが無いように複数の書き方を極力許さない
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()
}
应用案例
-
- 得意
バッチやAPI等、速度が必要な内部処理
並列処理
microservice
苦手
Webアプリケーション
(Web系F/Wが乱立しており、他LL(PHP,Ruby,Python..etc)のようにまだデファクトスタンダードというのがなさそう)
使用例
製品
Docker, kubernetes, Packer, Mackerel,
事例
メルカリ・ソウゾウでは どうGoを活用しているのか?
社内ツール(テスト結果からAPIドキュメント自動作成)、プッシュ配信基盤、入稿管理ツール
GunosyのMicroServicesの現状とGoの使い所
管理用APIの大半がGolang、画面系はDjangoやRails
FINAL FANTASY Record Keeperを支えたGolang
マスタデータのフォーマット変換等にGoを活用
インテリジェンス社活用事例
データ連携/集計、アラート、並列処理などバッチ系にGoを活用, Web側はHackを利用
https://career.levtech.jp/hikalab/report/detail/33/
トークノートとGolangと私
WebAPI部分をGoで実装、パフォーマンス改善やMicroService化で活用
引入开发环境步骤
只需要一个选项
为了满足您的要求,我将用中文对以下内容进行释义:
-
- 以下の環境変数指定が必須
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
框架 jià)
网页框架数量众多,但常偏爱使用用途相对轻量简洁的框架(如echo、Gin等)。
如果需要全栈框架,可以考虑参考Java的PlayFramework开发的Revel等,但选择文档等较多的LL系列框架似乎更好。
ORM方面,GORM印象较为主流。
-
- Webフレームワーク
Golang フレームワーク比較
https://qiita.com/yumin/items/5de33b068ead564ebcbf
Go言語Webフレームワークランキング
https://qiita.com/loftkun/items/1a9951d1864bebdc51e1
ORM
Go言語でのORMを色々検討してみた
https://goo.gl/9tvXFN
学习方式
如果有接触过其他编程语言的人,只要完成一遍TourOfGo教程,就能大致掌握基本语法和类似于其他编程语言中的一些概念是如何在Go语言中表达的。推荐的学习资料是实践技巧类的书籍或者可以动手实践的教程类书籍。
-
- 公式
英語: https://golang.org/
日本語訳サイト: http://golang.jp/
基礎文法チュートリアル
Tour Of Go(日本語訳)
https://go-tour-jp.appspot.com/welcome/1
PHPerがGolangを試してみた 前編
http://tech.innovation.co.jp/2017/12/19/P-H-Per-Golang.html
PHPerがGolangを試してみた 後編
http://tech.innovation.co.jp/2018/03/14/golanggolangphperphper.html
実践用Tips
Web
Goコードの書き方
http://golang.jp/code
Effective Go(日本語訳)
http://golang.jp/effective_go
Go 言語(Golang) はまりどころと解決策
https://www.yunabe.jp/docs/golang_pitfall.html
本
みんなのGo言語
言語仕様
http://gihyo.jp/dev/feature/01/go_4beginners
技術選択
2016年資料だけど複数社のライブラリ等の技術選択とその理由がまとまっていて大変参考になります。
https://godgarden.goat.me/3Hf9qTNO
チュートリアル
Whispering Gophers(チャットアプリチュートリアル)
http://whispering-gophers.appspot.com/talk.slide#1
Learn Go with tests(TDDチュートリアル)
https://quii.gitbook.io/learn-go-with-tests/
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発(Udemy動画チュートリアル)
https://www.udemy.com/go-fintech/