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);

#endif

cgotestlib.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

Urheber und Rechteinhaber der orginalen, englischen Go Referenz ist Google. Quelle: golang.org.

Neueste Kommentare

Drupal Theme by proxiss GmbH, mini icons by brandspankingnew.