• Парсер JSON на PHP или Python?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    JSON не надо парсить, это стандартизированный формат, для чтения которого есть библиотеки на почти каждом языке. Нужно просто читать. Это самая элементарная вещь, не требующая вообще ума.
    Ответ написан
    3 комментария
  • Как просмотреть содержание POST запроса в Chrome?

    @sputnic
    Android Developer
    используйте Fiddler
    Ответ написан
    Комментировать
  • Как просмотреть содержание POST запроса в Chrome?

    Зайти в консоль разработчика, выбрать вкладку Network, поставить галочку Preverse log, отправить сообщение и смотреть результат.
    Ответ написан
    Комментировать
  • Как приложение electron положить скрипт написанный на golang?

    @rPman
    скрипт придется компилировать, либо заранее либо таскать с собой golang (гуглить: portable golang) если же нужно еще и оффлайн, то заранее подгрузи нужные зависимости
    запуск приложения из electron:
    var child = require('child_process').execFile;
    var executablePath = "myapp.exe";
    var parameters = ["--my_param"];
    
    child(executablePath, parameters, function(err, data) {
         console.log(err)
         console.log(data.toString());
    });
    Ответ написан
    Комментировать
  • Как изменять контент готового сайта?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    1. Менять руками в коде.
    2. Написать бек c нуля на php/python/nodeJS/Java
    3. Использовать готовую цмс (которую вы, кстати, указали в тегах)
    Ответ написан
    Комментировать
  • Из-за чего, когда я конвертирую байты в строку и обратно, то байты отличаются?

    В первом примере вы не конвертируете байты в строку и обратно. Вы конвертируете байты в их хекс-коды, а потом еще раз конвертируете результат в хекс-коды. Логично, что у вас не получается одинаковой строки, ибо вы два раза кодируете и ни одного раза не декодируете.
    Если вам нужно положить какие-то бинарные данные во что-то, что поддерживает только ASCII-текст, используйте лучше base64.
    https://go.dev/play/p/NPrAMrsHZje
    package main
    
    import (
    	"encoding/base64"
    	"fmt"
    )
    
    func main() {
    	srcString := "Привет, тут есть юникод"
    	fmt.Println("Исходный текст:", srcString)
    
    	codedStr := base64.StdEncoding.EncodeToString([]byte(srcString))
    	fmt.Println("После кодирования:", string(codedStr))
    
    	resBytes, err := base64.StdEncoding.DecodeString(codedStr)
    	if err != nil {
    		fmt.Println("Ошибка декодирования:", err)
    		return
    	}
    	resString := string(resBytes)
    	fmt.Println("После декодирования обратно:", resString)
    }
    Ответ написан
    Комментировать
  • Из-за чего, когда я конвертирую байты в строку и обратно, то байты отличаются?

    Ничего удивительного.
    В документации указано что делает %x в Sprintf.

    Если нужно убедиться в корректности в строке, то использовать strings.ToValidUTF8.
    Ответ написан
    Комментировать
  • Как организовать работу микросервисов в kafka?

    Почему Kafka? Почему микросервисы?
    1. Принимает запрос и отправляет его в kafka.
    От кого принимает и каким образом? Какой выдается ответ и каким образом?
    Нужно разделить интернет-магазин на логические части. Проверить какие запросы могут обслуживаться синхронно, а какие - отложенно (асинхронно).
    Когда на складе остается мало товара, пользователь должен знать об этом. Еще можно показывать наличие товара только если имеется свыше X единиц. А с точки зрения СУБД можно применить оптимистическую блокировку записи.
    Ответ написан
    Комментировать
  • Go run автоматическая пересборка при изменении кода?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Я использую github.com/cespare/reflex для автоматической сборки при изменении кода, очень удобно
    Ответ написан
    Комментировать
  • Почему не получается сравнить отрицание в switch?

    @Asokr
    Так как вы хотите сделать не получится если отсутствует break, проверка не выполняется - отрабатывают все инструкции после первого true.
    Ответ написан
    Комментировать
  • Как захешировать строку согласно ГОСТ 34.311, чтобы это была строка в base64?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А зачем нужны библиотеки?
    let data = '12345678901234567890123456789012';
    let base64data = Buffer.from(data).toString('base64');
    
    console.log(base64data); // MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=
    Ответ написан
    Комментировать
  • IDE GoLand: Как убрать подсветку синтаксиса для не используемых переменных?

    Эту подсветку синтаксиса отключить нельзя, поскольку язык Go не разрешает оставлять неиспользуемые переменные в коде, что позволяет часть других языков, происходит ошибка компиляции.
    Ответ написан
    1 комментарий
  • Есть ли разница между горутинами и await в C#?

    Tyranron
    @Tyranron
    Несмотря на то, что эти инструменты созданы для решения одних и тех же проблем, делают они это по-разному, как под капотом, так и в плане предлагаемых абстракций. Потому нельзя сказать что async/await в C# - это "просто обертка над горутинами".

    Горутины в Go - это концепция stackful coroutines (под капотом) + CSP (в абстракциях). Каждый раз, когда мы создаём горутину, под неё выделяется отдельный стек вызовов для её собственных нужд. При этом, когда происходит паника, то stack unwinding (размотка стека вызовов) происходит только в пределах этой горутины и не покидает границ её стека. Стек горутины полностью отвязан от стека её создания/вызова, потому горутина не может возвращать результат. Любое общение между горутинами выполняется либо посредством каналов, либо какой-то общей памяти.

    async/await в C# (то есть, Task'и) - это концепция stackless coroutines (под капотом) + futures (в абстракциях). Код с async/await'ами компилятор превращает в определенную стэйт-машину с yield point'ами. У них нет отдельного стека, они выполняются в том же стеке что и вызывающий их код. Соотвественно, есть возможность словить exception'ы (аналог panic'и) возникающие внутри асинхронного Task'а прямо в запускающем его коде. Так как выполнение идёт на том же стеке - Task нормально может возвращать результат и мы его можем считать в вызывающем коде без дополнительных примитивов/инструментов.

    При этом, если мы запустим Go с GOMAXPROCS=1, то мы получим однопоточный асинхронный код в Go (по умолчанию он многопоточный). Также и в C# мы можем выполнять Task'и как на одном потоке, так и на thread pool, получая аналогичные Go гарантии рантайма.

    С точки зрения абстракций/использования - это уже вкусовщина. Кому как больше нравится. У futures лучше дизайн в плане composability (их эргономичнее join'ить и select'ить), но они вынуждают писать везде async и await. У горутин надо постоянно городить чехарду с синхронизацией (попробуйте сделать аналог await для произвольной горутины), но если эту чехарду прятать под капот (как обычно и делают), то код вообще выглядит полностью синхронным и программисты радуются.
    Ответ написан
    4 комментария
  • Как на golang создать запароленный архив?

    REKTOR_RG
    @REKTOR_RG
    contents := []byte("Hello World")
    
    // write a password zip
    raw := new(bytes.Buffer)
    zipw := zip.NewWriter(raw)
    w, err := zipw.Encrypt("hello.txt", "golang")
    if err != nil {
        log.Fatal(err)
    }
    _, err = io.Copy(w, bytes.NewReader(contents))
    if err != nil {
        log.Fatal(err)
    }
    zipw.Close()

    А вот так можно читать архив с паролем [спойлер]
    // read the password zip
    zipr, err := zip.NewReader(bytes.NewReader(raw.Bytes()), int64(raw.Len()))
    if err != nil {
        log.Fatal(err)
    }
    for _, z := range zipr.File {
        z.SetPassword("golang")
        rr, err := z.Open()
        if err != nil {
            log.Fatal(err)
        }
        _, err = io.Copy(os.Stdout, rr)
        if err != nil {
            log.Fatal(err)
        }
        rr.Close()
    }

    Создаст архив в формате .zip с файлом hello.txt и паролем golang
    Взято с официальной документации (от сюда).
    Ответ написан
    Комментировать
  • Как создать cookie для запроса?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    import (
    "net/http"
    "net/http/cookiejar" //из этого пакета
    )
    ...
    jar, err := cookiejar.New(options)
    if err == nil {
        coocies := []http.Coocie{{Name: "token", Value: token}} //здесь собрать
        jar.SetCookies(url, coocies) //здесь привязать к Url
    }
    
    client := http.DefaultClient //как вложить токен в куки при отправке запроса?
    client.Jar = jar //здесь выдать клиенту
    ...
    Ответ написан
    Комментировать
  • Стоит ли переплатить за процессор?

    @Akela_wolf
    Extreme Programmer
    Смотрите, главное различие между ними это количество ядер
    У 5600G - 6 ядер/12 потоков
    У 5700G - 8 ядер/16 потоков

    Еще у 5700 более мощная видеокарта встроена.

    Собственно далее вопрос: у вас, в вашей нагрузке будет чем утилизировать эти дополнительные 2 ядра/4 потока? Это либо задачи, которые хорошо параллелятся, либо большое количество процессов (виртуальные машины, например). Я в свое время взял 1700 первого поколения именно из-за этих дополнительных ядер по сравнению с 1600. Собственно никаких проблем с пиковой загрузкой проца не имею. Может быть хватило бы и 6 ядер, может быть и 4. Но, поскольку комп я брал надолго (и мне его более чем хватает на данный момент), то решил брать максимально доступную конфигурацию (был еще Threadripper, но его цена чуть более чем неприличная).

    Занимаюсь разработкой на Java и время от времени играю в не особо требовательные игры.

    Лично я при таких условиях взял бы 5700, но решать разумеется вам.
    Ответ написан
    Комментировать
  • Как вывод в консоль дожидается выполнения async функции?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    async func() всегда возвращает промис.
    И в консоль выводится именно этот промис со статусом pending.
    После завершения fetch и json статус промиса изменится на fulfilled и ему добавится значение.
    Вот вывод консоли сразу после console.log:
    Promise { <state>: "pending" }
    Если через некоторое время раскрыть этот объект, то увидим, что его статус уже сменился (вы ведь помните, что в консоль выводится живой объект по ссылке):
    Promise { <state>: "pending" }
    ​  <state>: "fulfilled"
    ​  <value>: Array(10) [ {…}, {…}, {…}, … ]
    ​  <prototype>: Promise.prototype { … }
    Ответ написан
    7 комментариев
  • Golang в чём смысл?

    1. Go был придуман в гугле для решения задач Гугла ещё задолго до того, как появился .net core со всем его перформансом.
    2. Go всё ещё порождает более компактные и не зависящие от окружения бинарники.
    3. Чтобы C# показывал результаты как в techempower - нужно писать код так, как никто его не пишет в реальном мире.
    В бэклоге . net команды даже пункты отдельные есть за то чтобы быть топ1 в бенчмарках
    4. Go всё ещё гораздо проще Шарпа, ибо п1
    Ответ написан
    Комментировать
  • Golang в чём смысл?

    bingo347
    @bingo347
    Crazy on performance...
    Во-первых, любой бенчмарк можно написать так, что визуально будет выглядеть очень похоже, но на деле у одной технологии будут использоваться сильные стороны, а у другой нет (понятно кто выиграет). Притом это можно сделать как специально, дабы превознести одну из технологий, так и ненамеренно, просто потому-что человек писавший бенчмарк очень хорошо знает одну технологию и посредственно другую.
    Например, я вполне умею написать многие вещи на C, C# и Go, но знаю эти языки очень поверхностно, с другой стороны я очень хорошо знаю JS (в том числе достаточно много копался в кишках v8) и Rust, как думаете, кто победит, если я начну писать бенчмарки для сравнения этих 5 языков?

    хотя Golang изначально и задумывался, как яп для хайлоада
    Go изначально задумывался как ЯП, который сможет быстро освоить любой, кто базово знаком с программированием, дабы Google мог нанять тысячу джунов и они быстро прототипировали идеи без заморочек C/C++.

    А еще вся супер-пупер параллельность - на самом деле асинхронщина, работающая на небольшом пуле реальных потоков ОС. Притом без вариантов. Асинхронный рантайм - это тоже не бесплатно. На всяких I/O штуках асинхронщина показывает себя очень хорошо, но на сугубо вычислительных задачах - все ее преимущества становятся минусами. На шарпе есть контроль, где использовать асинхронщину, а где вынести вычисления в настоящий поток. На Go такой возможности нет.

    P.S. а вообще, в реальном мире Вы практически никогда не упретесь в производительность языка, ну разве что будете всюду втыкать самые неоптимальные алгоритмы. На деле бутылочным горлышком окажутся сеть и диски. И даже в сугубо вычислительных штуках Вы скорее упретесь в оперативку и процессорные кэши, а не в ЯП.
    Ответ написан
    2 комментария
  • Какую связку мать + проц из предложенных посоветуете?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    AMD
    Ответ написан
    Комментировать