Estoy tratando de integrar una aplicación Go dentro de un proyecto grande de C#. Al usar CGO, es fácil exportar funciones de Go a C#, especialmente cuando la función Go devuelve un tipo genérico.
Sin embargo, tengo la necesidad de llamar a una función Go que devuelve un segmento de tipo personalizado de C#, posiblemente enviando el segmento a una lista o matriz de C#.
La función Go se ve así
func Myfunc(n []int, m float64) []Res{...}donde está el tipo Res
type Res struct { w IW p []Prs ti int64 ms int64 } type Prs struct { mmz float64 cge int itntn int64 } type IW struct { ledg float64 redg float64 }No pude encontrar ninguna documentación o ejemplo en la web, ¿puedo hacer esto de alguna manera?
No sé cómo C# invoca Go, supongamos que vamos a invocar la función Go desde el código C.
Necesita definir Res struct en el archivo C. como cgo_interface.h
Luego escribes un archivo cgo como este:
package cinvokego /* #cgo CFLAGS: -I ${include} #cgo LDFLAGS: -L ${libs} #include "cgo_interface.h" */ import "C" func GoFuncs(retArr *unsafe.Pointer, otherargs int) { // allocate memory and fill the retArr in here } Luego use go build --buildmode=c-archive cinvokego.go
Luego obtendrá el archivo de encabezado y el archivo de almacenamiento generado por go build.
Luego usa el encabezado y el archivo como un recurso C normal.
Luego use C# para invocar el recurso C.