当前位置: 首页>>代码示例>>Golang>>正文


Golang Reader.ReadSlice方法代码示例

本文整理汇总了Golang中bufio.Reader.ReadSlice方法的典型用法代码示例。如果您正苦于以下问题:Golang Reader.ReadSlice方法的具体用法?Golang Reader.ReadSlice怎么用?Golang Reader.ReadSlice使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在bufio.Reader的用法示例。


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

示例1: Symbol

// Symbol looks up the program counters listed in the request,
// responding with a table mapping program counters to function names.
// The package initialization registers it as /debug/pprof/symbol.
func Symbol(c *http.Conn, r *http.Request) {
	c.SetHeader("content-type", "text/plain; charset=utf-8")

	// We don't know how many symbols we have, but we
	// do have symbol information.  Pprof only cares whether
	// this number is 0 (no symbols available) or > 0.
	fmt.Fprintf(c, "num_symbols: 1\n")

	var b *bufio.Reader
	if r.Method == "POST" {
		b = bufio.NewReader(r.Body)
	} else {
		b = bufio.NewReader(strings.NewReader(r.URL.RawQuery))
	}

	for {
		w, err := b.ReadSlice('+')
		if err == nil {
			w = w[0 : len(w)-1] // trim +
		}
		pc, _ := strconv.Btoui64(string(w), 0)
		if pc != 0 {
			f := runtime.FuncForPC(uintptr(pc))
			if f != nil {
				fmt.Fprintf(c, "%#x %s\n", pc, f.Name())
			}
		}

		// Wait until here to check for err; the last
		// symbol will have an err because it doesn't end in +.
		if err != nil {
			break
		}
	}
}
开发者ID:rapgamer,项目名称:golang-china,代码行数:38,代码来源:pprof.go

示例2: parseInput

func parseInput(r *bufio.Reader) (args []string, err error) {
	for {
		buf, err := r.ReadSlice('\n')

		end := false
		if err == io.EOF {
			end = true
		} else if err != nil {
			return args, errors.New(fmt.Sprintf("Error reading line '%s': %v\n", buf, err))
		}

		index := bytes.IndexByte(buf, '#')
		if index != -1 {
			buf = buf[:index]
		}

		buf = bytes.TrimSpace(buf)

		if len(buf) == 0 {
			if end {
				break
			}
			continue
		}

		args = append(args, string(buf))

		if end {
			break
		}
	}

	return
}
开发者ID:urandom,项目名称:webfw,代码行数:34,代码来源:main.go

示例3: ReadParam

func (p *protocol) ReadParam(r *bufio.Reader) ([]byte, bool, error) {
	data, err := r.ReadSlice('\r')
	if err != nil {
		return nil, false, p.sanitizeErr(err)
	}
	err = p.assumeByte(r, '\n')
	if err != nil {
		return nil, false, err
	}

	next, err := r.ReadByte()
	if err != nil {
		return nil, false, p.sanitizeErr(err)
	}
	hasNext := true
	if next == '\r' {
		hasNext = false
		err = p.assumeByte(r, '\n')
		if err != nil {
			return nil, false, p.sanitizeErr(err)
		}
	} else {
		r.UnreadByte()
	}

	return data, hasNext, nil
}
开发者ID:clrpc,项目名称:clrpc-go,代码行数:27,代码来源:protocol.go

示例4: parseConfigResponse

// parseConfigResponse reads a CONFIG response from r and returns the version
// number and byte array of server descriptions.
func parseConfigResponse(r *bufio.Reader) (int, []byte, error) {
	line, err := r.ReadSlice('\n')
	if err != nil {
		return 0, nil, err
	}
	size, err := scanConfigDataLength(line)
	if err != nil {
		return 0, nil, err
	}
	value, err := ioutil.ReadAll(io.LimitReader(r, int64(size)+2))
	if err != nil {
		return 0, nil, err
	}
	if !bytes.HasSuffix(value, crlf) {
		return 0, nil, fmt.Errorf("elasticache: corrupt config result read")
	}
	// Reduce the value down to its total identified size
	value = value[:size]

	// Pull out version and server list, separated by LFs
	re := regexp.MustCompile("^(\\d+)\n(.*)\n$")
	configData := re.FindSubmatch(value)
	if configData == nil {
		return 0, nil, fmt.Errorf("elasticache: malformed config data: %s", value)
	}

	version, _ := strconv.Atoi(string(configData[1]))
	return version, configData[2], nil
}
开发者ID:soundcloud,项目名称:sc-gaws,代码行数:31,代码来源:auto_discovery.go

示例5: readLine

func readLine(rd *bufio.Reader) ([]byte, error) {
	// line, isPrefix, err := rd.ReadLine()
	// if err != nil {
	// 	return line, err
	// }
	// if isPrefix {
	// 	return line, errReaderTooSmall
	// }
	// if len(line) < 2 || line[len(line)-2] != '\r' { // \r\n
	// 	fmt.Println(line)
	// 	return nil, errors.New(fmt.Sprintf("invalid redis packet %v, err:%v", line, err))
	// }
	// return line, nil

	line, err := rd.ReadSlice('\n')
	if err != nil {
		return nil, err
	}

	if len(line) < 2 || line[len(line)-2] != '\r' { // \r\n
		return nil, errors.New(fmt.Sprintf("invalid redis packet %v, err:%v", line, err))
	}

	return line[:len(line)-2], nil
}
开发者ID:shitfSign,项目名称:smartproxy,代码行数:25,代码来源:parser.go

示例6: parseStatsResponse

func parseStatsResponse(r *bufio.Reader, stats *Statistics) error {
	for {
		line, err := r.ReadSlice('\n')
		if err != nil {
			return err
		}
		if bytes.Equal(line, resultEnd) {
			return nil
		}
		if hits, err := parseStatsLine(line, statsGetHits); err == nil {
			stats.Hits = hits
			continue
		}
		if misses, err := parseStatsLine(line, statsGetMisses); err == nil {
			stats.Misses = misses
			continue
		}
		if bytesWritten, err := parseStatsLine(line, statsBytesWritten); err == nil {
			stats.ByteHits = bytesWritten
			continue
		}
		if items, err := parseStatsLine(line, statsItems); err == nil {
			stats.Items = items
			continue
		}
		if bytes_total, err := parseStatsLine(line, statsBytes); err == nil {
			stats.Bytes = bytes_total
			continue
		}
	}
}
开发者ID:xni,项目名称:gomemcache,代码行数:31,代码来源:memcache.go

示例7: parseGetResponse

// parseGetResponse reads a GET response from r and calls cb for each
// read and allocated Item
func parseGetResponse(r *bufio.Reader, cb func(*Item)) error {
	for {
		line, err := r.ReadSlice('\n')
		if err != nil {
			return err
		}
		if bytes.Equal(line, resultEnd) {
			return nil
		}
		it := new(Item)
		size, err := scanGetResponseLine(line, it)
		if err != nil {
			return err
		}
		it.Value, err = ioutil.ReadAll(io.LimitReader(r, int64(size)+2))
		if err != nil {
			return err
		}
		if !bytes.HasSuffix(it.Value, crlf) {
			return fmt.Errorf("memcache: corrupt get result read")
		}
		it.Value = it.Value[:size]
		cb(it)
	}
	panic("unreached")
}
开发者ID:qmdx,项目名称:gomemcache,代码行数:28,代码来源:memcache.go

示例8: parseGetResponse

// parseGetResponse reads a GET response from r and calls cb for each
// read and allocated Item
func parseGetResponse(r *bufio.Reader, cb func(*Item)) error {
	for {
		line, err := r.ReadSlice('\n')
		if err != nil {
			return err
		}
		if bytes.Equal(line, resultEnd) {
			return nil
		}
		it := new(Item)
		var size int
		n, err := fmt.Sscanf(string(line), "VALUE %s %d %d %d\r\n",
			&it.Key, &it.Flags, &size, &it.casid)
		if err != nil {
			return err
		}
		if n != 4 {
			return fmt.Errorf("memcache: unexpected line in get response: %q", string(line))
		}
		it.Value, err = ioutil.ReadAll(io.LimitReader(r, int64(size)+2))
		if err != nil {
			return err
		}
		if !bytes.HasSuffix(it.Value, crlf) {
			return fmt.Errorf("memcache: corrupt get result read")
		}
		it.Value = it.Value[:size]
		cb(it)
	}
	panic("unreached")
}
开发者ID:npe9,项目名称:gomemcache,代码行数:33,代码来源:memcache.go

示例9: parseStatsSettingsResponse

func parseStatsSettingsResponse(r *bufio.Reader, stats *SettingsStats) error {
	pattern := "STAT %s %s\r\n"
	var (
		key   string
		value []byte
	)
	for {
		line, err := r.ReadSlice('\n')
		if err != nil {
			return err
		}
		if bytes.Equal(line, resultEnd) {
			return nil
		}

		n, err := fmt.Sscanf(string(line), pattern, &key, &value)
		if err != nil || n != 2 {
			return fmt.Errorf("memcache: unexpected line in stats response: %q", line)
		}
		err = stats.Set(key, value)
		if err != nil && err != ErrInvalidStatsKey {
			return err
		}
	}
	panic("unreached")
}
开发者ID:qmdx,项目名称:gomemcache,代码行数:26,代码来源:memcache.go

示例10: readRequestLine

func readRequestLine(b *bufio.Reader) (method string, url string, version int, err os.Error) {

	p, err := b.ReadSlice('\n')
	if err != nil {
		if err == bufio.ErrBufferFull {
			err = web.ErrLineTooLong
		}
		return
	}

	m := requestLineRegexp.FindSubmatch(p)
	if m == nil {
		err = ErrBadRequestLine
		return
	}

	method = string(m[1])

	major, err := strconv.Atoi(string(m[3]))
	if err != nil {
		return
	}

	minor, err := strconv.Atoi(string(m[4]))
	if err != nil {
		return
	}

	version = web.ProtocolVersion(major, minor)

	url = string(m[2])

	return
}
开发者ID:stevela,项目名称:twister,代码行数:34,代码来源:server.go

示例11: handleData

func handleData(rd bufio.Reader, out io.Writer) string {
	// Stolen from go-smtpd:
	// http://code.google.com/p/go-smtpd/source/browse/smtpd/smtpd.go
	fmt.Fprint(out, "354 Go ahead\r\n")

	buf := new(bytes.Buffer)

	for {
		sl, err := rd.ReadSlice('\n')
		if err != nil {
			return ""
		}
		if bytes.Equal(sl, []byte(".\r\n")) {
			break
		}
		if sl[0] == '.' {
			sl = sl[1:]
		}
		_, err = buf.Write(sl)
		if err != nil {
			return ""
		}
	}

	fmt.Fprint(out, "250 2.0.0 Ok: queued\r\n")

	return buf.String()
}
开发者ID:t6,项目名称:voicemail,代码行数:28,代码来源:smtp.go

示例12: parseStatsItemsResponse

func parseStatsItemsResponse(r *bufio.Reader, slabMap map[int]*ItemStats) error {
	pattern := "STAT items:%d:%s %s\r\n"
	var (
		slabIndex int
		key       string
		value     []byte
	)
	for {
		line, err := r.ReadSlice('\n')
		if err != nil {
			return err
		}
		if bytes.Equal(line, resultEnd) {
			return nil
		}

		n, err := fmt.Sscanf(string(line), pattern, &slabIndex, &key, &value)
		if err != nil || n != 3 {
			return fmt.Errorf("memcache: unexpected line in stats items response: %q", line)
		}

		_, ok := slabMap[slabIndex]
		if !ok {
			slabMap[slabIndex] = new(ItemStats)
		}
		err = slabMap[slabIndex].Set(key, value)
		if err != nil && err != ErrInvalidStatsKey {
			return err
		}
	}
	panic("unreached")
}
开发者ID:qmdx,项目名称:gomemcache,代码行数:32,代码来源:memcache.go

示例13: readEvent

// readEvent reads a single binlog event. It can be a single comment line,
// or multiple lines terminated by the delimiter.
func (bls *BinlogStreamer) readEvent(bufReader *bufio.Reader) (event []byte, err error) {
	for {
		fragment, err := bufReader.ReadSlice('\n')
		event = append(event, fragment...)
		if err == bufio.ErrBufferFull {
			continue
		}
		if err != nil {
			if err == io.EOF {
				return event, err
			}
			return event, fmt.Errorf("read error: %v", err)
		}
		// Use a different var than event, because you have to keep
		// the trailing \n if we continue
		trimmed := bytes.TrimSpace(event)
		if bytes.HasPrefix(trimmed, HASH_COMMENT) ||
			bytes.HasPrefix(trimmed, SLASH_COMMENT) ||
			bytes.HasPrefix(trimmed, DELIM_STMT) {
			return trimmed, nil
		}
		if bytes.HasSuffix(trimmed, bls.delim) {
			return bytes.TrimSpace(trimmed[:len(trimmed)-len(bls.delim)]), nil
		}
	}
}
开发者ID:qinbo,项目名称:vitess,代码行数:28,代码来源:binlog_streamer.go

示例14: msgProc

func (hub *MsgHub) msgProc(id int, reader *bufio.Reader) (err error) {
	var msgType byte
	var controlType byte

	msgType, err = reader.ReadByte()
	if err != nil {
		ERROR.Println("read from incoming error, detail:", err)
		return
	}
	switch msgType {
	case StringMsgType:
		//drop msg, should be ping
		var bs []byte
		bs, err = reader.ReadSlice('\n')
		if err != nil {
			return
		} else {
			INFO.Println(id, "said:", string(bs[:len(bs)-1]))
		}
	case ControlMsgType: //cronntrol msg
		if controlType, err = reader.ReadByte(); err != nil {
			return
		}
		switch controlType {
		case AddRouteControlType, RemoveRouteControlType:
			var msg RouteControlMsg
			var buf = make([]byte, msg.Len())
			buf[0] = ControlMsgType
			buf[1] = controlType
			reader.Read(buf[2:])
			if err = msg.Unmarshal(buf); err != nil {
				return
			}
			if msg.ControlType == AddRouteControlType {
				hub.AddRoute(msg.Id, msg.Type, id, nil)
			} else {
				hub.RemoveRoute(msg.Id, msg.Type)
			}
		case OfflineControlType:
			if err = hub.OfflineIncomingControlMsg(ControlMsgType, OfflineMsgType, reader); err != nil {
				return
			}
		}
	case RouteMsgType, TempRouteMsgType:
		var msg DeliverMsg
		if msg.To, msg.Carry, err = readRouteMsgBody(reader); err != nil {
			return
		}
		msg.MsgType = msgType
		hub.LocalDispatch(&msg)
	case OfflineMsgType:
		if err = hub.OfflineIncomingMsg(OfflineMsgType, reader); err != nil {
			return
		}
	default:
		err = UnknownMsg
	}
	return nil
}
开发者ID:Joinhack,项目名称:pmsg,代码行数:59,代码来源:msghub.go

示例15: getErrorResult

func (s *debugLogSuite) getErrorResult(c *gc.C, reader *bufio.Reader) params.ErrorResult {
	line, err := reader.ReadSlice('\n')
	c.Assert(err, gc.IsNil)
	var errResult params.ErrorResult
	err = json.Unmarshal(line, &errResult)
	c.Assert(err, gc.IsNil)
	return errResult
}
开发者ID:jameinel,项目名称:core,代码行数:8,代码来源:debuglog_test.go


注:本文中的bufio.Reader.ReadSlice方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。