
Nikolay
15.04.2018
09:28:15
посоны, а есть где почитать, почему и как го игнорирует x86_64 конвенцию при вызовах функций?
то есть не кладет аргументы в регистры

m
15.04.2018
09:34:20
Оно иначе просто думает при компиляции. смотри pprof и потом disasm .
есть ещё где-то статьи по гошнуму ассемблеру. Там описано, как аргументы передаются.

Google

Nikolay
15.04.2018
09:35:29
вроде есть еще разница между gccgo и go


Max
15.04.2018
10:03:25
Господа вопрос от новичка, у меня есть база данных RethinkDB с драйвером gorethink.v4, есть подобного рода код
type Users struct {
Id string `gorethink:"id,omitempty"`
Name string `gorethink:"user_name" json:"name"`
Location UserLocation `gorethink:"location" `
}
type UserLocation struct {
lat float64 `gorethink:"lat" json:"lat"`
lon float64 `gorethink:"lon" json:"lon"`
}
func GetAllUsers(db *Conn.DataBase) func(ctx echo.Context) error {
return func(ctx echo.Context) error {
var users []Users
get, err := r.Table("users")Run(db.Connect)
if err != nil{
fmt.Println(err)
}
get.All(&users)
return ctx.JSON(http.StatusOK, &users)
}
}
проблема в том, что после того как я передаю данные с бд в структуру (`get.All(&users)`), там есть вложенная структура Location UserLocation gorethink:"location" и соответственно она заполняется пустыми значениями, как этого избежать? сейчас ответ выглядит примерно так:
{
"created": Sun Apr 15 2018 16:09:35 GMT+08:00 ,
"id": "011bbb51-b308-4682-8b43-516c6735efb2" ,
"name": "tst" ,
"location": {
"lat": 55.7494733 ,
"lon": 37.35232
} ,
} {
"created": Sat Apr 14 2018 15:05:22 GMT+08:00 ,
"id": "3c44ae61-b250-43eb-8f7d-450abd6e4035" ,
"name": "tst2" ,
"created": Sun Apr 15 2018 16:09:35 GMT+08:00 ,
"id": "011bbb51-b308-4682-8b43-516c6735efb2" ,
"name": "tst" ,
"location": {
"lat": 0.0 ,
"lon": 0.0
} ,
}
а я бы хотел чтобы если запись о данном поле отсутствует в бд, это поле пропускалось бы и в ответе


yuriy
15.04.2018
10:11:07
Господа вопрос от новичка, у меня есть база данных RethinkDB с драйвером gorethink.v4, есть подобного рода код
type Users struct {
Id string `gorethink:"id,omitempty"`
Name string `gorethink:"user_name" json:"name"`
Location UserLocation `gorethink:"location" `
}
type UserLocation struct {
lat float64 `gorethink:"lat" json:"lat"`
lon float64 `gorethink:"lon" json:"lon"`
}
func GetAllUsers(db *Conn.DataBase) func(ctx echo.Context) error {
return func(ctx echo.Context) error {
var users []Users
get, err := r.Table("users")Run(db.Connect)
if err != nil{
fmt.Println(err)
}
get.All(&users)
return ctx.JSON(http.StatusOK, &users)
}
}
проблема в том, что после того как я передаю данные с бд в структуру (`get.All(&users)`), там есть вложенная структура Location UserLocation gorethink:"location" и соответственно она заполняется пустыми значениями, как этого избежать? сейчас ответ выглядит примерно так:
{
"created": Sun Apr 15 2018 16:09:35 GMT+08:00 ,
"id": "011bbb51-b308-4682-8b43-516c6735efb2" ,
"name": "tst" ,
"location": {
"lat": 55.7494733 ,
"lon": 37.35232
} ,
} {
"created": Sat Apr 14 2018 15:05:22 GMT+08:00 ,
"id": "3c44ae61-b250-43eb-8f7d-450abd6e4035" ,
"name": "tst2" ,
"created": Sun Apr 15 2018 16:09:35 GMT+08:00 ,
"id": "011bbb51-b308-4682-8b43-516c6735efb2" ,
"name": "tst" ,
"location": {
"lat": 0.0 ,
"lon": 0.0
} ,
}
а я бы хотел чтобы если запись о данном поле отсутствует в бд, это поле пропускалось бы и в ответе
Location UserLocation gorethink:"location"
Location *UserLocation gorethink:"location"
попробуй так
оно не может пропускаться потому что оно есть как значение
когда get.All создаст тебе юзера он и создаст тебе локейшен автоматически


Max
15.04.2018
10:14:25

yuriy
15.04.2018
10:15:18
оно заполняет ту структуру, что ты даешь

Max
15.04.2018
10:15:40

Roman
15.04.2018
10:38:01
Всем привет, есть объект и нужно создать новый с одним измененным полем, есть такая возможность?
Более подробно:
type Car struct {
maxSpeed int
color string
}
myCar := Car{100, “red”}
anotherCar := Car{speed: 120, …myCar} // создать машину со всеми значениями myCar, но другой скоростью без перечисления всех свойств (их может быть много и поэтому не хочется перечислять)
type Car struct {
maxSpeed int
color string
drivers []string
owner *string
}
func (c *Car) Copy() *Car {
// avoid shallow copies of pointer-types
driversCopy := make([]string, len(c.drivers))
copy(driversCopy, c.drivers)
ownerCopy := *c.owner
return &Car{
// Strings and primitive types are copied by value
maxSpeed: c.maxSpeed,
color: c.color,
drivers: driversCopy,
owner: &ownerCopy,
}
}


yuriy
15.04.2018
10:51:56

Google

Daniel
15.04.2018
10:52:46

yuriy
15.04.2018
10:52:49
но если в структуре указатели то все
да
будешь неделю искать почему наприме у всех машинок одно ускорение, а скорость разная)

Roman
15.04.2018
10:53:25

yuriy
15.04.2018
10:53:50
сработает) смотря чего ты хочешь
может кто-то хочет шейрить данные через указатели
ownerОв например и т.п.

Roman
15.04.2018
10:54:13
а от мутабельности спасает только deep copy

yuriy
15.04.2018
10:54:34
да, только дип копи

Roman
15.04.2018
10:54:36
которую в Go к сожалению приходится писать ручками

Daniel
15.04.2018
10:55:06
потому, что общий случай deep copy нереализуем в принципе

yuriy
15.04.2018
10:55:19
с учетом цикличных структур да

Roman
15.04.2018
10:55:19
но я думаю это далеко не только в Go так, и в JS и C++ и во всех где есть указатели и reference types
в JS вообще извращаются, сериализируют в JSON а потом из JSON парсят сразу для создания deep copy, что конечно-же может повесить процесс если структура цикличная и макс. вложенность не указана

Sergey
15.04.2018
10:59:10

Daniel
15.04.2018
10:59:43
ну - как есть

yuriy
15.04.2018
11:02:50
мне кажется иммутабельность это не про го совсем
разработчики го потратили десятки лет чтобы мы шейрили память с помощью горутин

Roman
15.04.2018
11:03:36

Daniel
15.04.2018
11:03:55
70%

Google

Savely
15.04.2018
11:04:05
в JS всё было в этих неумелых deep copy

Александр
15.04.2018
11:06:08

yuriy
15.04.2018
11:06:46

Roman
15.04.2018
11:08:15

m
15.04.2018
11:09:35
webpack..
его в код вставить можно? Этот можно. Очень удобно. При старте вебсервера даёшь странички, они их сжимает, потом в gzip и вот готовая для отдача бинарная переменная.

Roman
15.04.2018
11:11:53
безопасность, удобность, и не думаю что сильно замедлид компилятор

yuriy
15.04.2018
11:16:43

Daniel
15.04.2018
11:17:26
мы же не про кресты, а про иммутабельные параметры

yuriy
15.04.2018
11:17:42
а я про слово const

Daniel
15.04.2018
11:17:47
которые ключевым словом const обозначаются в сигнатуре

yuriy
15.04.2018
11:19:40
ну как бы такая иммутабельность в многоядерных система мало что гарантирует
я могу не мутировать const а просто его читать
и все равно получать рейс кондишен

Roman
15.04.2018
11:19:57

yuriy
15.04.2018
11:20:52

Daniel
15.04.2018
11:20:56

yuriy
15.04.2018
11:21:17

Roman
15.04.2018
11:25:11
а какой юз кейс для таких объектов был бы в го?
библиотеки например писать fool proof..
вот в моём конкретно случае с https://github.com/qbeon/webwire-go, когда передаю слайс подключённых к серверу клиентов хочется передать иммутабельный лист.
ибо:
// get list of currently connected clients
clients := server.ConnectedClients()
// do some magic written by someone else
thirdPartyFunction(clients)
если где-то в недрах thirdPartyFunction мутирует список - это сломает библиотеку и приведёт к undefined behavior сервера.
Поэтому мне приходится копировать весь слайс при передаче его пользователю библиотеки для обеспечения безопасности, что не эффективно в рантайме.
От этого мог бы защищать компилятор, но... Go же у нас "прагматичный язык", нам же не нужны такие удобности)))

yuriy
15.04.2018
11:25:17
да, это прикольная тема в плане оптимизации памяти
свой пакейдж может возвращать свои рабочие указатели

Google

yuriy
15.04.2018
11:25:18
ага

Yaroslav
15.04.2018
11:45:40
Если кому-то нужен web-дизайнер, то пишите

serbernar
15.04.2018
12:05:19
А если не нужен, то не пишите

Никита
15.04.2018
12:08:07
?

Admin
ERROR: S client not available

Artem
15.04.2018
12:08:44

MrSmeet
15.04.2018
12:09:21
ребят эт вопрос такой
А зачем мне гоу учить вот чет думаю че можно учить смотрю на расты лиспы и тд и думаю что поучить расскажите какие бонусы я получу если начну писать во славу хомяка

Никита
15.04.2018
12:11:42
Если не знаешь зачем — не учи

yuriy
15.04.2018
12:11:55
я так понимаю тут курсы повышения мотивации нужны

Александр
15.04.2018
12:16:24
зарплата в среднем как middle+ php
реактивщики получают больше

yuriy
15.04.2018
12:17:07
а кто-то подавался на нормальные хайлоад позиции заграницу? с 100k+ / год?
в снг да небольшие зп

Roman
15.04.2018
12:25:42

eugene
15.04.2018
12:46:07

Roman
15.04.2018
12:47:13

Subbotin
15.04.2018
12:49:14

eugene
15.04.2018
12:49:46

Google

yuriy
15.04.2018
12:52:41

Alexander
15.04.2018
13:54:29
Есть тут люди которые застали/использовали jms serializer на пыхе?
И те кто теперь перешли на го

MrSmeet
15.04.2018
14:21:01

Александр
15.04.2018
14:21:30
ну это 140-150 в мск
не совсем еда

MrSmeet
15.04.2018
14:21:42

Александр
15.04.2018
14:21:44
но не 200 :(

yuriy
15.04.2018
14:22:10

MrSmeet
15.04.2018
14:22:42

yuriy
15.04.2018
14:22:47
ты сделал 2 вывода, и дал рекомендации о которых никто не просил :)

MrSmeet
15.04.2018
14:23:04