在Go中将struct字段的初始值设置为另一个的初始值

tal*_*onx 6 struct initialization go

在Go中,假设我有这个结构:

type Job struct {
    totalTime int
    timeToCompletion int
}
Run Code Online (Sandbox Code Playgroud)

我初始化一个结构对象,如:

j := Job {totalTime : 10, timeToCompletion : 10}
Run Code Online (Sandbox Code Playgroud)

其中约束timeToCompletion总是等于totalTime创建结构时(它们可以稍后更改).有没有办法在Go中实现这一点,以便我不必初始化两个字段?

icz*_*cza 6

您不能避免必须两次指定值,但惯用的方法是为它创建类似构造函数的创建函数:

func NewJob(time int) Job {
    return Job{totalTime: time, timeToCompletion: time}
}
Run Code Online (Sandbox Code Playgroud)

使用它时,您只需在将其传递给NewJob()函数时指定一次时间值:

j := NewJob(10)
Run Code Online (Sandbox Code Playgroud)