在Go中将C.jstring转换为本地字符串

How can I convert a C.jstring to a usable string in Go?

I am using GoAndroid.

In C you can do something like in this stackoverflow thread

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)   
{
   const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);

  // use your string

  (*env)->ReleaseStringUTFChars(env, javaString, nativeString);
}

in Go it starts to look something like this

func Java_ClassName_MethodName(env *C.JNIEnv, clazz C.jclass, jstring javaString) {
    defer func() {
        if err := recover(); err != nil {
           log.Fatalf("panic: init: %v
", err)
       }
   }()
   // ???
}

If I were you I'd look for Java to C string and then use standard C string to Go string.

I would consider writing a C function that converts Java string into C string and returns that back to Go runtime.

C to GoString:

b := C.malloc(50)
defer C.free(unsafe.Pointer(b))
C.callToCFunction(PChar(b), 50)
rs := C.GoString(PChar(b))
return rs, err

Java has its own memory management and thus should have its own way of moving data into C. You may ask with Java JNI keywords.

You are using Java and Go runtimes in one process. This may have some side-effects.