websocketのバージョンが違うって怒られた助けて

gorilla/websocketを使ってgoでwebsocket

今回はgithub.com/gorilla/websocketパッケージを使って、簡単なwebsocketをつかったgoプログラムを書いてみようと思います

まず、github.com/gorilla/websocketのドキュメントのoverViewを頼りにそれっぽいものを書いてみました

package main

import (
    "fmt"
    "log"
    "net/http"
    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

func handler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        fmt.Println("Bad request")
        return
    }
    fmt.Println(conn)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

main関数でhttpサーバーを立ててあげて、handler関数でupdateしてwebsocketで双方向通信ができるようになった、、、はずです しかし、これで走らせてみるとこんな結果が

2015/05/20 06:45:13 websocket: version != 13

どういうこっちゃねん、、、websocketのバージョンが13じゃないらしい https://github.com/gorilla/websocket/blob/master/server.go#L97 ブラウザ側がいけないんですかね。でも公式のサンプル走らせるとこんなことはなかったんだよなぁ、、、なんで

golangで特定のurlをクロールしてそのurl以下のurlを出力する

画像クローラーの制作の一環でタイトルのようなことをすることがあったんで、その知見を載せておきます。とりあえず、以下のようにやりました。

gist32afb93e0108239e8b86

とりあえず、特定のurl以下のurlの数、(ここではresultsの要素数)まで関数を回し続ける、といったような感じです、う~ん、なんかもっといい方法があるような、、、って感じです。

L:
    for _, urrrl := range urls {
        urrl := urrrl.String()
        for e := 0; e < len(stock); e++ {
            if urrl == stock[e] {
                continue L
            }
        }

同じurlにもう一度リクエストを投げたりなんてすることがないように、一度呼んだurlはスライスに格納して、関数内にマッチするかどうかの条件節を置いて、マッチする、即ち既に呼んだurlならばリストを使ってもう一度その関数をまわすようにしました。

   if !strings.Contains(urrl, base) {
            continue L
        }

また特定のurl以下を呼ばなければならないので、文字列に特定のurlを含むかどうかを条件として、含まないようであれば、またリストを使って関数を回してあげることにしました。

以上のような感じでやってはみたのですが、量が多すぎるため、クロールしきれないです、たぶん書き方によってはどうにかなるとはおもうのですが、、、助言などしてもらえれば助かります。

ブログの名前を変えました

ブログの名前を変えました。 今の自分のレベルは相当低いので、分からないことのレベルも相当低いです。だからそんなのを一つ一つきちんと解決してしっかり身につけて、後々、ああ、これは黒歴史だなwって笑えるように、という意味で†KURO-REKISHI†と名付けました。 これからもよろしくお願いします。

go言語のflagについて自分なりにまとめてみた

go弱のななやんです、今回はflagについてまとめてみようかなと思います。

まずflagとはなにかという話です、

端的にいうとflagとは、

goで簡単にコマンドオプションを使えるパッケージとのことです。

実際には下記のように使います。

flag.go

$ run main.go

$apple

 banana

chocorate

となりますが、flagをつかっているので

$ run main.go -a=hogehogehoge

$hogehogehoge

banana

chocorate

とすることができます!

やったね!

羊飼い系女子について

 

皆様は羊飼い系女子というのをご存知だろうか。

羊飼い系女子というのはまるで羊飼いの様に純白で汚れのない少女のことをいう。

まぁ最近私が勝手に読んでいるだけであるが。

 

まぁ今回はそんな羊飼い系女子の話。

そんな羊飼い系の代表であるのがノーラ・アレントという『狼と香辛料』という小説の登場人物だ。

f:id:nanayan00:20140520205730j:plain

そう、彼女は正真正銘の羊飼いである。

 

だが私が言いたいのはそういう事ではない。

彼女は服の仕立て屋という夢があり、羊飼いとして旅をし、真摯に働くのだが、その羊飼いとしての女性であるにもかかわらずのあまりの腕利きの良さから、教会から教会から異教の技を使っているのではないかと疑われ、苛烈な待遇を押し付けられ、その事に、口には出さないものの小さからぬ不満を持っていたのだ。

 

わかっていただけるだろうか。

 

彼女は屈強な意思で困難な状況をも乗り越えようと努力をしているのだ。

 

この事からわたしは、羊飼い系女子とは

 

実に不憫であるが、それ故に強い精神力を持ち、色恋等無関心で、ただただ自分の夢のためタスクをこなす女子

と、定義した。

羊飼いであるが故に貧相で、しかしそれに負けず、自分を突き通すのだ。

 

実に支えたくなる。

 

 

 

 

 

 

しかし、そのような少女はこの世にはいない、、、

なので私はこれから

高校から色恋沙汰抜かす奴は斬刑に処していくスタイルでやっていく所存である。

 

今からgolangを始める方へ

これでもかというぐらいに簡素化されて、実にやりやすいgolang、楽しいですね。

僕も昨日やり始めたのですが、実にいい。はまります。

そんなgolangに始めるのに見ておくと嬉しい記事、まとめておきます。

 

A Tour of Go

もともとあった英語のページを翻訳してあるいい感じなサイトです。go playgroundというものをつかってweb上でコードを走らせる事が出来ます。環境構築が面倒な方はここから進めるのが一番のおすすめです。

 

golang.jp 

goの日本語情報サイトです。日本語チュートリアルがあります、ただ少々見にくい気がします。

 

初めてのgolang by sinmetal

@sinmetalさんによるgolangの初心者向けスライドです。goの開発環境についてまとめてあるのが嬉しいです。

 

Yoshifumi Yamaguchi, Technical account manager at Google | SlideShare

Yoshifumi Yamaguchiさんによるスライド集です。大半がgoでgoに対する熱意を感じます。また中身もすごくわかりやすいので、最初はここを見るといいかも。

 

Golang JP - コミュニティ - Google+

golangのコミュニティです。質問はここにすると良いかと思います

 

ぼくはA Tour of Goを今進めている感じなのですが、中々いいですね。72ステップやるだけでマスター出来るのが強みです。僕ははまりにはまって4時間で半分進めました。楽しい。

最後にgoのアイツを2分で書いてみました。

f:id:nanayan00:20140407181301p:plain

 

酷い。