L
Вот пытаюсь ужимать как-то все
kås
Тогда оптимизация памяти и доступа то что нужно. См видео
Vasily
Вот пытаюсь ужимать как-то все
есть где-то софтина, которая анализирует стуруктуру и предлагает более оптимальный вариант
kås
Спасибо. Но результат не такой как на пхп
Результат единственно правильный. Нельзя по разному хэшануть на разных языках
kås
Может у вас там в пхп лишние символы или ещё что
Vasily
но по факту там оптимайзить можно всякие bool-ы
Sebor▂▅▇█▓▒░
Боже, для меня вчера стало открытием, что порядок полей в структуре влияет на ее размер в памяти. Какие советы можете дать по этому поводу?
Есть линтеры, которые анализируют это. На днях буквально читал статью о статическом анализе кода (на Хабре). Тоже узнал про порядок полей в структуре)
kås
Сейчас скину на пхп
hash_hmac('sha256', block, key)
Fastumkruk
hash_hmac('sha256', block, key)
$m_shop = ''; $m_orderid = '1'; $m_amount = number_format(100, 2, '.', ''); $m_curr = 'USD'; $m_desc = base64_encode('Test'); $m_key = 'Ваш секретный ключ'; $arHash = array( $m_shop, $m_orderid, $m_amount, $m_curr, $m_desc ); /* $arParams = array( 'success_url' => 'http:///new_success_url', //'fail_url' => 'http:///new_fail_url', //'status_url' => 'http:///new_status_url', 'reference' => array( 'var1' => '1', //'var2' => '2', //'var3' => '3', //'var4' => '4', //'var5' => '5', ), ); $key = md5(''.$m_orderid); $m_params = urlencode(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, json_encode($arParams), MCRYPT_MODE_ECB))); $arHash[] = $m_params; */ $arHash[] = $m_key; $sign = strtoupper(hash('sha256', implode(':', $arHash))); ?> <form method="post" action="https://payeer.com/merchant/"> <input type="hidden" name="m_shop" value="<?=$m_shop?>"> <input type="hidden" name="m_orderid" value="<?=$m_orderid?>"> <input type="hidden" name="m_amount" value="<?=$m_amount?>"> <input type="hidden" name="m_curr" value="<?=$m_curr?>"> <input type="hidden" name="m_desc" value="<?=$m_desc?>"> <input type="hidden" name="m_sign" value="<?=$sign?>"> <?php /* <input type="hidden" name="form[ps]" value="2609"> <input type="hidden" name="form[curr[2609]]" value="USD"> */ ?> <?php /* <input type="hidden" name="m_params" value="<?=$m_params?>"> */ ?> <input type="submit" name="m_process" value="send" /> </form>
Fastumkruk
hash_hmac('sha256', block, key)
h := sha256.New() h.Write([]byte(mas[0] + mas[1] + mas[2] + mas[3] + mas[4] + mas[5])) hash := BytesToString(h.Sum(nil)) fmt.Printf("%x", hash) Я делаю так, выводиться. Но не соотвествует с тем что выходит на пхп
Sebor▂▅▇█▓▒░
А это только в го размещение влияет? Или в других языках так же?
Не знаю, статья была про стат анализ только для го
саша
А это только в го размещение влияет? Или в других языках так же?
В C/C++ так же. В Rust по дефолту структура приводится к оптимальному представлению в памяти, если только явно не указать #[repr(c)].
Fastumkruk
L
Видео по теме https://www.youtube.com/watch?v=SjNuCurZ-CY
Спасибо за видео и все кто откликнулся. То что нужно! Буду экономить -_0
Fastumkruk
@Civiloid
Kirill
сильно ли влияет defer на производительность?
У меня в некоторых проектах целиком defer в бане. Там основная ветвь одна и она перегружена
Vladimir
и что в mas[0] и т.п.?
Fastumkruk
и что в mas[0] и т.п.?
Fastumkruk: $m_shop = ''; $m_orderid = '1'; $m_amount = number_format(100, 2, '.', ''); $m_curr = 'USD'; $m_desc = base64_encode('Test'); $m_key = 'Ваш секретный ключ'; $arHash = array( $m_shop, $m_orderid, $m_amount, $m_curr, $m_desc ); /* $arParams = array( 'success_url' => 'http:///new_success_url', //'fail_url' => 'http:///new_fail_url', //'status_url' => 'http:///new_status_url', 'reference' => array( 'var1' => '1', //'var2' => '2', //'var3' => '3', //'var4' => '4', //'var5' => '5', ), ); $key = md5(''.$m_orderid); $m_params = urlencode(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, json_encode($arParams), MCRYPT_MODE_ECB))); $arHash[] = $m_params; */ $arHash[] = $m_key; $sign = strtoupper(hash('sha256', implode(':', $arHash))); ?> <form method="post" action="https://payeer.com/merchant/"> <input type="hidden" name="m_shop" value="<?=$m_shop?>"> <input type="hidden" name="m_orderid" value="<?=$m_orderid?>"> <input type="hidden" name="m_amount" value="<?=$m_amount?>"> <input type="hidden" name="m_curr" value="<?=$m_curr?>"> <input type="hidden" name="m_desc" value="<?=$m_desc?>"> <input type="hidden" name="m_sign" value="<?=$sign?>"> <?php /* <input type="hidden" name="form[ps]" value="2609"> <input type="hidden" name="form[curr[2609]]" value="USD"> */ ?> <?php /* <input type="hidden" name="m_params" value="<?=$m_params?>"> */ ?> <input type="submit" name="m_process" value="send" /> </form> То что закоментированно, нас не интересует
Vladimir
@Fastumkruk ~/go/src/test# php ./test.php string(64) "5862d9cdf85856749ea2f07a0b44ce85ab1e544ceaf8e32906acdea02cd4c813" root@doroboneko:~/go/src/test# go run ./main.go 5862d9cdf85856749ea2f07a0b44ce85ab1e544ceaf8e32906acdea02cd4c813 https://bpaste.net/show/78ce63148960
Vladimir
все одинаково считается
Vladimir
@Fastumkruk https://golang.org/pkg/strings/#Join
Fastumkruk
все одинаково считается
https://play.golang.org/p/4QrnpSLkpGQ Соответсвует ли мой код на ГО, коду который я кинул выше на пхп? Если ошибаюсь, подскажите где.
Oleh
Привет мне нужна подсказка я делаю игру и там есть особи я им сделал вот такой интерфейс type InhabitInterface interface { NextStep() (x, y int) IsBeget() (bool, utils.MoveVect, InhabitInterface) IsGoneAway() bool Force() int GotHit(from InhabitInterface) GetPix() int Draw(t pixel.Target, matrix pixel.Matrix) } друг говорит что лутше вынести метод Draw в другое место и инкапсулировать от структуры с логикой стоит ли? или лутше все в одном месте сделать?
Oleh
Что там по паттернам?
Alex
если есть только такие функции, в которых используются все методы, но нет таких в которых используется какой-то один (и появление невозможно), то это ок
Alex
взять сортировку например из стандартной библиотеки
Pawel
Обычно в Го пишется функция, использующая интерфейс, и лишь потом при необходимости проводится рефакторинг, заключающийся в выносе отдельного интерфейса
Pawel
Вот этот код с жирным интерфесом - это пример худщих практик из джавы
Alex
это да, но человек скорее всего из "очень ооп" языка
L
У вас плохой интерфейс. Обычно в Го интерфейс - это 1 метод. Три - это уже овердофига.
А чем обусловлено использование Интерфейса с одним методом?
L
И где можно про это почитать?
Pawel
не понял вопрос про чем обусловлено. почитать можно в доброй книге по Го Донавана Кернигана.
Pawel
Метод интерфейса - это контракт типа. Чем сложнее контракт, тем больше трудностей с его реализацией и использованием. Соотв. 1 метод при прочих равных - это намного лучше 2
Pawel
У меня в программах на Го сперва пяовляются типы, потом уже я смотрю на их общие методы, и только потом при рефакторинг формулирую абстракции их общего поведения в виде интерфейсов. Изначально же в программе никаких интерфейсов нет, ибо не нужно
Pawel
Изначально думать об особи игрового поля как об объекте с определённым набором методов - это не правильно имхо.
Oleh
Вопрос был такой Нужно ли розделять в отдельные структуры логику особи и функции которые отвечают за гуи Ну и инкапсулировать одно в другое?
Oleh
Duck typing
Oleh
Же
Oleh
Кожно сделать інтерфейс который собирает в себе другие интерфейсы
Pawel
нет смысла пихать всю логику в один тип
Pawel
чем меньше ответственности у класса, тем проще его тетстить, дебажить и понять
Oleh
Класов нету:)
Oleh
Но ок
Pawel
под классами я имею ввиду гошные struct, ООП в го делается через них
Pawel
Вообще идея изначально всё делать на объектах класса - она плохая
Pawel
Security Through Obscurity?
не понял, но имхо нет
Cat
вообще, не давайте вредных советов, даже в рамках троллинга
Pawel
ы?
Cat
> У вас плохой интерфейс. Обычно в Го интерфейс - это 1 метод. Три - это уже овердофига. > Обычно в Го пишется функция, использующая интерфейс, и лишь потом при необходимости проводится рефакторинг, заключающийся в выносе отдельного интерфейса > Вообще идея изначально всё делать на объектах класса - она плохая говорю, жир из монитора потёк
Pawel
по моему у вас в голове что-то протело и забрызгало экран
L
Я считаю не нужно гнаться именно за соблюдением 1 интерфейс - 1 метод. Это похоже больше на утопию, когда у тебя в коде сотня интерфейсов. В чем сложность поддерживать интерфейс с 2-3 методами? В чем не безопасность такого решения? Да, когда у тебя много мелких, тебе их легче объединять в композицию, но имхо, когда интерфейс логически не разделим, нет смысла его дробить.
Pawel
а где я говорил что надо за этим гнаться? Гнаться надо за тем, чтобы не было оверинжиниринга с бесполезно переусложнёнными абстракциями
Slava
В случае с игрой, где много энтити - лучше все через композицию делать
Pawel
я не вижк чтобы методы из преведенного интерфейса были как-то связаны. И когда сперва появляется такой вот интерфейс, а потом к нему пишут реализацию - это такой классический джавоебизм, с которым я борюсь у себя в организации уже много лет
Slava
Поддержу Павла в этом
Pawel
спасибо)
Oleh
Но если я использую в игре
Oleh
Структуру которая только там используется, то не очень вижу смысл ее дробить
Slava
Структура - это имплементация уже
V
Один интерфейс - один метод... сразу на ум приходит file из http.
kås
Ридер же
Alexander
На счет интерфейсов, вот по этому шаблону вот такой результат
Alexander
https://play.golang.org/p/9POLvsjDF6
Alexander
BenchmarkDirect-8 2000000000 1.75 ns/op BenchmarkInterface-8 500000000 3.85 ns/op BenchmarkInterfaceUnknown-8 100000000 19.8 ns/op
Alexander
тут прост выше задавал вопрос на тему быстртдействия
Alexander
Ребят, написал админу, но вдруг он просто бот, а не человечек
Alexander
Нашел такое сообщение t.me/gogolang/89318
Alexander
Вообще я больше по php, но последние полгода активно изучаю/пишу на Go можно ли получить пример тестового задания? чтобы хоть понимать что на рынке от гошников требуется?
Alexander
> Вообще я больше по php мне теперь в этом чате никогда не будут отвечать?
Alexander
Kirill
Народ, у меня объявление: Каждый месяц я буду разыгрывать по от $50 до $100 за: - самую популярную статью об https://github.com/gramework/gramework на таких платформах, как medium, habr.com, digitalocean (если вы хотите опубликовать статью на другой платформе вам нужно написать мне, чтобы я сначала проверил, можно ли автоматически проверить всё нужное для нахождения самой популярной статьи). Автор самой популярной статьи месяца получит деньги. ВНИМАНИЕ: статьи, которые просто копируют примеры из ридми проекта и не дают новых знаний о gramework читателям, не участвуют в акции. - самого активного контрибьютора. Я добавлю специальные баллы в названия тикетов и контрибьютор, собравший наибольшее количество баллов (при этом не меньше 4), получит деньги. Вы можете создавать новые тикеты с вашими пожеланиями, я буду ставить баллы на них. Я сам не участвую в этом рейтинге и не считаю свои же баллы.
Slava
Ровно то же, что и от других программистов требуется