golang 에서 C 호출

3125 단어 golang
프로젝트 의 항목 은 기본적으로 golang 입 니 다.이전 라 이브 러 리 는 golang 으로 다시 쓰기 가 쉽 지 않 았 기 때문에 cgo 로 호출 할 수 밖 에 없습니다.조금 만 기록 하 십시오.
사용 문서 보기
중요 한 일 은 여러 번 말 해도 지나 치지 않 으 니 반드시 문 서 를 자세히 보아 야 한다.https://github.com/golang/go/wiki/cgo
cgo 주석 과 import"C"사이 에 빈 줄 이 있어 서 는 안 됩 니 다!!
Note that there must be no blank lines in between the cgo comment and the import statement.
package main

/*
#include 
int test() {
    return 2016;
}
*/

import "C"

import "fmt"

func main() {
    fmt.Println(C.test())
}

컴 파일 중 오류 발생:
could not determine kind of name for C.test

영문 도 모 르 게 보 이 는 실 수 는 이 원인 으로 인 한 것 이다.
Go string 과 C string 변환
Go string -> C string
func C.CString(goString string) *C.char

C string 으로 변환 하면 메모리 가 분 배 됩 니 다.따라서 방출 이 필요 합 니 다.문서 의 예 는 다음 과 같 습 니 다.
// #include 
import "C"
import "unsafe"
...
    var cmsg *C.char = C.CString("hi")
    defer C.free(unsafe.Pointer(cmsg))
    // do something with the C string

C string -> Go string
func C.GoString(cString *C.char) string
func C.GoStringN(cString *C.char, length C.int) string

C 의 종류 사용
C.char
C.schar(signed char)
C.uchar(unsigned char)
C.short
C.ushort(unsigned short)
C.int
C.uint(unsigned int)
C.long
C.ulong(unsigned long)
C.longlong(long long)
C.ulonglong(unsigned long long)
C.float
C.double

기타 비고
  • 아직 cgo 문서 에 깊이 들 어가 지 못 했 고 구체 적 인 호출 체 제 는 보지 못 했다
  • cgo 성능 은 아직 테스트 하지 못 했 습 니 다.

    좋은 웹페이지 즐겨찾기