35 lines
811 B
Go
35 lines
811 B
Go
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?
|