俺です。
Couchbase Server Go SDK 1.0のHello Couchbase exampleをCouchbase Server 3.0/4.0相手に動かした時、つらい目にあったのでメモを残します。
環境
2環境で試して同じエラーが出た
(1) Mac OS X
- Couchbase Server 3.0.1
- Go 1.4.2
- Couchbase Server Go SDK 1.0
(2) Amazon Linux
- Couchbase Server 4.0.1
- Go 1.4.2
- Couchbase Server Go SDK 1.0
ソース
package main
import (
"fmt"
"gopkg.in/couchbase/gocb.v1"
)
func main() {
myCluster, _ := gocb.Connect("couchbase://localhost")
myBucket, _ := myCluster.OpenBucket("beer-sample", "")
var beer map[string]interface{}
cas, _ := myBucket.Get("aass_brewery-juleol", &beer)
beer["comment"] = "俺とお前と大五郎"
beer["description"] = "マグロ。ご期待下さい。"
myBucket.Replace("aass_brewery-juleol", &beer, cas, 0)
fmt.Printf("map length `%d` value `%v` with CAS %08x", len(beer), beer, cas)
}
エラー
req.Cancel undefined
!!
この更新で追加された関数 doHttpWithTimeout
のreq.Cancel
が使われてないってことで怒られたようです。
orenomac$ go run hello.go
# github.com/couchbase/gocb
../github.com/couchbase/gocb/bucket_http.go:262: req.Cancel undefined (type *http.Request has no field or method Cancel)
対策(2015/12/16 15:46JST時点)
まだ修正されてないようなので、 bucket_http.go
の262行目をコメントアウトしてしまえばOKでした
もう一度実行
Couchbse Serverにインストールしたbeer-sampleバケットからCASの取得とkey(aass_brewery-juleol)のReplaceができました。
orenomac$ go run hello.go
map length `13` value `map[brewery_id:aass_brewery category:North American Ale comment:俺とお前と大五郎 description:マグロ。ご期待下さい。 ibu:0 name:Juleøl type:beer updated:2010-07-22 20:00:20 abv:5.9 hoge:foo bar srm:0 style:Dark American-Belgo-Style Ale upc:0]` with CAS f14915f70d9%
やったね