常规错误处理
var p Pointif err := binary.Read(r, binary.BigEndian, &p.Longitude); err != nil {return nil, err}if err := binary.Read(r, binary.BigEndian, &p.Latitude); err != nil {return nil, err}if err := binary.Read(r, binary.BigEndian, &p.Distance); err != nil {return nil, err}if err := binary.Read(r, binary.BigEndian, &p.ElevationGain); err != nil {return nil, err}if err := binary.Read(r, binary.BigEndian, &p.ElevationLoss); err != nil {return nil, err}
参考bufio.Scanner()的错误处理
scanner := bufio.NewScanner(input)for scanner.Scan() {token := scanner.Text()// process token}if err := scanner.Err(); err != nil {// process the error}
优化
type Reader struct {r io.Readererr error}func (r *Reader) read(data interface{}) {if r.err == nil {r.err = binary.Read(r.r, binary.BigEndian, data)}}调用:var p Pointr := Reader{r: input}r.read(&p.Longitude)r.read(&p.Latitude)r.read(&p.Distance)r.read(&p.ElevationGain)r.read(&p.ElevationLoss)if r.err != nil {return nil, r.err}return &p, nil
