Anhang - C Bindings mit Go
Das Beispiel zu den C Bindings in Go besteht aus mehreren, zusammen gehörenden Dateien.
cgotest.c
/* File cgotest.c */
// stdio.h einbinden um Text auszugeben
#include <stdio.h>
#include "cgotest.h"
// test der Funktionen
void main(int argc, char**argv) {
int n = countChars("Hallo World");
int c = addInts(1, 2);
printf("Ergebnis: %d und %d\n", n, c);
}cgotest.go
/*
* (c) Programmierung in Go / Addison Wesley 2010
* Rainer Feike / Steffen Blass
*
* Quellcode-Datei: cgotest.go
* Beschreibung: Teste C-Bindings
*/
package cgotest
/*
#include "cgotest.h"
#include <stdlib.h>
*/
import "C"
import "unsafe"
func AddWrapper(a, b C.int) int {
c := C.addInts(a,b)
return int(c)
}
func CountCharsWrapper(s string) int {
cs := C.CString(s)
n := C.countChars(cs);
defer C.free(unsafe.Pointer(cs))
return int(n)
}cgotest.h
/* File cgotest.h */
#ifndef _CGOTEST_H
#define _CGOTEST_H 1
// die Funktion gibt die Anzahl der Buchstaben in String zurück
extern int countChars(const char *string);
// die Funtion addiert zwei ints und gibt das Ergebnis zurück
extern int addInts(int a, int b);
#endifcgotestlib.c
/* cgotestlib.c */
#include <string.h>
// die Funktion gibt die Anzahl der Buchstaben in String zurück
int countChars(const char *string)
{
return strlen(string);
}
// die Funtion addiert zwei ints und gibt das Ergebnis zurück
int addInts(int a, int b)
{
return a+b;
}main.go
/*
* (c) Programmierung in Go / Addison Wesley 2010
* Rainer Feike / Steffen Blass
*
* Quellcode-Datei: main.go
* Beschreibung: Eigene Bindings testen
*/
package main
import "cgotest"
import "fmt"
func main() {
ergebnis1 := cgotest.CountCharsWrapper("Hello GO World")
ergebnis2 := cgotest.AddWrapper(1,2)
fmt.Printf("Ergebnis: %d und %d\n", ergebnis1, ergebnis2)
}Makefile
include $(GOROOT)/src/Make.$(GOARCH)
PKGDIR=$(GOROOT)/pkg/$(GOOS)_$(GOARCH)
TARG=cgotest
CGOFILES=cgotest.go
CGO_LDFLAGS=-lcgotest
include $(GOROOT)/src/Make.pkg
CLEANFILES+=main $(PKGDIR)/$(TARG).a
main: install main.go
$(GC) main.go
$(LD) -o $@ main.$O- Anmelden oder Registrieren um Kommentare zu schreiben

Neueste Kommentare
vor 43 Wochen 6 Tage
vor 45 Wochen 1 Tag
vor 46 Wochen 10 Stunden
vor 49 Wochen 19 Stunden
vor 1 Jahr 7 Wochen
vor 1 Jahr 7 Wochen
vor 1 Jahr 7 Wochen
vor 1 Jahr 7 Wochen
vor 1 Jahr 8 Wochen
vor 1 Jahr 10 Wochen