somebug
@somebug

Как используется инкапсуляция в golang?

Всем привет!

Основное время программирую на PHP, сейчас изучаю go.
В PHP нормальной практикой считается делать поля приватными, и создавать для них нужные сеттеры и геттеры.
Интересует насколько это распространено в go и как это реализуется обычно?

Смотря на существующие библиотеки и обучающие материалы, поля в структурах оставляют публичными.
Как бы я сделал:
package domain

import "fmt"

type Customer struct {
	firstName string
	lastName  string
	phone     string
}

func NewCustomer(firstName string, lastName string) *Customer {
	return &Customer{firstName: firstName, lastName: lastName}
}

func (c *Customer) SetPhone(phone string) {
	c.phone = phone
}

func (c Customer) Phone() string {
	return c.phone
}

func (c Customer) FullName() string {
	return fmt.Sprintf("%s %s", c.lastName, c.firstName)
}


Имеет ли право на жизнь код выше?
  • Вопрос задан
  • 973 просмотра
Пригласить эксперта
Ответы на вопрос 1
@deliro
С точки зрения противопоставления одного языка другому — это нормально. С точки зрения дизайна, геттеры и сеттеры — зло и нарушение инкапсуляции, кроме узкой подгруппы объектов — DTO.

https://www.yegor256.com/2014/09/16/getters-and-se...
https://stackoverflow.com/questions/2747721/getter...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы