Структуры (Structures): Структуры в Go - это коллекция полей разных типов данных. Они позволяют объединять связанные данные в одну единицу. Структуры могут содержать как поля базовых типов (int, string, bool), так и другие структуры. Пример:
```go
type Person struct {
Name string
Age int
}
func main() {
p := Person{Name: “John“, Age: 25}
(, )
}
Структуру можно инициализировать, не передавая значения. В этом случае каждое поле примет свое «нулевое» значение:
func main() {
p := Person{}
// ““
// 0
}
Регистр первой буквы в названии структуры и полей означает публичность точно так же, как в переменных и функциях. Если первая буква заглавная, то структуру можно инициализировать во внешних пакетах. В противном случае она доступна только в рамках текущего пакета:
type Person struct { // структура публична
Name string // поле публично
wallet wallet // поле приватно: можно обращаться только внутри текущего пакета
}
type wallet struct { // структура приватна: можно инициализировать только внутри текущего пакета
id string
moneyAmount float64
}
У любого поля структуры можно указать теги. Они используются для метаинформации о поле для сериализации, валидации, маппинга данных из БД и тд. Тег указывается после типа данных через бектики:
type User struct {
ID int64 `json:“id“ validate:“required“`
Email string `json:“email“ validate:“required,email“`
FirstName string `json:“first_name“ validate:“required“`
}
Тег json используется для названий полей при сериализации/десериализации структуры в json и обратно:
package main
import (
“encoding/json“
“fmt“
)
type User struct {
ID int64 `json:“id“`
Email string `json:“email“`
FirstName string `json:“first_name“`
}
func main() {
u := User{}
= 22
= “test@“
= “John“
bs, _ := (u)
(string(bs)) // {“id“:22,“email“:“test@“,“first_name“:“John“}
}
Тег validate используется Go-валидатором. В следующем примере присутствует вызов функции у структуры (u). Функции структур — методы — мы разберем подробно в соответствующем уроке, а пока просто посмотрите, как происходит вызов:
package main
import (
“fmt“
““
)
type User struct {
ID int64 `validate:“required“`
Email string `validate:“required,email“`
FirstName string `validate:“required“`
}
func main() {
// создали пустую структуру, чтобы проверить валидацию
u := User{}
// создаем валидатор
v := ()
// метод Struct валидирует переданную структуру и возвращает ошибку `error`, если какое-то поле некорректно
((u))
}
Вывод программы:
Key: ’’ Error:Field validation for ’ID’ failed on the ’required’ tag
Key: ’’ Error:Field validation for ’Email’ failed on the ’required’ tag
Key: ’’ Error:Field validation for ’FirstName’ failed on the ’required’ tag
Задание
На сервер приходит HTTP-запрос. Тело запроса парсится и мапится в модель. Сразу работать с моделью нельзя, потому что данные могут быть неверными.
Реализуйте функцию Validate(req UserCreateRequest) string, которая валидирует запрос и возвращает строку с ошибкой “invalid request“, если модель невалидна. Если запрос корректный, то функция возвращает пустую строку. Правила валидации и структура модели описаны ниже. Не используйте готовые библиотеки и опишите правила самостоятельно.
type UserCreateRequest struct {
FirstName string // не может быть пустым; не может содержать пробелы
Age int // не может быть 0 или отрицательным; не может быть больше 150
}
Наличие пробелов можно проверить с помощью функции (firstName, “ “).
808 views
174
36
1 week ago 00:25:51 2
[HakuPlz!] Я ПРОШЕЛ OUTLAST НА 100% И ВЕРНУЛ ДЕНЬГИ
1 week ago 00:00:52 1
❌ Пимафуцин мазь для женщин от молочницы цена 🔴 Клотримазол тева крем при молочнице у женщин
1 week ago 01:02:21 8
[Vadim Key] ШТУТГАРТ 🇩🇪: Город автомобильных легенд или большая деревня? ТОП-места и личный опыт жизни в городе.
1 week ago 00:17:10 4
[Телеканал ICTV] “ПРОРЫВ“ в российской НАУКЕ: хотели сделать СМАРТФОН, а получились ВТУЛКИ для ТУАЛЕТНОЙ БУМАГИ?
1 week ago 00:03:42 1
“Angry“ переводится как “сердитый“, “гневный“, “раздражённый“: перевод, транскрипция, произношение, примеры
1 week ago 00:03:09 1
“Angle“ переводится как “угол“: перевод, транскрипция, произношение, примеры
1 week ago 00:04:04 3
“Anniversary“ переводится как “годовщина“, “юбилей“: перевод, транскрипция, произношение, примеры
1 week ago 00:00:59 1
ВИНИРЫ УСТАНОВКА В МОСКВЕ ЦЕНА 😬
1 week ago 00:01:25 25
Десант освободил Дарьино в Суджанском районе Курской области!
1 week ago 00:04:01 1
“Analyse“ (в американском варианте “analyze“) переводится как “анализировать“, изучать
1 week ago 00:03:42 1
Слово “anger“ в английском языке переводится как “гнев“ или “злость“. транскрипция, произношение
1 week ago 00:03:32 1
Слово “and“ — это одно из самых распространенных слов в английском языке. Оно выполняет роль соединителя
1 week ago 00:01:53 2
😎 Работа в интернете писать отзывы ❌ Работа онлайн на вайлдберриз и озон 🔵
1 week ago 01:37:07 26
Играем на ОГС в честь Хеллоуина!
1 week ago 00:01:53 1
🌈 ЗАРАБОТОК В ИНТЕРНЕТЕ ЯНДЕКС ЗАДАНИЯ ОТЗЫВЫ ⛔ РАБОТА НА ДОМУ ЕЖЕДНЕВНАЯ ОПЛАТА ❗
1 week ago 00:01:53 1
💶 ИЩУ РАБОТУ НА ДОМУ В ДЕНЬ 💡
1 week ago 02:06:49 27
Архетипы триграмм. 8 ролей, в которые мы играем.
1 week ago 00:01:53 2
💵 Заработок в интернете фотошоп 🔔 Заработок удаленно 2024 ❕
1 week ago 01:00:29 7
4 ВОПРОСИТЕЛЬНЫЕ ПРЕДЛОЖЕНИЯ
1 week ago 00:01:53 1
👍 Работа ежедневно волжский 🎁
1 week ago 00:00:42 42
‼️Десант освободил Дарьино в Суджанском районе Курской области!
1 week ago 00:00:42 2.4K
Освобожден населенный пункт Дарьино в Суджанском районе Курской области. Видео от крылатой пехоты из штурмовой роты, 2-го баталь
1 week ago 00:45:33 45
ВСЁ СОЦИАЛЬНЫЕ ОТНОШЕНИЯ за ЧАС | ОГЭ и ЕГЭ по обществознанию
1 week ago 01:00:19 5
Фразовые глаголы с have, has и had: ключ к естественной речи на английском