post Image
iOSエンジニアがGoを使ってみての所感

Goを使うぞ

理由 is 手伝っている会社で使いそうだから。

何ができるようになればいい?

自分の作業の中にツール化して組み込む

最近欲しいorいい感じだと思っているツール

codicって面白いよねって友人と話していて、CLIのツールとかあるといいかもってなったので作ってみることに。
こんな感じで日本語からcamel,pascalなどのケースを選んで関数名とかをいい感じに作ってくれるサービス
スクリーンショット 2016-01-11 11.24.05.png

APIもある
これをラップしてツール化する、apikeyとかも必要なのでいい感じにラップする。

資料を読む

MacでGo
https://jobs.forkwell.com/contents/20150420-go-lang-report/
https://go-tour-jp.appspot.com/welcome/1
http://t32k.me/mol/log/go-on-heroku/

環境構築
http://qiita.com/heki1224/items/12d960d93e3b5bd1e9af
https://github.com/go-lang-plugin-org/go-lang-idea-plugin/releases/tag/%23740
http://qiita.com/Yuki_312/items/12bdc0017033f383fa9d

Heroku
http://t32k.me/mol/log/go-on-heroku/

わかりやすいgoでweb
http://www.slideshare.net/yasi_life/goweb-16448500

JsonのMapping
http://qiita.com/oahiroaki/items/ff21d9adfb843161d1d8

で作った。

https://github.com/jumbo-in-Jap/Codic_cli

20160112 codic projectに追加してもらえました〜
https://github.com/codic-project/Codic_cli

$ codic_tool --help
  -casing string
        [camel, pascal, lower_underscore, upper_underscore, hyphen] (default "camel")
  -token string
        initial setting token. (default "default")
$ codic_tool --casing=lower_underscore こんにちは世界
[ こんにちは世界 ]=> HELLO_WORLD

描きやすい

この資料にチュートリル仕立てで他の言語とかの見地からもコーディングについて書かれている。
Cに近いと聞いていたけど、ぜんぜんもっとわかりやすい。気になったとこは以下かな
http://www.slideshare.net/yasi_life/goweb-16448500

Swiftと比較した記事もある
http://repo.tiye.me/swift-is-like-go/

Named return values

返り値を宣言的に定義できる、これはけっこう可読性高いように見える


func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

配列

Mapの定義がちょっとわかりにくい、慣れの問題かな


var (
    emptyArray []string
    emptyDictionary = make(map[interface{}]interface{})
    emptyArrayNoType []interface{}
)

クラス

Classはない、InterfaceなどをふくめJavaなどとは少し異なる概念を持っているように見える
http://www.golangpatterns.info/object-oriented/classes
http://jxck.hatenablog.com/entry/20130325/1364251563


type Shape struct {
    numberOfSides int
}
func (p *Shape) simpleDescription() string {
    return fmt.Sprintf("A shape with %d sides.", p.numberOfSides)
}

クラスもないので継承もない、ただそれをカバーする仕組みもある
http://qiita.com/tenntenn/items/e04441a40aeb9c31dbaf


package main

import "fmt"

type Hoge struct {
    N int
}

type Piyo struct {
    Hoge
    M int
}

func main() {
    piyo := &Piyo{Hoge{1}, 2}
    fmt.Println(piyo.N, piyo.M)
    fmt.Println(piyo.Hoge.N, piyo.M)
}

コマンドライン引数

https://github.com/jumbo-in-Jap/Codic_cli/blob/master/codic_tool.go#L40
コマンドライン引数をいい感じに扱える、デフォルトを入れたりオプションとして弾いたり

    token  := flag.String("token", DEFALUT_TOKEN_STR, "initial setting token.")
    casing := flag.String("casing",DEFALUT_CASING_STR,"[camel, pascal, lower_underscore, upper_underscore, hyphen]")
    flag.Parse()

Jsonマッピング

https://github.com/jumbo-in-Jap/Codic_cli/blob/master/codic_tool.go#L123

APIにリクエストしてjsonを受け取ってクラスにマッピングすることはよくあるが、
これをよしなにやってくれるメソッドがある。

{"result":"success"}

というJsonは


type Response struct {
    Result string
}

というのを定義しておけば

    var data []Response
    body, _ := ioutil.ReadAll(r.Body)
    json.Unmarshal(body, &data)

で勝手にdatasのResultの値に入る。(最初ここdataをdatasって書いててTwitterで指摘してもらった・・・恥かしいorz!感謝!)
これは非常に便利だ、ちょっと感動した。swiftでも欲しい
余談だが最近はSwiftのMappingではObjectMapperというのがあり、Unmarshalほどではないですが綺麗にかけます。
オススメ。
ただResultは頭文字大文字ね、これ大事。ずっとMappingされなくて悩んでた・・・

https://github.com/astaxie/build-web-application-with-golang/blob/master/ja/07.2.md

使い勝手

go getしたりgo installしたりちょっとしたツールを作るのはめちゃ便利だ。
いままでpythonでスクリプトのツールをよく作ってたんだけど、人に使ってもらったりサーバにおいてクーロンにするのとか考えると非常に使い勝手がいい。
バイナリ一個で全部済むのは気持ちがいいぞ!

Web Frameworks

今いろいろ調べているけどGin,Revel,Martinあたりがいいらしい。
RailsっぽやつからSinatra系の軽量なものまでいろいろ有る。
趣味とかでちょっとしたクローラとAPIを作ることがあるんだけど、Ginを見ている感じサクサク作れそう。

SinatraっぽいならそもそもSinatraでよくね?

という発想もあるがRubyより記述がSwiftに近くて描きやすいのでわいはGoで書こうと思う。

結論 is ベリー楽しい

ちょっとしたツールなり、クローラなり、APIなどはGoで書いてもいいかなぁと思った。
学習コストが懸念されていたけど、大してwebに造詣のないアプリエンジニアでも書いててストレスも少なくちょっとしたツールをさくっと作れるので便利だ。
Unmarshalに何より感動した。「jsonを取得して結果をよしなに出力する」というのは非常に楽に作れる。
あとは自分で盛り上がっているGoで書かれたフレームワークなり、ライブラリなどにコミットしてみて勉強しならが学ぼうと思う。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。