github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/shed/field_string.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:44</date> 10 //</624450117608411136> 11 12 13 package shed 14 15 import ( 16 "github.com/syndtr/goleveldb/leveldb" 17 ) 18 19 //StringField是最简单的字段实现 20 //它在特定的leveldb键下存储一个任意字符串。 21 type StringField struct { 22 db *DB 23 key []byte 24 } 25 26 //newStringField重新运行StringField的新实例。 27 //它根据数据库模式验证其名称和类型。 28 func (db *DB) NewStringField(name string) (f StringField, err error) { 29 key, err := db.schemaFieldKey(name, "string") 30 if err != nil { 31 return f, err 32 } 33 return StringField{ 34 db: db, 35 key: key, 36 }, nil 37 } 38 39 //get返回数据库中的字符串值。 40 //如果找不到该值,则返回空字符串 41 //没有错误。 42 func (f StringField) Get() (val string, err error) { 43 b, err := f.db.Get(f.key) 44 if err != nil { 45 if err == leveldb.ErrNotFound { 46 return "", nil 47 } 48 return "", err 49 } 50 return string(b), nil 51 } 52 53 //将存储字符串放入数据库。 54 func (f StringField) Put(val string) (err error) { 55 return f.db.Put(f.key, []byte(val)) 56 } 57 58 //putinbatch将字符串存储在可以 59 //稍后保存在数据库中。 60 func (f StringField) PutInBatch(batch *leveldb.Batch, val string) { 61 batch.Put(f.key, []byte(val)) 62 } 63