Pull to refresh
3
0
Дегтярёв Евгений @bat

Go/PHP Developer

Send message
В середине 2000х работал в сфере образования, расчетники выкладывали в бухгалтерии, каждый искал свою в общей куче.
получилось как получилось, деньги освоены, переделывать уже не будут
почему в тестовом окружении не установить фиксированную капчу или вообще ее отключить?
вот бы подробностей что там под капотом
Да вызов будет дороже, чем вызов гошной функции, но это не совсем тоже самое что cgo медленный. Медленным это будет при очень частом обращении к импортированным функциям и насколько это критично уже зависит от конкретной задачи.
— debian
— FROM scratch для go приложений
была мысль что заинлайнил вызовы strconv.Itoa и разместил результат на стеке
отличный результат на 1.9 надо переходить
хотел придраться к тому что strconv.Itoa(size) вызывается дважды, но бенч показывает одну алокацию ))
точно, в глянул в оригинале, там повторное кодирование строки, если длина не та
это ж пипец

// formatPAXRecord formats a single PAX record, prefixing it with the
// appropriate length.
func formatPAXRecord(k, v string) string {
	const padding = 3 // Extra padding for ' ', '=', and '\n'
	size := len(k) + len(v) + padding
	size += len(strconv.Itoa(size))
	record := fmt.Sprintf("%d %s=%s\n", size, k, v)

	// Final adjustment if adding size field increased the record size.
	if len(record) != size {
		size = len(record)
		record = fmt.Sprintf("%d %s=%s\n", size, k, v)
	}
	return record
}


ps
формат PAX record весьма неудачен, имха

pps
CL автора такие не принят
будет баг нет?
как я понял size так же учитывает и свою собственную длину в строковом представлении
size := len(k) + len(v) + padding
size += len(strconv.Itoa(size))
record := fmt.Sprintf("%d %s=%s\n", size, k, v)

а что будет, если len(k) + len(v) + padding = 99 ??
Хром последний проверил — после закрытия вкладок отдаёт память обратно.

у хрома по процессу на вкладку, естественно память вернется при завершении процесса
подобные вещи я и имел в виду
предположу, чтобы подобное реализовать, потребуется реализация HTTP на PHP и работа с удаленным сервером через сокет. дальше, наверное, потребуется асинхронная работа с диском, БД…
на nodejs с этим проблем не будет
можно использовать Go, но это тема для холивара )
По первому обзацу — не его ниша. Магазин не проблема, но зачем, их тыщи.
По второму — все так.
Логичный вопрос — смена версии даст сильный прирост или нет?

для вебсокетного сервиса на PHP по скорости вряд ли, по памяти точно

Шутки не понял, если у меня сервер на php то мне будет сложно правильно использовать сторонние (но не невозможно само собой), а значит реализация именно серверной части с обслуживанием подключений и пользователей будет на php, гугл выдает с десяток реализаций.

да не было никакой шутки
да можно, решения есть, но при поддержке такого решения постоянно придется решать проблемы, которые давно уже решены.
php-шнику на том же nodejs ws-сервис сделать не сложнее чем на php, если не проще. и экосистема там богаче в этом плане, это его ниша.
А мне не очень. API довольно таки скудный.
Да, универсально, пул под капотом, потокобезопастность тоже…
с другой стороны (это то что наболело)
— пул плохо настраивается, макс кол-во соединений и макс. кол-во простаивающих соединений и все, а я бы хотел задать мин. кол-во простаивающих соединений, кол-во соединений при старте, чтобы не ждать пока соединение откроется
— средств профайлинга нет. измерить время выполнения запросов можно и снаружи, а вот какие затраты были на установку соединения при вызове db.Query и были ли вообще — непонятно
— следствия универсальности: нет доступа к спец. возможностям субд, нельзя получить из пула соединение. Даже если разработчик драйвера предоставит методы для работы с API, то надо предоставлять механизмы для создания соединений и отдельный пул, т.к. к стандартному доступа нет. А если такое случится, то нафига тогда database/sql/
— с логированием, если ошибаюсь, тоже никак
зависит от задачи
мой ответ можно расценивать как расшифроку что понималось под фразой «4. Для работы с веб в Го достаточно стандартных пакетов из коробки.»

зы
не агитирую за го, но если конкретизируешь «полезную работу», может смогу что-то пояснить.
https://golang.org/pkg/net/http/
https://golang.org/pkg/encoding/json/
все верно
$ go build
$ ldd main
linux-vdso.so.1 => (0x00007fffd4bf7000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc4679b7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc4675f0000)
/lib64/ld-linux-x86-64.so.2 (0x000055cfc4c89000)

но, при определенных условиях это не так
$ CGO_ENABLED=0 GOOS=linux go build -ldflags "-s -w" -a -installsuffix cgo
$ ldd main
не является динамическим исполняемым файлом

Information

Rating
Does not participate
Location
Алтайский край, Россия
Registered
Activity

Specialization

Backend Developer
Senior