2016年5月24日火曜日

golang 時間を引数としてプログラムに渡す

  • このエントリーをはてなブックマークに追加


golang 時間を引数としてプログラムに渡す golangプログラムで引数で指定された時間でSleepしたくて、いろいろはまってました。

Code

//整数を受け取って、Millisecondの倍数の時間でスリープ、既定は1000ミリ秒

multipleOfMS := flag.Int("m", 1000, "msの倍数")
flag.Parse()
time.Sleep(multipleOfMS * time.Millisecond)

Error

invalid operation: multipleOfMS * time.Millisecond (mismatched types *int and time.Duration)

Int型をtime.durationに変更

 multipleOfMS := flag.Int("m", 1000, "msの倍数")
flag.Parse()
time.Sleep(time.Duration(multipleOfMS) * time.Millisecond)

やはりエラー

cannot convert multipleOfMS (type *int) to type time.Duration
いろいろ調べてflag.Durationというのがあってこっちを使う
multipleOfMS := flag.Duration("m", 1 * time.Second, "-m=2sのように設定")
flag.Parse()
time.Sleep(*multipleOfMS)

実行

//5秒sleep
go run main.go -m=5s
//500ミリ秒sleep
go run main.go -m=500ms

2016年5月20日金曜日

Mysql backup

  • このエントリーをはてなブックマークに追加


Mysql backup Mysql DB バックアップ用シェルをメモしておきます。

backup shell

#!/bin/bash

PATH=/usr/local/sbin:/usr/bin:/bin
BKUPDIR=/home/backup/mysqlhot
DATE=`date +%Y%m%d%H%S`
DATE1=`date +%Y%m%d`

sudo rm  -rf $BKUPDIR
mkdir -p $BKUPDIR

# performance_schemaをスキップ
DBLIST=`sudo ls -p /var/lib/mysql | grep / | grep -v performance_schema | tr -d /`

for dbname in $DBLIST
        do
        table_count=`mysql -u root -B -e "show tables" $dbname|wc -l`
        [ $table_count -ne 0 ] &&
        sudo mysqlhotcopy $dbname -u admin -p admin $BKUPDIR | logger -t mysqlhotcopy
done

sudo tar czvf /home/backup/bkup/mysql_dbs.$DATE.tar.gz /home/backup/mysqlhot
sudo /usr/bin/find /home/backup/bkup/ -name "*.tar.gz" -mtime +4 -exec rm {} \;

problem 1

以下のようなエラーが出力されました。
$ mysqlhotcopy  -u root mysqlhot/
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 12) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, SQLite, Sponge.
 at /usr/bin/mysqlhotcopy line 200

solution

 $ sudo yum install "perl(DBD::mysql)"

problem 2

DBD::mysql::db do failed: SELECT, LOCK TABLES command denied to user 'admin'@'localhost' for table 'accounts' at /usr/bin/mysqlhotcopy line 523.

solution

performance_schema DBのバックアップをスキップする

2016年5月14日土曜日

MAC golang インストールとGOPATH設定

  • このエントリーをはてなブックマークに追加


MAC golang インストールとGOPATH設定 仕事でGOを使って、クライアントにWebsocketでメッセージをPushするサービスを開発しています。
GOのmacへのインストールとGOPATHの設定をメモします

install

$ brew install go
インストール先が/usr/local/goとなるはずです。

GO workspace作成

GOのworkspace(どこでもいい)を作成して、GOのソースコードとパッケージ、実行可能なバイナリファイルを格納します。
一般的に以下のように配置します。
例:…work/
.../gowork/src
.../gowork/pkg
.../gowork/bin

GOPATH設定

GO workspaceを決めたので、GOPATHを設定します。workspaceのbinとGoのインストール先binも合わせて追加しておきます。
$ mkdir $HOME/c-ye/gowork
$ vi ~/.bash_profile

export GOPATH=$HOME/c-ye/gowork
PATH=$PATH:$GOPATH/bin:/usr/local/go/bin
これで$HOME/c-ye/goworkの下にプロジェクトごとにソースを配置します。
また、godepをインストールした場合は
$ go get github.com/tools/godep
$HOME/c-ye/goworkのフォルダ中身が以下のようになる。
bin
    godep  #実行可能
pkg
    darwin_amd64
        github.com/tools/godep/
src
    github.com/tools/godep/
        diff.go
        go.go
        main.go
        ......
    testGO/      #自分のプロジェクト
        main.go 
とりあえずこんな感じです。詳しいはこちらを
https://golang.org/doc/code.html#Overview