UbuntuへGo1.7をインストールする
UbuntuへGo1.7をインストールしたのでその時の作業ログ
$ sudo apt-get update $ sudo apt-get -y upgrade
$ wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz $ sudo tar -xvf go1.7.4.linux-amd64.tar.gz $ sudo mv go /usr/local
$ mkdir ~/gocode
$ echo export GOROOT=/usr/local/go >> ~/.bash_profile $ echo export GOPATH=$HOME/gocode >> ~/.bash_profile $ echo export PATH=$GOPATH/bin:$GOROOT/bin:$PATH >> ~/.bash_profile $ source ~/.bash_profile
$ go version
versionが表示されればOK.
go version go1.7.4 linux/amd64
SupervisorでGoをデーモン化する。CentOS/Ubuntu
GoアプリケーションをCentOS環境で、デーモン化する必要があったので、その時の作業ログ。
CentOS
$ wget https://bootstrap.pypa.io/ez_setup.py -O - | python $ easy_install --version
$ easy_install supervisor $ supervisord -v
$ echo_supervisord_conf > /etc/supervisord.conf
設定ファイルを変更
;/etc/supervisord.conf [unix_http_server] file = /tmp/supervisor.sock chmod = 0777 chown= root:root [inet_http_server] port=9001 username = admin password = yourpassword [supervisorctl] serverurl = unix:///tmp/supervisor.sock [supervisord] logfile=/var/log/supervisord/supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=info pidfile=/var/run/supervisord.pid nodaemon=true minfds=1024 minprocs=200 user=root childlogdir=/var/log/supervisord/ [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [program:app] command=/path-to-path/yourappname autostart = true startsecs = 5 user = root redirect_stderr = true stdout_logfile = /var/log/supervisord/app.log
Run
supervisord
Stop/Reload
以下のコマンドで管理モードに入る
supervisorctl reload
Ubuntu
$ sudo apt-get install supervisor
$ sudo vim /etc/supervisor/conf.d/app.conf
設定ファイルを変更
[unix_http_server] file=/var/run/supervisor.sock chmod=0700 [supervisord] logfile=/var/log/supervisor/supervisord.log pidfile=/var/run/supervisord.pid childlogdir=/var/log/supervisor [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///var/run/supervisor.sock [include] files = /etc/supervisor/conf.d/*.conf [program:app] command=<your path> autostart=true autorestart=true startretries=10 user=root redirect_stderr=true stderr_logfile=/var/log/long.err.log stdout_logfile=/var/log/long.out.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10
(command に指定する前にbuildしておく必要がある。)
$ sudo service supervisor restart
GAE/GO datastoreのローカル開発をしてみる。
appengine/datastoreをローカルの開発環境でテストしたいときはどうするのかなと思ったけれど、以下でOKであった。
command
goapp test ./src/<path>
source
import ( "testing" "google.golang.org/appengine" "google.golang.org/appengine/aetest" "google.golang.org/appengine/datastore" ) func TestPostCompany(t *testing.T) { inst, err := aetest.NewInstance(nil) if err != nil { t.Fatalf("Failed to create instance: %v", err) } defer inst.Close() req1, err := inst.NewRequest("GET", "/gophers", nil) if err != nil { t.Fatalf("Failed to create req1: %v", err) } c1 := appengine.NewContext(req1) var companyResponse = struct { Name, Address, Nick, Key string }{} var key *datastore.Key key, _ = datastore.DecodeKey(companyResponse.Key) var savedCompany = companyResponse datastore.Get(c1, key, &savedCompany) datastore.Delete(c1, key) }
link
Local Unit Testing for Go | App Engine standard environment for Go | Google Cloud Platform
しかし、おそいな、、もっと早くできなものか、、
GoogleAppEngineでプロジェクトを削除するには、
今のところ古いコンソール画面から確認する方法がいいみたい。 console.developers.google.com 新しいコンソールではまだ操作できないのかも、
Go言語 echo serverからtwitterクライアントのanacondaを利用する。
AppEngine上でecho serve から、twitterクライアントのanacondaを使用する時のメモ、
echo のContextからどうやって、*http.Requestを取得するのか迷ったのだけれど、以下でいけるみたい。
c.Request().(*standard.Request).Request
anacondaでapiを生成するサンプル。
c := appengine.NewContext(echo.Request().(*standard.Request).Request) api.HttpClient.Transport = &urlfetch.Transport{Context: c}
anaconda以外にも、*http.Requestが必要になる場面は多々ありそう。
Cloud SQL 第2世代に接続できない。
google app engineのcloud sql 第2世代に接続できなくて、メモ。
google app engine golang, driver: bad connection
見慣れないエラーが発生。。
regionnameを新たに設定する必要がありました。
return sql.Open("mysql", "root@cloudsql("projectid:regionname:instancename")/dbo")
ただ、cloud sql 第2世代になって全体的な使い勝手は良くなった印象。
Go言語 正規表現を使って文字数制限をかけてみる。
Go言語で文字数の制限をかけてみたサンプル。
19文字以上の文字数がある場合は、先頭から19文字までを抜き取ってみる。
もっとシンプルにできたりするのか?
package main import ( "fmt" "regexp" ) func main() { str :="Lorem Ipsum is simply dummy text of the printing and typesetting industry." if(len(str)>20){ r := regexp.MustCompile(`^(.){19}`) result := r.FindAllStringSubmatch(str, -1) fmt.Println(result[0][0]) } }
結果
Lorem Ipsum is simp
実際の動作はこちらから、