如何在 Golang 中实例化 Type 时捕获错误?

问题描述 投票:0回答:1

给出这段代码:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    alice := Person{Name: "Alice", Age: 17}
    fmt.Printf("alice struct is %v", alice)
}

一切都很好,因为名字是一个字符串,年龄是一个整数。

但是如果出现问题,我们会这样做:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    bob := Person{Name: 99, Age: "Bob"}
    fmt.Printf("bob struct is %v", bob)
}

然后程序无法构建,出现恐慌等情况。

处理此错误的可能性的正确方法是什么?

我做不到

    bob,err := Person{Name: 99, Age: "Bob"}

并在继续之前检查是否有错误。

go types error-handling try-catch
1个回答
0
投票

虽然没有强制执行,但拥有一个构造函数方法被认为是一个很好的做法,该方法用于返回对象,并且您可以在其中包含验证逻辑。

例如:

type Person struct {
    Name string
    Age  int
}

func NewPerson(name string, age int) (*Person, error) {
    if age < 0 {
        return nil, fmt.Errorf(“age must be greater than zero, %d given”, age)
    }

    if name == “” {
        return nil, fmt.Errorf(“the person must have a name!”)
    }

    return &Person{Name: name, Age: age}, nil
}

这样就可以了

bob, err := NewPerson(“bob”, 69)
if err != nil {
    fmt.Errorf(“error creating new person - %w”, err)
}
© www.soinside.com 2019 - 2024. All rights reserved.