GO : Error
Dalam bahasa pemrograman Go, kita dapat melihat sebuah kesalahan yang berfungsi kembali, dan untuk mengangani error tersebut, bahasa pemrograman Go menggunakan konstruksi bahasa yang sama digunakan untuk yang lain, non-error tasks.
package main
import "errors"
import "fmt"
//Dengan ketentuan, error adalah nilai kembalian terakhir dan memiliki tipe error, sebuah
built-in interface.
func f1(arg int) (int, error) {
if arg == 42 {
//Keyword errors.New membangun nilai error yang dasar dengan memberikan pesan error
return -1, errors.New("can't work with 42")
}
//Nilai nil di dalam posisi terdapatnya error, mengindikasikan bahwa disana tidak terjadi
error
return arg + 3, nil
}
//Hal ini memungkinkanuntuk menggunakan bermacam tipe sama dengan error, dengan cara
mengimplementasikan metode Error() didalamnya. Disini sebuah variant
dalam contoh diatas menggunakan custom type untuk secara ekxplisit
untuk merepresentasikan argument error.
type argError struct {
arg int
prob string
}
func (e *argError) Error() string {
return fmt.Sprintf("%d - %s", e.arg, e.prob)
}
func f2(arg int) (int, error) {
if arg == 42 {
//Dalam kasus ini, kita menggunakan syntax &argError untuk membangun struct baru,
memberukan nilai untuk dua tempat yaitu arg dan prob.
return -1, &argError{arg, "can't work with it"}
}
return arg + 3, nil
}
func main() {
//Kedua loops dibawah melakukan test out setiap dari error-returning functions. Sebuah
catatan bahwa menggunakan inline error check dalam if line hal umum
pada Go.
for _, i := range []int{7, 42} {
if r, e := f1(i); e != nil {
fmt.Println("f1 failed:", e)
} else {
fmt.Println("f1 worked:", r)
}
}
for _, i := range []int{7, 42} {
if r, e := f2(i); e != nil {
fmt.Println("f2 failed:", e)
} else {
fmt.Println("f2 worked:", r)
}
}
//Jika ingin untuk penggunaan pemrograman data dalam custom error, akan dibutuhkannya
mendapat error sebagai contoh dari tipe custom error via type
assertion.
_, e := f2(42)
if ae, ok := e.(*argError); ok {
fmt.Println(ae.arg)
fmt.Println(ae.prob)
}
}
Output
f1 worked: 10
f1 failed: can't work with 42
f2 worked: 10
f2 failed: 42 - can't work with it
42
can't work with it
Source
Comments
Post a Comment