Size: a a a

2020 August 22

S

Slava in Go-go!
Привет, подскажите, пожалуйста, интересует следующий момент:
Есть три(в конкретном случае) переменных (простого / скалярного / примитивного ?? как правильно называть ?? ) типа, которые нужно передать в какую - то функцию. Мне не нравится, что у моей функции 3 параметра ( по моему скромному мнению это как - то много ), я бы хотел вместо этого передавать только один. Для этого делаю структурку ( dto ), в которой храню 3 указателя на эти переменные, соответственно перед вызовом функции делаю что - то типа
dto := &myDTO{param1,param2,param3}

Меня интересует, что происходит в этот момент с оперативной памятью, верно ли то, что создаётся указатель, на некоторую область памяти, в которой хранятся те же указатели на мои примитивы (т.е никакого копирования не происходит)?)
источник

p

pragus in Go-go!
Slava
Привет, подскажите, пожалуйста, интересует следующий момент:
Есть три(в конкретном случае) переменных (простого / скалярного / примитивного ?? как правильно называть ?? ) типа, которые нужно передать в какую - то функцию. Мне не нравится, что у моей функции 3 параметра ( по моему скромному мнению это как - то много ), я бы хотел вместо этого передавать только один. Для этого делаю структурку ( dto ), в которой храню 3 указателя на эти переменные, соответственно перед вызовом функции делаю что - то типа
dto := &myDTO{param1,param2,param3}

Меня интересует, что происходит в этот момент с оперативной памятью, верно ли то, что создаётся указатель, на некоторую область памяти, в которой хранятся те же указатели на мои примитивы (т.е никакого копирования не происходит)?)
А зачем вам тут поинтеры?
источник

АЛ

Артем Лазаренко... in Go-go!
Slava
Привет, подскажите, пожалуйста, интересует следующий момент:
Есть три(в конкретном случае) переменных (простого / скалярного / примитивного ?? как правильно называть ?? ) типа, которые нужно передать в какую - то функцию. Мне не нравится, что у моей функции 3 параметра ( по моему скромному мнению это как - то много ), я бы хотел вместо этого передавать только один. Для этого делаю структурку ( dto ), в которой храню 3 указателя на эти переменные, соответственно перед вызовом функции делаю что - то типа
dto := &myDTO{param1,param2,param3}

Меня интересует, что происходит в этот момент с оперативной памятью, верно ли то, что создаётся указатель, на некоторую область памяти, в которой хранятся те же указатели на мои примитивы (т.е никакого копирования не происходит)?)
Ты ж ссылку передаешь, значит ничего не копируется. А что ты не сделал так
func myFunc(param... тип)
источник

АЛ

Артем Лазаренко... in Go-go!
Ну или интерфейс если параметры разных типов
источник

н

немедленно in Go-go!
интерфейс такое себе
источник

ЛА

Локоть Анатолий... in Go-go!
Артем Лазаренко
Ты ж ссылку передаешь, значит ничего не копируется. А что ты не сделал так
func myFunc(param... тип)
Копируется во всех случаях. Но в одном указатель копируется на стеке, при этом указатель указывает на область памяти в хипе (где хранится значение структуры).

Без указателя на стеке копируется сразу значение структуры, которое несколько больше указателя.
При использовании хипа доступ к этой памяти дольше, также она чистится мусорщиком.
В то время как стек функции очищается автоматически при завершении функции.
Принимая в расчет все обстоятельства, использовать указатели может оказаться не столь эффективно.
источник

с

сонная википедия... in Go-go!
если указатель живет только внутри функции, то там не будет аллокации, так что это все так же эффективно
источник

VK

Vadim K in Go-go!
Slava
Привет, подскажите, пожалуйста, интересует следующий момент:
Есть три(в конкретном случае) переменных (простого / скалярного / примитивного ?? как правильно называть ?? ) типа, которые нужно передать в какую - то функцию. Мне не нравится, что у моей функции 3 параметра ( по моему скромному мнению это как - то много ), я бы хотел вместо этого передавать только один. Для этого делаю структурку ( dto ), в которой храню 3 указателя на эти переменные, соответственно перед вызовом функции делаю что - то типа
dto := &myDTO{param1,param2,param3}

Меня интересует, что происходит в этот момент с оперативной памятью, верно ли то, что создаётся указатель, на некоторую область памяти, в которой хранятся те же указатели на мои примитивы (т.е никакого копирования не происходит)?)
Скалярный тип у вас случаем не строка?))0
источник

VK

Vadim K in Go-go!
Я не совсем понял, зачем тут указатель на структуру, которая содержит указатели. Это такая попытка что-то сэкономить?
источник

ЛА

Локоть Анатолий... in Go-go!
сонная википедия
если указатель живет только внутри функции, то там не будет аллокации, так что это все так же эффективно
Речь вроде бы шла о передаче указателя параметром в функцию.
Товарищ начал с того, что у него 3 параметра и это много и решил вместо них передать структуру, точнее указатель на нее
источник

с

сонная википедия... in Go-go!
Локоть Анатолий
Речь вроде бы шла о передаче указателя параметром в функцию.
Товарищ начал с того, что у него 3 параметра и это много и решил вместо них передать структуру, точнее указатель на нее
если эскейп анализ сможет доказать, что в этой функции указатель не убегает(например, если она инлайнится), то аллокации не будет
источник

с

сонная википедия... in Go-go!
и не важно что вы передаете
источник

с

сонная википедия... in Go-go!
указатель на структуру, указатель на структуру с указателями и тд
источник

АЛ

Артем Лазаренко... in Go-go!
сонная википедия
если эскейп анализ сможет доказать, что в этой функции указатель не убегает(например, если она инлайнится), то аллокации не будет
🤔 нехуху не понятно
источник

АД

Алексей Долгов... in Go-go!
Я думаю тут имелось в виду
db = sql.NewConnection(addr,driver,debug,logger,timezone)
vs
db = sql.NewConnection(&sql.ConnectionOptions{
   Addr:   "addr",
   Driver: "mysql",
   Debug:  "debug",
   Logger: logger,
   TimeZone: timezone
 })

Ну типа во втором случае удобнее добавлять новые аргументы в функцию и это понятнее и читабельнее.
Но автора интересовала производительность
источник

KR

Kai Ren in Go-go!
Артем Лазаренко
🤔 нехуху не понятно
источник
2020 August 23

ЕК

Евгений Коновалов... in Go-go!
не подскажете, можно ли на go парсить такой файл, секции [Index] и  [BoardData<1>] представляют собой ini формат, а вот секция [LotNames] уже таблица - [Index]
Format=CERBERUS
Version=2.3000
Machine=NPM
Date=2020/08/11,18:57:24
AuthorType=Machine
Author=NPM
MJSID="Brain-1"
Comment=""
Diff=NO

[LotNames]
IDNUM LotNum Lot MCFileName Filter AutoChg BaseChg Lane ProductionID SimProduct DGSPCBName DGSPCBRev DGSPCBSide DGSRefPin C DataGenMode MountHead VSTPath Order TargetTact
1736 1 "NPM_brain-1_p" "NPM_brain-1_p" 0 0 0 1 "" 0 "NPM_brain-1" "1" "T" "" "" 0 0 "" 0 0.000
1737 2 "NPM_brain-1_s" "NPM_brain-1_s" 0 0 0 1 "" 0 "NPM_brain-1" "1" "B" "1*H" "" 0 0 "" 0 0.000

[BoardData<1>]
X=200.140
Y=200.600
Z=1.500
OrgOffsetX=0.000
OrgOffsetY=0.000
OrgType=Left,Front
Carrier=NO
SecPosOffset=0.000
ProductNum=1
CarrierH=0.000
BackH=0.000
WarpTolerance=0.000
источник

с

сонная википедия... in Go-go!
читать каждый раз до [ или конца файла, проверять значение до ] и парсить в зависимости от значения
источник

ЕК

Евгений Коновалов... in Go-go!
спасибо
источник

@

@mr_tron in Go-go!
Главное чтоб в значениях не было квадратных скобок
источник