• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Golang log.Error函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Golang中github.com/getwe/goose/log.Error函数的典型用法代码示例。如果您正苦于以下问题:Golang Error函数的具体用法?Golang Error怎么用?Golang Error使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了Error函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。

示例1: Read

// 读取数据,外部需要准备好够存放的desBuf
func (this *BigFile) Read(i BigFileIndex, desBuf []byte) error {
	if i.FileNo >= this.bigfileStat.FileCnt {
		return log.Error("BigFile.Read FileNo[%d] Error", i.FileNo)
	}
	if i.Length > uint32(len(desBuf)) {
		return log.Error("BigFile.Read BigFileIndex.Length[%d] > len(desBuf)[%d]",
			i.Length, uint32(len(desBuf)))
	}

	var f *os.File
	if i.FileNo == this.bigfileStat.FileCnt-1 {
		f = this.readwriteFile
	} else {
		f = this.readOnlyFile[i.FileNo]
	}
	n, err := f.ReadAt(desBuf[:i.Length], int64(i.Offset))
	if err == io.EOF {
		if uint32(n) == i.Length {
			// 刚刚好读完
			return nil
		}
	}
	if uint32(n) != i.Length {
		return log.Error("Read Length Error offset[%d] destBuf len[%d],ReadAt len[%d]",
			i.Offset, i.Length, n)
	}
	if err != nil {
		return log.Error("ReadAt file", err.Error())
	}
	return nil
}
开发者ID:caohao2008,项目名称:goose,代码行数:32,代码来源:bigfile.go


示例2: Append

// 追加数据,返回追加数据的存储信息.不可并发进行写操作.
func (this *BigFile) Append(buf []byte) (*BigFileIndex, error) {

	f, err := this.getRwFile()
	if err != nil {
		return nil, err
	}

	i := BigFileIndex{}
	i.FileNo = this.bigfileStat.FileCnt - 1
	i.Length = uint32(len(buf))
	off, err := this.readwriteFile.Seek(0, 1)
	i.Offset = uint32(off)
	if i.Offset != this.bigfileStat.LastFileOffset {
		return nil, log.Error("BigFile.Append getOffset[%d] LastFileOffset[%d]",
			i.Offset, this.bigfileStat.LastFileOffset)
	}

	n, err := f.Write(buf)
	if err != nil {
		return nil, log.Error("BigFile.Append write fail : %s", err.Error())
	}
	if uint32(n) != i.Length {
		// 写成功,但是写入长度跟期望对不上
		// 回滚文件指针
		this.readwriteFile.Seek(int64(i.Offset), 0)
		return nil, log.Error("BigFile.Append write succ bug length error : %s",
			err.Error())
	}
	// 更新状态文件
	this.bigfileStat.LastFileOffset = i.Offset + i.Length
	this.saveStatFile()

	return &i, nil
}
开发者ID:caohao2008,项目名称:goose,代码行数:35,代码来源:bigfile.go


示例3: searchModeRun

// 检索模式运行
func (this *Goose) searchModeRun() {

	log.Debug("run in search mode")

	if this.searchSty == nil {
		log.Error("Please set search strategy,see Goose.SetSearchStrategy()")
		return
	}

	if this.indexSty == nil {
		log.Warn("can't build index real time witout Index Strategy")
	}

	gooseSearch := NewGooseSearch()
	err := gooseSearch.Init(this.confPath, this.indexSty, this.searchSty)
	if err != nil {
		log.Error(err)
		return
	}

	log.Debug("goose search init succ")

	err = gooseSearch.Run()
	if err != nil {
		log.Error(err)
		return
	}
}
开发者ID:caohao2008,项目名称:goose,代码行数:29,代码来源:Goose.go


示例4: ReadData

// 读取Data数据,可以并发.
func (this *DataManager) ReadData(inId InIdType, buf *Data) error {
	if inId < 1 || inId > this.dataStatus.MaxInId {
		return log.Error("inId [%d] illegal MaxInId[%d]", inId, this.dataStatus.MaxInId)
	}

	// 读一级索引
	bigFileI, err := this.readData0(inId)
	if err != nil {
		return err
	}
	if bigFileI.Length == 0 {
		return log.Error("Read data0 inId[%d],fileNo[%d],length[%d],offset[%d]",
			inId, bigFileI.FileNo, bigFileI.Length, bigFileI.Offset)
	}

	// 读二级索引
	if bigFileI.Length > uint32(buf.Len()) {
		*buf = NewData(int(bigFileI.Length))
	}
	err = this.data1.Read(bigFileI, *buf)
	if err != nil {
		return err
	}

	return nil
}
开发者ID:caohao2008,项目名称:goose,代码行数:27,代码来源:datamanager.go


示例5: Open

// 打开已存在的大文件,如果不存在,直接返回错误
func (this *BigFile) Open(path string, name string) error {

	// 是打开已有数据文件状态
	this.fileModel = bigFileModelOpen

	this.filePath = path
	this.fileName = name

	this.statFileFullPath = filepath.Join(this.filePath,
		fmt.Sprintf("%s%s", this.fileName, statFileSuffix))

	// 解析获取文件信息
	err := this.parseStatFile()
	if err != nil {
		return log.Warn(err)
	}
	// 检验状态文件
	if this.bigfileStat.SuggestFileSize == 0 {
		return log.Error("BigFile.Open stat file error")
	}

	// 除了最后一个文件,其它以只读方式打开
	readOnlyFileCnt := uint8(0)
	if this.bigfileStat.FileCnt > 0 {
		readOnlyFileCnt = this.bigfileStat.FileCnt - 1
	}
	this.readOnlyFile = make([]*os.File, readOnlyFileCnt)
	for i := 0; uint8(i) < readOnlyFileCnt; i++ {
		f, err := this.openRoFile(uint8(i))
		if err != nil {
			return err
		}
		this.readOnlyFile[i] = f
		// 校验这些只读文件的大小,他们肯定是大于等于配置才对
		// TODO
	}

	// 最后一个文件已读写方式打开
	if this.bigfileStat.FileCnt > 0 {
		err = this.openRwFile(this.bigfileStat.FileCnt - 1)
		if err != nil {
			return err
		}
		// 设置文件指针
		this.readwriteFile.Seek(int64(this.bigfileStat.LastFileOffset), 0)

		// 最后一个文件的文件指针应该就是文件大小
		sz, _ := FileSize(this.readwriteFile)
		if sz != int64(this.bigfileStat.LastFileOffset) {
			return log.Error("BigFile.Open", "FileStatInfo Error LastFileOffset:[%d] != FileSize:[%d]",
				this.bigfileStat.LastFileOffset, sz)
		}
	} else {
		this.readwriteFile = nil
	}

	return nil
}
开发者ID:caohao2008,项目名称:goose,代码行数:59,代码来源:bigfile.go


示例6: AllocID

// 根据唯一外部ID,分配内部ID,可并发内部有锁控制按顺序分配
func (this *DBSearcher) AllocID(outID OutIdType) (InIdType, error) {
	if this.varIndex == nil {
		return 0, log.Error("No Var Index")
	}
	if this.idMgr == nil {
		return 0, log.Error("no id manager")
	}
	return this.idMgr.AllocID(outID)
}
开发者ID:caohao2008,项目名称:goose,代码行数:10,代码来源:dbsearcher.go


示例7: WriteValue

// 写入Value数据,可并发写入.
func (this *DBSearcher) WriteValue(InID InIdType, v Value) error {
	if this.varIndex == nil {
		return log.Error("No Var Index")
	}
	if this.valueMgr == nil {
		return log.Error("no value manager")
	}

	return this.valueMgr.WriteValue(InID, v)
}
开发者ID:caohao2008,项目名称:goose,代码行数:11,代码来源:dbsearcher.go


示例8: WriteData

// 写入Data数据,可并发调用.
func (this *DBSearcher) WriteData(InID InIdType, d Data) error {
	if this.varIndex == nil {
		return log.Error("No Var Index")
	}
	if this.dataMgr == nil {
		return log.Error("no data manager")
	}

	// dataMgr内部锁控制,并发写顺序写入
	return this.dataMgr.Append(InID, d)
}
开发者ID:caohao2008,项目名称:goose,代码行数:12,代码来源:dbsearcher.go


示例9: Init

// 创建全新的磁盘索引,初始化后只允许进行索引写入.
// maxFileSz 索引大文件单个文件的最大大小.
// MaxTermCnt 是预期要写入的term的总数量.
func (this *DiskIndex) Init(path string, name string, maxFileSz uint32, MaxTermCnt int64) error {
	this.lock.Lock()
	defer this.lock.Unlock()

	if this.indexStatus != DiskIndexInit {
		return log.Error("index status error")
	}

	if len(path) == 0 || len(name) == 0 {
		return log.Error("path[%s] name[%s] error")
	}

	this.filePath = path
	this.fileName = name

	this.StatusFilePath = filepath.Join(this.filePath,
		fmt.Sprintf("%s.index.stat", this.fileName))
	// 磁盘状态文件需要设置的两个步骤:(1)指示要写入的结构;(2)设置写入路径
	this.SelfStatus = &this.diskStatus

	this.diskStatus.MaxTermCount = MaxTermCnt

	// 初始化三级索引
	this.index3 = &BigFile{}
	ind3name := fmt.Sprintf("%s.index3", this.fileName)
	err := this.index3.Init(this.filePath, ind3name, maxFileSz)
	if err != nil {
		return log.Error(err)
	}

	// 打开二级索引
	ind2name := filepath.Join(this.filePath, fmt.Sprintf("%s.index2", this.fileName))
	// 打开新文件,创建|截断|只写
	this.index2, err = os.OpenFile(ind2name, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
	if err != nil {
		return log.Error(err)
	}

	// 计算预期一级索引大小
	index1Sz := this.diskStatus.MaxTermCount * int64(binary.Size(TermSign(0)))

	// 打开一级索引
	this.index1 = new(MmapFile)
	ind1name := fmt.Sprintf("%s.index1", this.fileName)
	err = this.index1.OpenFile(this.filePath, ind1name, uint32(index1Sz))
	if err != nil {
		return log.Error("mmap open[%s] size[%d] fail : %s", ind1name, index1Sz, err)
	}

	this.indexStatus = DiskIndexWriteOnly

	return this.SaveJsonFile()
}
开发者ID:caohao2008,项目名称:goose,代码行数:56,代码来源:diskindex.go


示例10: runIndexServer

func (this *GooseSearch) runIndexServer(listenPort int, requestBufSize int) error {

	if 0 == listenPort || 0 == requestBufSize {
		return log.Error("arg error istenPort[%d] requestBufSize[%d]",
			listenPort, requestBufSize)
	}

	if this.varIndexer == nil {
		return nil
	}

	listener, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", listenPort))
	if err != nil {
		log.Error("runIndexServer listen fail : %s", err.Error())
		return err
	}

	// 简单一个协程完成接受请求和完成处理.索引更新不要求高并发性.
	go func() {
		reqbuf := make([]byte, requestBufSize)
		for {
			var reqlen int

			conn, err := listener.Accept()
			if err != nil {
				log.Warn("IndexServer accept fail : %s", err.Error())
				goto LabelError
			}

			// receive data
			reqlen, err = conn.Read(reqbuf)
			if err != nil {
				log.Warn("IndexSearcher read fail : %s", err.Error())
				goto LabelError
			}

			// index
			err = this.varIndexer.BuildIndex(NewBufferIterOnce(reqbuf[:reqlen]))
			if err != nil {
				log.Warn("IndexSearcher BuildIndex fail : %s", err.Error())
				goto LabelError
			}

		LabelError:
			conn.Close()
		}
	}()

	return nil
}
开发者ID:caohao2008,项目名称:goose,代码行数:50,代码来源:GooseSearch.go


示例11: ReadNum

// 读取offset开始的destSz个字节作为数字返回
func (this *MmapFile) ReadNum(offset uint32, destSz uint32) (uint64, error) {
	if destSz == 0 {
		return 0, log.Error("Mmapfile.ReadNum not a basic num")
	}
	if int64(offset)+int64(destSz) > int64(len(this.fileMmap)) {
		return 0, log.Error("Mmapfile.ReadNum over length limit")
	}

	buf := this.fileMmap[offset : offset+uint32(destSz)]

	order := binary.BigEndian
	switch destSz {
	case 1:
		return uint64(buf[0]), nil
	case 2:
		return uint64(order.Uint16(buf)), nil
	case 4:
		return uint64(order.Uint32(buf)), nil
	case 8:
		return uint64(order.Uint64(buf)), nil
	default:
		return 0, log.Error("MmapFile.ReadNum Wrong Type")
	}
	return 0, nil
	/*
	   switch v := n.(type) {
	   case *int8:
	       *v = int8(buf[0])
	   case *uint8:
	       *v = buf[0]
	   case *int16:
	       *v = int16(order.Uint16(buf))
	   case *uint16:
	       *v = uint16(order.Uint16(buf))
	   case *int32:
	       *v = int32(order.Uint32(buf))
	   case *uint32:
	       *v = uint32(order.Uint32(buf))
	   case *int64:
	       *v = int64(order.Uint64(buf))
	   case *uint64:
	       *v = uint64(order.Uint64(buf))
	   default:
	       return NewGooseError("MmapFile.ReadNum","Wrong Type","")
	   }

	   return nil
	*/
}
开发者ID:caohao2008,项目名称:goose,代码行数:50,代码来源:mmapfile.go


示例12: WriteIndex

// 写入索引,不可并发写入
func (this *DBBuilder) WriteIndex(InID InIdType, termlist []TermInDoc) error {
	if this.transformMgr == nil {
		return log.Error("no transform manager")
	}

	return this.transformMgr.WriteIndex(InID, termlist)
}
开发者ID:caohao2008,项目名称:goose,代码行数:8,代码来源:dbbuilder.go


示例13: WriteValue

// 写入Value数据,可并发写入
func (this *DBBuilder) WriteValue(InID InIdType, v Value) error {
	if this.valueMgr == nil {
		return log.Error("no value manager")
	}

	return this.valueMgr.WriteValue(InID, v)
}
开发者ID:caohao2008,项目名称:goose,代码行数:8,代码来源:dbbuilder.go


示例14: parseDoc

func (this *StaticIndexer) parseDoc() {

	// context
	context := NewStyContext()

	// 一直从chan中获取doc,直到这个chan被close
	for doc := range this.parseDocChan {
		var err error
		// parse
		parseRes := &docParsed{}
		parseRes.outId, parseRes.termList, parseRes.value, parseRes.data,
			err = this.strategy.ParseDoc(doc, context)
		if err != nil {
			log.Error(err)
			parseRes = nil
		}
		// 打印策略日志
		context.Log.PrintAllInfo()

		// toWriteDbQueue是待写入db的队列.
		// 阻塞等待队列有空余位置然后写入队列.
		this.writeDbQueue <- parseRes
	}
	log.Info("Finish parseDoc , goroutine exit.")
}
开发者ID:caohao2008,项目名称:goose,代码行数:25,代码来源:Indexer.go


示例15: ReadBytes

// read bytes (reference)
func (this *MmapFile) ReadBytes(offset uint32, length uint32) ([]byte, error) {
	if uint64(offset+length) > uint64(len(this.fileMmap)) {
		return nil, log.Error("Mmapfile.ReadBytes over length limit")
	}

	return this.fileMmap[offset : offset+length], nil
}
开发者ID:caohao2008,项目名称:goose,代码行数:8,代码来源:mmapfile.go


示例16: AllocID

// 分配内部id
func (this *IdManager) AllocID(outId OutIdType) (InIdType, error) {
	this.lock.Lock()
	defer this.lock.Unlock()

	if outId == 0 {
		return 0, log.Warn("illegal outId [%d]", 0)
	}

	if this.idStatus.CurId >= this.idStatus.MaxInId {
		return 0, log.Error("InId [%d] out of limit MaxInId[%d]", this.idStatus.CurId, this.idStatus.MaxInId)
	}

	inID := this.idStatus.CurId

	// 分配信息,写入mmap
	offset := inID * idSize
	err := this.mfile.WriteNum(uint32(offset), uint32(outId))
	if err != nil {
		return 0, err
	}

	// 确认分配成功才真正占用这个id
	this.idStatus.CurId++

	return inID, nil
}
开发者ID:caohao2008,项目名称:goose,代码行数:27,代码来源:idmanager.go


示例17: Init

// 全新初始化数据文件
func (this *DataManager) Init(path string, maxId InIdType, maxFileSz uint32) error {

	this.dataStatus.MaxInId = maxId
	this.maxDataFileSize = maxFileSz
	this.filePath = path

	// 磁盘状态文件需要设置的两个步骤:(1)指示要写入的结构;(2)设置写入路径
	this.SelfStatus = &this.dataStatus
	this.StatusFilePath = filepath.Join(this.filePath, "data.stat")

	// 一级索引mmap打开
	// id有效范围[1,MaxInId],0不使用导致后面要多分配一个空间
	data0Size := uint32(1+this.dataStatus.MaxInId) * uint32(binary.Size(BigFileIndex{}))
	data0Name := fmt.Sprintf("data.d0")
	err := this.data0.OpenFile(this.filePath, data0Name, data0Size)
	if err != nil {
		return log.Error("mmap open[%s] size[%d] fail : %s", data0Name, data0Size, err)
	}
	// 二级索引BigFile打开
	this.data1 = new(BigFile)
	data1Name := fmt.Sprintf("data.d1")
	err = this.data1.Init(this.filePath, data1Name, this.maxDataFileSize)
	if err != nil {
		return err
	}

	return this.SaveJsonFile()
}
开发者ID:caohao2008,项目名称:goose,代码行数:29,代码来源:datamanager.go


示例18: Init

func (this *ValueManager) Init(path string, maxId InIdType, valueSz uint32) error {
	this.lock.Lock()
	defer this.lock.Unlock()

	this.filePath = path

	this.valueStatus.MaxInId = maxId
	this.valueStatus.ValueSize = valueSz

	// 磁盘状态文件需要设置的两个步骤:(1)指示要写入的结构;(2)设置写入路径
	this.SelfStatus = &this.valueStatus
	this.StatusFilePath = filepath.Join(this.filePath, "value.stat")

	this.fileValueMaxCnt = uint32(maxValueFileSize / this.valueStatus.ValueSize)
	this.fileCnt = uint32(uint32(maxId)/this.fileValueMaxCnt) + 1
	this.mfile = make([]MmapFile, this.fileCnt)

	// 分配磁盘空间
	for i := 0; uint32(i) < this.fileCnt; i++ {
		tname := fmt.Sprintf("value.n%d", i)
		sz := uint32(this.fileValueMaxCnt * this.valueStatus.ValueSize)
		err := this.mfile[i].OpenFile(path, tname, sz)
		if err != nil {
			return log.Error("open mfile[%d],szie[%d] fail[%s]", i, sz, err.Error())
		}
	}

	return this.SaveJsonFile()
}
开发者ID:caohao2008,项目名称:goose,代码行数:29,代码来源:valuemanager.go


示例19: Open

// 打开已存在的数据文件
func (this *DataManager) Open(path string) error {

	this.filePath = path

	// 磁盘状态文件需要设置的两个步骤:(1)指示要写入的结构;(2)设置写入路径
	this.SelfStatus = &this.dataStatus
	this.StatusFilePath = filepath.Join(this.filePath, "data.stat")
	err := this.ParseJsonFile()
	if err != nil {
		return err
	}

	// 一级索引mmap打开
	// id有效范围[1,MaxInId],0不使用导致后面要多分配一个空间
	// 打开也要多打开一个单位的空间
	data0Size := uint32(1+this.dataStatus.MaxInId) * uint32(binary.Size(BigFileIndex{}))
	data0Name := fmt.Sprintf("data.d0")
	err = this.data0.OpenFile(this.filePath, data0Name, data0Size)
	if err != nil {
		return log.Error("mmap open[%s] size[%d] fail : %s", data0Name, data0Size, err)
	}
	// 二级索引BigFile打开
	this.data1 = new(BigFile)
	data1Name := fmt.Sprintf("data.d1")
	err = this.data1.Open(this.filePath, data1Name)
	if err != nil {
		return err
	}

	return nil
}
开发者ID:caohao2008,项目名称:goose,代码行数:32,代码来源:datamanager.go


示例20: WriteData

// 写入Data数据,可并发调用,内部锁控制
func (this *DBBuilder) WriteData(InID InIdType, d Data) error {
	if this.dataMgr == nil {
		return log.Error("no data manager")
	}

	// dataMgr内部锁控制,并发写顺序写入
	return this.dataMgr.Append(InID, d)
}
开发者ID:caohao2008,项目名称:goose,代码行数:9,代码来源:dbbuilder.go



注:本文中的github.com/getwe/goose/log.Error函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Golang logger.Logger类代码示例发布时间:2022-05-23
下一篇:
Golang cli.App类代码示例发布时间:2022-05-23
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap