Go имеет концепцию «Конструкторы» , которая может охватывать ваш вариант использования. В сочетании с экспортом это позволяет инкапсулировать инициализацию, скрывая специфику расчета от абонентов:
package main
//Define declare variables
type Define struct {
len int
breath int
area int
}
func (e Define) Area() int {
return e.area
}
func NewDefine(l, b int) Define {
d := Define{
len: l,
breath: b,
area: calculateArea(l, b),
}
return d
}
Шаблон для фокусировки - это экспортированный NewX
. Очень часто встречаются конструкторы с именем NewX
, которые инициализируют и возвращают структуру. Вышеуказанные делегаты неэкспортированной функции calculateArea
. Конечно, есть много разных способов структурирования вашей программы. calculateArea
все еще инкапсулирует вычисление площади для тривиального модульного тестирования, в то же время скрывая его от вызывающих, не экспортируя его.