Errors & Exercise - TODO/Questions !!!
This commit is contained in:
parent
902591ab43
commit
4b524656ed
2 changed files with 67 additions and 0 deletions
35
3methods/errors.go
Normal file
35
3methods/errors.go
Normal file
|
@ -0,0 +1,35 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("The error type is a built-in interface")
|
||||
fmt.Println("A nil error denotes success, a non-nil error denotes failure")
|
||||
|
||||
if err := run(); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
type MyError struct {
|
||||
When time.Time
|
||||
What string
|
||||
}
|
||||
|
||||
func (e MyError) Error() string {
|
||||
return fmt.Sprintf("at %v, %s", e.When, e.What)
|
||||
}
|
||||
|
||||
func run() error {
|
||||
return MyError{
|
||||
time.Now(),
|
||||
"I'm an error!",
|
||||
}
|
||||
}
|
||||
|
||||
// TODO soru1: `return *MyError` ve `func (e *MyError)` yapmak ne değiştirir. Diğer şekli ile pointer olmadan veriyi duplicate edip daha fazla mı yer kaplar?
|
||||
|
||||
//TODO soru2: fmt'de String() kullanmazsak hata çıkarmıyordu, default bir değer vardı. Ama eğer Error() methodunu buradan silersek `func run() error` fonksiyonu hata veriyor? Neden?
|
32
exercises/errors.go
Normal file
32
exercises/errors.go
Normal file
|
@ -0,0 +1,32 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
type ErrInfo struct {
|
||||
errTime time.Time
|
||||
errLine int
|
||||
}
|
||||
|
||||
func (e ErrInfo) Error() string {
|
||||
return fmt.Sprintf("there was an error at %q, at line %d", e.errTime, e.errLine)
|
||||
}
|
||||
|
||||
func Sqrt(x float64) (float64, error) {
|
||||
var z float64 = 1.0
|
||||
if x < 0 {
|
||||
return 0, ErrInfo{time.Now(), 20}
|
||||
} else {
|
||||
for i := 15; i > 0; i-- {
|
||||
z -= (z*z - x) / (2 * z)
|
||||
}
|
||||
}
|
||||
return z, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(Sqrt(2))
|
||||
fmt.Println(Sqrt(-2))
|
||||
}
|
Loading…
Reference in a new issue