Roman
вы о чем вообще?
https://goplay.space/#2KBFmt9VofV пытаюсь понять почему это вообще возможно
Daniel
и в с++ [] - не функция. и возвращает не копию
Илья
https://goplay.space/#2KBFmt9VofV пытаюсь понять почему это вообще возможно
вы берете указатель на элемент underlying массива, и записываете туда новое значение, что не так?
Daniel
Roman
и в с++ [] - не функция. и возвращает не копию
зависит от имплементации, на самом деле это overloadable function: https://www.geeksforgeeks.org/overloading-subscript-or-array-index-operator-in-c/ // Implementation of [] operator. This function must return a // refernce as array element can be put on left side int &Array::operator[](int index) { if (index >= size) { cout << "Array index out of bound, exiting"; exit(0); } return ptr[index]; } в данном случае [] вернёт копию инта в Array
Daniel
стандартное поведение - не такое
Daniel
(как я ненавижу c++, вы бы знали)
Daniel
вот за это вот все. нечитаемо же.
Илья
потому что перегрузка операторов придумана для людей, которым нечем заняться на выходных
Roman
вы берете указатель на элемент underlying массива, и записываете туда новое значение, что не так?
да всё так, я лишь пытаюсь понять как оно устроено.. видимо &[] это отдельный композитный оператор, ибо на первый взгляд оно выглядит как сочитание index- и reference операторов, но тогда мутации на интах должны бы были быть невозможными, потому-что & брал бы адрес копированного инта в stack'е, поскольку [] возвращает копию но очевидно [] возвращает не копию, но даже если предположить что он возвращает указатель - всё-равно не должны бы было работать, потому-что тогда c был бы типом *int а это значит что & даст нам **int и *c = 2 вообще было бы нелегальным выходит что тут какая-то нестандартная магия
Roman
(как я ненавижу c++, вы бы знали)
аналогично)) но теперь бы ещё понять магию слайсов))
Илья
никакой магии
Илья
как раз нет
Artem
запили уже immut линтер
Roman
запили уже immut линтер
won't work, читайте
Илья
с const poisoning, преферансам и профурсетками
Roman
я сейчас вообще про слайсы и их индекс оператор, не про иммутабельность)
Roman
никакой магии
так если нет магии, то какого типа тогда c?)) он не копия, он не указатель, что он?))
Илья
int
Andrei 🦉
есть тут кто-нибудь, кто использует связку godep и зависимости из приватных репозиториев на gitlab.com? не могу заставить деп вытянуть зависимости ни по ssh ни по https c access токеном
Илья
новый int
Илья
удивительно же! вы создаете переменную, и получаете переменную!
Roman
новый int
окей, если c := a[0] это копия, тогда &a[0] это магия: https://goplay.space/#_okBf0W_i-f
Roman
ибо, ещё раз: если [] возвращает нам копию, то брать адрес копии не должно давать нам адреса самого инта в слайсе
Илья
еще раз a[0] - не копия, но, когда вы создаете переменную, инициализируя ее из другой, происходит копирование
Roman
значит [] это не обычная функция а некая лингвистическая магия Go)
саша
> го > удивляться магии
Andrei 🦉
я прописывал в гитконфиге insteadOf с ssh на https
то есть нормально как в других пакетных менеджерах через Gopkg.toml не разрулить? печально
Artem
ну если он приватный, то там нужны всекие пароли/ключи. тут только сам git поможет
Roman
как и слайс, как и мап
ну вот я это и хотел уточнить
Dmitri
вы не поняли...
Это вы не поняли. Адрес, который указатель, тоже место в памяти занимает
Wingman
/*офтоп*/ камрады, а, совершенно случайно, нет среди присутствующих графана-ниндзей?)
Dmitri
по сути тот же int нет смысла передавать по указателю
Бывает смысл. Если в исходное место надо что-то записать
.
Я правильно понимаю что репозиторий может иметь только CRUD операции типа ListAll, Get, Store, Update, Delete и если допустим мы хотим реализовать метод Restore, который обновляет только одно значение active в нашей таблице, то мы должны использовать обобщенную метод Update, который обновляет данные целиком? Или же можно сделать отдельно метод Restore?
.
ох уж этот rest)) вроде RPC, но вообще не RPC)))
Не, это я про интерфейс к бд)
Илья
не более того
саша
репозиторий скрывает конкретную реализацию
<~> пакет скрывает конкретную реализацию <~> функция скрывает конкретную реализацию
саша
<~> интерфейс скрывает конкретную реализацию
Илья
<~> интерфейс скрывает конкретную реализацию
именно, репозиторий же интерфейс
Andrei 🦉
ну если он приватный, то там нужны всекие пароли/ключи. тут только сам git поможет
там оказывается проблема с подгруппами репозиториев в гитлабе, ни go get ни go dep с ними работать не могут походу
Daniel
чойта?
саша
именно, репозиторий же интерфейс
где это репозиторий — интерфейс?
саша
уж точно не голанге
.
репозиторий скрывает конкретную реализацию
то есть в принципе ок иметь метод Restore?
Aleksandr
причем тут язык? репозиторий - интерфейс к хранилищу. это имеется в виду
Илья
где это репозиторий — интерфейс?
type Repository interface{ } - достаточно интерфейсно?
Messer
Подскажите как внутри функции присвоить запросу контекст?
Илья
то есть в принципе ок иметь метод Restore?
да, ОК иметь методы, которые вам нужны
Илья
вагную, что нужно передать в функцию контекст
Илья
но вопрос пугает
Daniel
я думаю там все сложнее
саша
Почему нет?
потому-что в голанге нет обобщённых интерфейсов
Daniel
возможно, даже рогатые твари
Messer
Есть f(r *http.Request). Внутри функции присвоить ctx := r.Context() сtx = context.WithValue(ctx, "tt", "123") r = r.WithContext(ctx)
саша
то есть в принципе ок иметь метод Restore?
Короче репозиторий это скорее паттерн, а ещё скорее это часть методологии, которая называется Domain Driven Development. А делать вы можете что хотите, законом не запрещено.
Roman
Подвох в том, что нет никакого композитного оператора &[]. Есть две раздельные операции. [0] - получить первый элемент слайса, & - вернуть его адрес
https://goplay.space/#PYb1K0nmmTL ты ошибаешься. Если бы это была 2 операции тогда & взял бы адрес не item'а а копии в стэке, а он берёт именно адрес item'а в array'e под слайсом
Roman
Подвох в том, что нет никакого композитного оператора &[]. Есть две раздельные операции. [0] - получить первый элемент слайса, & - вернуть его адрес
выходит что &[] это не композиция из 2 операторов а вообще отдельный оператор, который берёт адрес item'а.
Artem
ноуп, все еще нет
Он все ещё уверен что она делает копию
Dmitri
Просто посмотрите, как устроен слайс
Roman
ещё раз, будучи бывшим плюсером, я исходил из того, что [] это функция в реализации интерфейса типа слайс. но это оказалось не так, это встроенная в сам язык конструкция
Ilya
Здравствуйте! Что происходит когда структура расширяется при помощи анонимной вложенной структуры, но имеет такие же имена?
Daniel
да, так и есть