如何在Go中正确创建构造函数,如果语言中没有类和构造函数?
大家好!我刚从Python和Java开始学习Go,遇到了一个严重的障碍。Go没有传统意义上的类,也没有构造函数。那么如何创建具有复杂初始化逻辑的对象呢?
假设我想创建一个`User`结构体,包含`Name`、`Email`和`Age`字段。理想情况下,我希望在创建用户时验证email的有效性,年龄不能为负,名字不能为空。在Python中我会写`__init__`,在Java中我会写带检查的构造函数。那么在Go中该怎么做?
目前我是这样做的:
```go
type User struct {
Name string
Email string
Age int
}
func main() {
u := User{
Name: "Alice",
Email: "alice@example.com",
Age: 30,
}
// 但这里没有检查!可以创建名字为空或年龄为-5的User。
fmt.Println(u)
}
```
我明白在Go中可以直接声明结构体并填充字段,但这不安全。需要某种函数来保证