1
Llamando a las librerías dinámicas de C
Go se lleva exelente con C gracias a `cgo`. Ponemos el `po_c.dll` o `.so` en el disco y llamamos a The Core.
package main
/*
#cgo LDFLAGS: -L. -lpo_c
#include "po.h"
#include <stdlib.h>
*/
import "C"
import (
"fmt"
"unsafe"
)
func main() {
// Apuntamos al maestro
bindC := C.CString("0")
remoteC := C.CString("127.0.0.1:4433")
defer C.free(unsafe.Pointer(bindC))
defer C.free(unsafe.Pointer(remoteC))
client := C.po_client_new(bindC, remoteC)
fmt.Println("¡Goroutine conectada E2EE!")
// Disparo binario
data := []byte("Hola Orzatty desde Go")
cData := (*C.uint8_t)(unsafe.Pointer(&data[0]))
C.po_client_send(client, cData, C.size_t(len(data)))
C.po_client_free(client)
}
package main
/*
#cgo LDFLAGS: -L. -lpo_c
#include "po.h"
#include <stdlib.h>
*/
import "C"
import (
"fmt"
"unsafe"
)
func main() {
// Apuntamos al maestro
bindC := C.CString("0")
remoteC := C.CString("127.0.0.1:4433")
defer C.free(unsafe.Pointer(bindC))
defer C.free(unsafe.Pointer(remoteC))
client := C.po_client_new(bindC, remoteC)
fmt.Println("¡Goroutine conectada E2EE!")
// Disparo binario
data := []byte("Hola Orzatty desde Go")
cData := (*C.uint8_t)(unsafe.Pointer(&data[0]))
C.po_client_send(client, cData, C.size_t(len(data)))
C.po_client_free(client)
}💡 Para que lo entiendas súper fácil: Ese pequeño bloque de `/* #cgo */` en la parte superior es literalmente magia oscura que le permite a una tortuga (Go) subirse al lomo de un tigre robot (API C/Rust de Orzatty) y correr como si nada.