Pull to refresh
2
0
Матвей Марецкий @MatveySss

User

Send message

На самом деле я не до конца понял этот момент. По сути C.GoString - обычная структура { ptr*, len } и должна менеджиться GC как и остальные строки в Go. Тем более, если посмотреть в документацию там указано, что например C.CString надо высвобождать вручную, но про C.GoString такого нет (https://pkg.go.dev/cmd/cgo#hdr-Go_references_to_C). Но наверное лучше делать так:

// ..

c_ptr := C.foo()
go_str := C.GoString(c_ptr)
defer C.free(unsafe.Pointer(c_ptr))

// ..

UPD: Так же в документации написано, что C.GoString делает копию оригинальной строки. Так что судя по всему высвобождать оригинальную - обязательно.

A few special functions convert between Go and C types by making copies of the data. In pseudo-Go definitions.

Название структуры косвенно намекает на то, что все зависит от операционной системы. Есть документация с источниками генерации. Об их качестве к сожалению рассуждать не могу

Я не ставил вам минус, веткой выше я уже признал свою ошибку, спасибо.

Спасибо за комментарий, я и правда перепутал алгоритм цифровой подписи с хеш-функцией в статье про криптографию :( Когда переводил, забыл исправить этот момент

Спасибо за положительный отзыв. Из основного: Solana CLI + локальная нода, ну и юнит тесты, которые Rust предлагает из коробки. Вообще каждый выбирает сам, что ему удобнее и чем тестировать. Я вот привык сразу из браузера через Js. Возможно кому-то такой подход покажется странным, но что поделать)

Спасибо за комментарий. Да в основном Rust сейчас используется для блокчейн разработки. Еще я часто слышу о том, что на нем пишут/переписывают определенные высоконагруженные части приложений

Я рад, спасибо. Опечатку исправил

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

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, Web Developer
Rust
Golang
PostgreSQL
Apache Kafka
RabbitMQ
Linux
Docker
Kubernetes
AWS
Reverse development