
Aleksandr
20.09.2018
14:29:21
точнее смесь. logic и data - домен и инфра

Maksim
20.09.2018
14:29:30

Aleksandr
20.09.2018
14:29:58
application пропущен, ну понятно - он между первым и вторым

Maksim
20.09.2018
14:30:36

Google

Maksim
20.09.2018
14:31:45
в данной схеме логируй где хочешь. Хуже не будет. Это иллюзия какой-то архитектуры.

Никита
20.09.2018
14:32:06
Скиньте материалов по хорошей архитектуре, я прочту

Maksim
20.09.2018
14:32:54
Гамма следом)
если твою картинку разбить на множество контекстов в рамках приложеньки, будет толк.
а так, не уверен.

Алексей
20.09.2018
14:34:58

Aleksandr
20.09.2018
14:34:58
эванса после вернона, если второго осилишь - иначе решишь бросить программирование) эванс очень тяжело читается без опыта чтения подобной литературы

Maksim
20.09.2018
14:35:47

Aleksandr
20.09.2018
14:36:10
а мартин и фаулер - это один человек)

Алексей
20.09.2018
14:36:10

Maksim
20.09.2018
14:36:21

Alexander
20.09.2018
14:37:27

Maksim
20.09.2018
14:37:29

Google

Aleksandr
20.09.2018
14:37:46

Maksim
20.09.2018
14:38:05
ты с бобом явно попутал)
в смысле что роберт = дядя боб
а что касается гаммы, то его читать в самом конце. Субъективно, конечно, но он идёт просто пздц как туго.

Лемур
20.09.2018
14:42:09
подскажите.
хочу сделать
map[хэш]time.Time
хэш надо считать от двух uint64
Как это сделать бысрее всего?
Или проще сделать
map[uint64]map[unit64]time.Time

Mykyta
20.09.2018
14:43:41

Лемур
20.09.2018
14:44:51

Mykyta
20.09.2018
14:44:55

Лемур
20.09.2018
14:45:15
спасибо)

Pawel
20.09.2018
14:45:56
Есть 10 денег на то, чтобы построить MVP, еще 10 чтобы добить до окупаемости. Отсюда определение репозитория, которое просили, чистой архитектуры и т.п. вещей - пишешь на 10 вместо фич юнит-тесты, клин архитектуру, репозитории, еще на 10 денег яростно рефактиришь. И оказываешься с прекрасным кодом, который делает только четверть нужного для окупаемости, без денег.

Maksim
20.09.2018
14:47:28
всё никак не угомонится)

Алексей
20.09.2018
14:48:02
Есть 10 денег на то, чтобы построить MVP, еще 10 чтобы добить до окупаемости. Отсюда определение репозитория, которое просили, чистой архитектуры и т.п. вещей - пишешь на 10 вместо фич юнит-тесты, клин архитектуру, репозитории, еще на 10 денег яростно рефактиришь. И оказываешься с прекрасным кодом, который делает только четверть нужного для окупаемости, без денег.
Если написал и забыл, то да, репозитории не нужны. Если написал и надо поддерживать, то тут либо строишь архитектуру, либо из-за технического долга вводишь новые фичи со скоростью черепахи.

Pawel
20.09.2018
14:48:34

Maksim
20.09.2018
14:49:04
поэтому да, бесполезный набор буковок

Pawel
20.09.2018
14:50:04

Алексей
20.09.2018
14:50:20
все провалились

Google

Maksim
20.09.2018
14:50:29
сиди дальше с крудами, я уважаю твой выбор.

Roman
20.09.2018
14:52:28

Eugenii
20.09.2018
14:53:32
Подскажите насколько плохая идея назначать метод вложенному объекту, что бы получить некоторое подобие абстрактного класса? что то типа такого
https://play.golang.org/p/eqcGOwQXM9T
такую штуку реализовал и даже все работает, но терзают сомнения

Мерлин
20.09.2018
14:57:06
То же самое можно и нужно делать с интерфейсами


Макс
20.09.2018
14:58:41
подскажите в чем ошибка
type rawDataSQL struct {
id sql.NullInt64
title sql.NullString
tag sql.NullString
img sql.NullString
imghover sql.NullString
createdAt sql.NullString
updatedAt sql.NullString
}
type dataSQLStruct struct {
ID int json:"id"
Title string json:"Title"
Tag string json:"Tag"
Img string json:"Img"
Imghover string json:"Imghover"
CreatedAt string json:"CreatedAt"
UpdatedAt string json:"UpdatedAt"
}
var (
dataSQL rawDataSQL
result []dataSQLStruct
err error
)
rows, err := postgres.DB.Query("SELECT * FROM categories")
if err != nil {
log.Println("Get categories error #1", err)
return
}
defer func() {
if err != nil {
ctx.SetCode(http.StatusServiceUnavailable)
} else {
ctx.JSON(result)
}
err = rows.Close()
if err != nil {
log.Println("Get categories error #2", err)
}
}()
for rows.Next() {
err = rows.Scan(
&dataSQL,
)
if err != nil {
log.Println("Proplan getCountBotPaymentTimeAll error #1", err)
continue
}
data := dataSQLStruct{
ID: int(dataSQL.id.Int64),
Title: dataSQL.title.String,
Tag: dataSQL.tag.String,
Img: dataSQL.img.String,
Imghover: dataSQL.imghover.String,
CreatedAt: dataSQL.createdAt.String,
UpdatedAt: dataSQL.updatedAt.String,
}
result = append(result, data)
}
Proplan getCountBotPaymentTimeAll error #1 sql: expected 7 destination arguments in Scan, not 1


Kirill
20.09.2018
14:59:20
подскажите в чем ошибка
type rawDataSQL struct {
id sql.NullInt64
title sql.NullString
tag sql.NullString
img sql.NullString
imghover sql.NullString
createdAt sql.NullString
updatedAt sql.NullString
}
type dataSQLStruct struct {
ID int json:"id"
Title string json:"Title"
Tag string json:"Tag"
Img string json:"Img"
Imghover string json:"Imghover"
CreatedAt string json:"CreatedAt"
UpdatedAt string json:"UpdatedAt"
}
var (
dataSQL rawDataSQL
result []dataSQLStruct
err error
)
rows, err := postgres.DB.Query("SELECT * FROM categories")
if err != nil {
log.Println("Get categories error #1", err)
return
}
defer func() {
if err != nil {
ctx.SetCode(http.StatusServiceUnavailable)
} else {
ctx.JSON(result)
}
err = rows.Close()
if err != nil {
log.Println("Get categories error #2", err)
}
}()
for rows.Next() {
err = rows.Scan(
&dataSQL,
)
if err != nil {
log.Println("Proplan getCountBotPaymentTimeAll error #1", err)
continue
}
data := dataSQLStruct{
ID: int(dataSQL.id.Int64),
Title: dataSQL.title.String,
Tag: dataSQL.tag.String,
Img: dataSQL.img.String,
Imghover: dataSQL.imghover.String,
CreatedAt: dataSQL.createdAt.String,
UpdatedAt: dataSQL.updatedAt.String,
}
result = append(result, data)
}
Proplan getCountBotPaymentTimeAll error #1 sql: expected 7 destination arguments in Scan, not 1
Гошка из коробки не даёт маршалить и анмаршалить приватные поля


Roman
20.09.2018
14:59:25
подскажите в чем ошибка
type rawDataSQL struct {
id sql.NullInt64
title sql.NullString
tag sql.NullString
img sql.NullString
imghover sql.NullString
createdAt sql.NullString
updatedAt sql.NullString
}
type dataSQLStruct struct {
ID int json:"id"
Title string json:"Title"
Tag string json:"Tag"
Img string json:"Img"
Imghover string json:"Imghover"
CreatedAt string json:"CreatedAt"
UpdatedAt string json:"UpdatedAt"
}
var (
dataSQL rawDataSQL
result []dataSQLStruct
err error
)
rows, err := postgres.DB.Query("SELECT * FROM categories")
if err != nil {
log.Println("Get categories error #1", err)
return
}
defer func() {
if err != nil {
ctx.SetCode(http.StatusServiceUnavailable)
} else {
ctx.JSON(result)
}
err = rows.Close()
if err != nil {
log.Println("Get categories error #2", err)
}
}()
for rows.Next() {
err = rows.Scan(
&dataSQL,
)
if err != nil {
log.Println("Proplan getCountBotPaymentTimeAll error #1", err)
continue
}
data := dataSQLStruct{
ID: int(dataSQL.id.Int64),
Title: dataSQL.title.String,
Tag: dataSQL.tag.String,
Img: dataSQL.img.String,
Imghover: dataSQL.imghover.String,
CreatedAt: dataSQL.createdAt.String,
UpdatedAt: dataSQL.updatedAt.String,
}
result = append(result, data)
}
Proplan getCountBotPaymentTimeAll error #1 sql: expected 7 destination arguments in Scan, not 1
вы хотя-бы код форматируйте или на playground кидайте..


Kirill
20.09.2018
14:59:39
А, там ещё код был


Mykyta
20.09.2018
14:59:45
подскажите в чем ошибка
type rawDataSQL struct {
id sql.NullInt64
title sql.NullString
tag sql.NullString
img sql.NullString
imghover sql.NullString
createdAt sql.NullString
updatedAt sql.NullString
}
type dataSQLStruct struct {
ID int json:"id"
Title string json:"Title"
Tag string json:"Tag"
Img string json:"Img"
Imghover string json:"Imghover"
CreatedAt string json:"CreatedAt"
UpdatedAt string json:"UpdatedAt"
}
var (
dataSQL rawDataSQL
result []dataSQLStruct
err error
)
rows, err := postgres.DB.Query("SELECT * FROM categories")
if err != nil {
log.Println("Get categories error #1", err)
return
}
defer func() {
if err != nil {
ctx.SetCode(http.StatusServiceUnavailable)
} else {
ctx.JSON(result)
}
err = rows.Close()
if err != nil {
log.Println("Get categories error #2", err)
}
}()
for rows.Next() {
err = rows.Scan(
&dataSQL,
)
if err != nil {
log.Println("Proplan getCountBotPaymentTimeAll error #1", err)
continue
}
data := dataSQLStruct{
ID: int(dataSQL.id.Int64),
Title: dataSQL.title.String,
Tag: dataSQL.tag.String,
Img: dataSQL.img.String,
Imghover: dataSQL.imghover.String,
CreatedAt: dataSQL.createdAt.String,
UpdatedAt: dataSQL.updatedAt.String,
}
result = append(result, data)
}
Proplan getCountBotPaymentTimeAll error #1 sql: expected 7 destination arguments in Scan, not 1
в скан передан только dataSQL, а надо 7 параметров


Макс
20.09.2018
15:00:27

Макс
20.09.2018
15:00:50

Mykyta
20.09.2018
15:00:50

Макс
20.09.2018
15:01:34
Оно так не умеет
т.е. надо создать необходимое кл-во переменных
и другого способа нет

Mykyta
20.09.2018
15:01:41

Roman
20.09.2018
15:01:42

Mykyta
20.09.2018
15:02:01

Макс
20.09.2018
15:02:02
спасибо огромное

Mykyta
20.09.2018
15:02:52

Google

Eugenii
20.09.2018
15:06:20
хорошо, данке шон
пытался спрашивать гугл, но что то не удачно, своим решениям еще не до конца доверяю


Макс
20.09.2018
15:10:17
сделал так
``` type rawDataSQL struct {
id sql.NullInt64
title sql.NullString
tag sql.NullString
img sql.NullString
imghover sql.NullString
createdAt sql.NullString
updatedAt sql.NullString
}
type dataSQLStruct struct {
ID int json:"id"
Title string json:"Title"
Tag string json:"Tag"
Img string json:"Img"
Imghover string json:"Imghover"
CreatedAt string json:"CreatedAt"
UpdatedAt string json:"UpdatedAt"
}
var (
dataSQL rawDataSQL
result []dataSQLStruct
err error
)
rows, err := postgres.DB.Query("SELECT * FROM categories")
if err != nil {
log.Println("Get categories error #1", err)
return
}
defer func() {
if err != nil {
ctx.SetCode(http.StatusServiceUnavailable)
} else {
ctx.JSON(result)
}
err = rows.Close()
if err != nil {
log.Println("Get categories error #2", err)
}
}()
for rows.Next() {
err = rows.Scan(
&dataSQL.id,
&dataSQL.title,
&dataSQL.tag,
&dataSQL.img,
&dataSQL.imghover,
&dataSQL.createdAt,
&dataSQL.updatedAt,
)
if err != nil {
log.Println("Proplan getCountBotPaymentTimeAll error #1", err)
continue
}
data := dataSQLStruct{
ID: int(dataSQL.id.Int64),
Title: dataSQL.title.String,
Tag: dataSQL.tag.String,
Img: dataSQL.img.String,
Imghover: dataSQL.imghover.String,
CreatedAt: dataSQL.createdAt.String,
UpdatedAt: dataSQL.updatedAt.String,
}
result = append(result, data)
}
https://play.golang.org/p/v8sdrLYCH6Q


Виктор
20.09.2018
15:11:27
в конце сообщения не хватает ```, кажется

Макс
20.09.2018
15:11:30
спасибо
понял

Lesha
20.09.2018
15:14:43

Roman
20.09.2018
15:19:26
Roman Poletaev:
Что даёт RunParallel в бенчмарках?

Admin
ERROR: S client not available

Artem
20.09.2018
15:32:36

Алексей
20.09.2018
15:32:45

Maksim
20.09.2018
15:33:38

Алексей
20.09.2018
15:34:40

Maksim
20.09.2018
15:35:11
ну прям прорывного нового, нет

Alexander
20.09.2018
15:39:21

Maksim
20.09.2018
15:39:44
gof - просто справочник, по своей сути

Алексей
20.09.2018
15:39:50

Alexander
20.09.2018
15:40:29
Гоф - про код. EIP внезапно скорее про архитектуру приложения или взаимодействия между несколькими приложениями

Никита
20.09.2018
15:40:52

Alexander
20.09.2018
15:41:09
Ентерпрайз Интегрейшн Паттернз

Google

Maksim
20.09.2018
15:41:17
Enterprise Integration Patterns

Kirill
20.09.2018
15:42:19
Ethereum Improvement Proposal

Fastumkruk ✅
20.09.2018
15:43:24
Всем привет. А почему рандом всегда одни и те же цифры выдает? https://play.golang.org/p/fkGMsoe9hvO

Ilia
20.09.2018
15:43:44
ограничение песочницы

Stanislav
20.09.2018
15:44:06

Alexander
20.09.2018
15:44:15
EIP очень хорошо заходит, если есть в языке или экосистеме фреймворк или либа, которая их реализует. Например в джяве есть отличный Apache Camel. Ну в целом можно и так паттерны EIP знать, чтобы в случае чего не велосипедить именно с точки зрения проектирования

Fastumkruk ✅
20.09.2018
15:44:17

Stanislav
20.09.2018
15:44:27
где инициализация?

Fastumkruk ✅
20.09.2018
15:45:03

Stanislav
20.09.2018
15:45:59
инициализации ручной нет - уникальность не гарантируется

eugene
20.09.2018
15:50:41

Fastumkruk ✅
20.09.2018
15:51:53

eugene
20.09.2018
15:52:23

Fastumkruk ✅
20.09.2018
15:52:27

eugene
20.09.2018
15:52:57
да
а если у себя скомпилите\запустите?

Aleksandr
20.09.2018
15:53:01
да
в реальных условиях проверяй

Nyan
20.09.2018
15:54:01
в плейграунде функция получения текущего времени всегда возвращает 1257894000000000000

Fastumkruk ✅
20.09.2018
15:54:19