liyujie
2025-08-28 d9927380ed7c8366f762049be9f3fee225860833
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
// This file contains the code snippets included in "Error Handling and Go."
 
package main
 
import (
   "encoding/json"
   "errors"
   "fmt"
   "log"
   "net"
   "os"
   "time"
)
 
type File struct{}
 
func Open(name string) (file *File, err error) {
   // OMIT
   panic(1)
   // STOP OMIT
}
 
func openFile() { // OMIT
   f, err := os.Open("filename.ext")
   if err != nil {
       log.Fatal(err)
   }
   // do something with the open *File f
   // STOP OMIT
   _ = f
}
 
// errorString is a trivial implementation of error.
type errorString struct {
   s string
}
 
func (e *errorString) Error() string {
   return e.s
}
 
// STOP OMIT
 
// New returns an error that formats as the given text.
func New(text string) error {
   return &errorString{text}
}
 
// STOP OMIT
 
func Sqrt(f float64) (float64, error) {
   if f < 0 {
       return 0, errors.New("math: square root of negative number")
   }
   // implementation
   return 0, nil // OMIT
}
 
// STOP OMIT
 
func printErr() (int, error) { // OMIT
   f, err := Sqrt(-1)
   if err != nil {
       fmt.Println(err)
   }
   // STOP OMIT
   // fmtError OMIT
   if f < 0 {
       return 0, fmt.Errorf("math: square root of negative number %g", f)
   }
   // STOP OMIT
   return 0, nil
}
 
type NegativeSqrtError float64
 
func (f NegativeSqrtError) Error() string {
   return fmt.Sprintf("math: square root of negative number %g", float64(f))
}
 
// STOP OMIT
 
type SyntaxError struct {
   msg    string // description of error
   Offset int64  // error occurred after reading Offset bytes
}
 
func (e *SyntaxError) Error() string { return e.msg }
 
// STOP OMIT
 
func decodeError(dec *json.Decoder, val struct{}) error { // OMIT
   var f os.FileInfo // OMIT
   if err := dec.Decode(&val); err != nil {
       if serr, ok := err.(*json.SyntaxError); ok {
           line, col := findLine(f, serr.Offset)
           return fmt.Errorf("%s:%d:%d: %v", f.Name(), line, col, err)
       }
       return err
   }
   // STOP OMIT
   return nil
}
 
func findLine(os.FileInfo, int64) (int, int) {
   // place holder; no need to run
   return 0, 0
}
 
func netError(err error) { // OMIT
   for { // OMIT
       if nerr, ok := err.(net.Error); ok && nerr.Temporary() {
           time.Sleep(1e9)
           continue
       }
       if err != nil {
           log.Fatal(err)
       }
       // STOP OMIT
   }
}
 
func main() {}