Несколько специальных типов 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
Он заменит nil на 0 в соответствующих местах.
Случай EGLDisplay был представлен в Go 1.12. Используйте перезапись egl для автоматического обновления кода с Go 1.11 и более ранних версий:
go tool fix -r egl
Читайте также:
Комментариев нет:
Отправить комментарий