LoginSignup
51
54

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-11

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

で作った。

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マッピング

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されなくて悩んでた・・・

使い勝手

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で書かれたフレームワークなり、ライブラリなどにコミットしてみて勉強しならが学ぼうと思う。

51
54
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
51
54