Go触ってみた
遅ればせながらGoを触ってみたのでまとめてみる。
題材はとりあえずTSUTAYAさんのWebサイトからDVDレンタル情報をスクレイピング、ということにしてみた。
コードを書くトコロはすんなり行ったんだけど、環境面とかお作法的なところでところどころハマったので、自分メモも兼ねてまとめておく。
まだ触って数時間なので、いろいろ間違えてるところがあるかも。ぜひ教えていただきたいです。
セットアップからHello Worldまで
- OSはUbuntu 14.04
install
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable
$ sudo apt-get update
$ sudo apt-get install golang
環境変数GOPATHをセットする必要があるが、場所は自由でいいみたい。
$HOME/.goとした
$ mkdir $HOME/.go
$ echo 'export GOPATH=$HOME/.go' >> ~/.zshrc
install vim-go
call dein#add('fatih/vim-go')
hello world
mkdir ~/workspace/hello_go
cd ~/workspace/hello_go
vim main.go
package main
import "fmt"
func main() {
fmt.Printf("Hello world\n")
}
# run
go run main.go
=> Hello world
# build
go build
スクレイピングしてみる
TSUTAYAさんのレンタル情報ページ ( http://store-tsutaya.tsite.jp/top/rels/dvd_rental.html )から、DVDのタイトルとレンタル開始日を抜いてきて標準出力に出す。
コードは長くなったのでgithub。
一応、goらしさを出そうと思ってスクレイピング処理はgoroutineで並列処理にしています。
ハマったポイント
- プロジェクトディレクトリをGOPATH以下に置かない
- 最初GOPATH/src/以下で書いてたんですが、ファイル分けた時にGOPATH以下だとpackageのlocal importが出来ないみたいです。
- プロジェクトディレクトリ名と同じpackage名にするとgo buildコケる
- dvd_rental_scraperみたいなディレクトリ掘って←みたいなパッケージ名にして、go buildするとディレクトリがすでにあるよ!みたいなエラーでgo build失敗しました。なのでpackageはtsutayaに変更しています。