Go中的构造函数:如何正确初始化结构体?
大家好!我刚从Java和C#开始学习Go,对构造函数有些困惑。
在Java中,我习惯这样写:
```java
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
```
在Go中,我发现没有`class`关键字,也没有显式的构造函数。我尝试这样做:
```go
type User struct {
name string
age int
}
// 尝试1:直接用相同名字的函数
func User(name string, age int) User {
return User{name: name, age: age}
}
// 错误:User redeclared in this block
// 尝试2:结构体的方法
func (u User) User(name string, age int) User {
return User{name: name, age: age}
}
// 也不行
```
我陷入了困境。如何正确初始化结构体并进行字段验证?例如,我希望年龄不能为负,名字不能为空。在Java中,我会在构造函数里做这些检查。