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