Go 言語はじめました

三日坊主にならないように宣言しておきます(何

今まで自作のかんたんなスクリプトRuby で書いていたのですが、
他の言語をやっておかないとという衝動に駆られました。

一番の理由は、RubyRoR ばっかりで、他で使われている場面を
あまり見ないことでしょうか(ぱっと思いつくのは Mac の Homebrew くらい?)。

Ruby の比較対象といえば Python なのですが、こっちを触る前に
最近人気になってきている Go を始めています。
最近のホットは静的型付けらしいです。最近と言いつつも2年くらい前なのですでに
時代に取り遅れてる感はあります。

さて静的型付け言語ですが、特に Go は暗黙の型変換を許していないお陰で死ぬほど
苦労しています。例えば時間を待つ場合。

package main

import (
    "fmt"
    "time"
)


func main() {
    for {
        t := time.Now()
        mils := time.Second -
            t.Nanosecond()*time.Nanosecond
        time.Sleep(mils * time.Nanosecond)

        /* 何か処理 */
    }
}

これだとコンパイルが通りません。理由は mils という変数を作っているところで、
t.Nanosecond() と time.Nanosecond の型が違うからです (もともとはどちらも数値なのですが)。
ここは 「time.Duration(t.Nanosecond())*time.Nanosecond」とします。
慣れてないからか調べるのも地味に大変で今のところは以下のようにやってます。


  • 何らかの方法で触ろうとしている型を調べる
    • コンパイルエラーの内容を読み解く
    • reflect.TypeOf() を使って実際に型を print する
  • 肩を変換する方法を調べる
    • とりあえずキャストしてみる
    • ライブラリのドキュメント or ソースコードを追いかける

(どうやるのが近道なのか。。。)

Ruby なら標準ライブラリやよくメンテナンスされたライブラリなら
よくやる四則演算は何も考えなくてもやってくれるのですが。。。

10年前の抱負


rubyやってます - hijouguchiのブログ


約10年前に ruby 始めるってブログに書いてます。
当時は他にも言語触りたいって書いてました。
現状はどうなったかというと、、、

  • C よく使う
  • C++ あまり使わない
  • C# 全く使わない
  • Cocoa Mac/iPhone のアプリケーション自体作らない
  • java 全く使わない
  • Ruby よく使う

ということで当時あげていた言語のうち、結局2種類しか使いませんでした。
今思うと使ってない言語は、自分の用途では使う場面がない or 他の言語で代用できる
ので覚えなくても別に良かったのかなと思っています(逃げ
ここにあげてないもので使っているものは Verilog/SystemVerilog くらいでしょうか。
あとは一瞬 javascript も覚えようとしましたね prototype.jsjQuery 全盛期の頃に。

直近の覚えたい言語
Go 特に理由がなければメインをこれにしたい
Python Go で書くのめんどくさいときにこっちを使う
Rust かじっておきたいくらい
javascript いい加減 Node.js を覚えておきたい
SystemVerilog 仕事で使ってるが、細かいところまで理解できていない。UVM複雑すぎて投げたい