понедельник, 15 июля 2019 г.

Команда cgo: особые случаи

Несколько специальных типов C, которые обычно представлены типом указателя в Go, вместо этого представлены uintptr. К ним относятся:

1. Типы *Ref для Darwin, основанные на типе CFTypeRef CoreFoundation.

2. Типы объектов из интерфейса JNI Java:

jobject
jclass
jthrowable
jstring
jarray
jbooleanArray
jbyteArray
jcharArray
jshortArray
jintArray
jlongArray
jfloatArray
jdoubleArray
jobjectArray
jweak

3. Тип EGLDisplay из API EGL.

Эти типы являются uintptr на стороне Go, потому что в противном случае они могли бы сбить с толку сборщик мусора Go; иногда это не указатели, а структуры данных, закодированные в виде указателя. Все операции над этими типами должны происходить в C. Подходящая константа для инициализации пустой такой ссылки - 0, а не nil.

Эти особые случаи были введены в Go 1.10. Для автоматического обновления кода из Go 1.9 и более ранних версий используйте cftype или jni перезаписи в инструменте go fix:

go tool fix -r cftype 
go tool fix -r jni 

Он заменит nil на 0 в соответствующих местах.

Случай EGLDisplay был представлен в Go 1.12. Используйте перезапись egl для автоматического обновления кода с Go 1.11 и более ранних версий:

go tool fix -r egl 


Читайте также:


Комментариев нет:

Отправить комментарий