`
sofire
  • 浏览: 146145 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Go调用C代码,Cgo笔记

阅读更多

参考:

官方文档:

http://golang.org/cmd/cgo/

http://blog.golang.org/2011/03/c-go-cgo.html

 

一份博文,编译过程讲得比较细:

http://googollee.blog.163.com/blog/static/1159411201031812128593/

 

Go语言教程:使用C语言函数:

http://chaishushan.blog.163.com/blog/static/130192897201012710273283/

 

 

看完上面的教程,基本上知道怎么用Go调用C代码、和需要注意的事项。

至于C调用Go的代码,Go调用汇编代码,以后再研究吧。

 

以下内容是笔记,列出一些重点等,不解释。

 

源文件

 

/*
// 这是注释中的注释
#include <stdio.h>
#include <errno.h>
*/
import "C"
 
// #cgo CFLAGS: -DPNG_DEBUG=1
// #cgo linux CFLAGS: -DLINUX=1
// #cgo LDFLAGS: -lpng
// #include <png.h>
import "C"
 
// #cgo pkg-config: png cairo
// #include <png.h>
import "C"
 

 

编译方法

 

 

include $(GOROOT)/src/Make.inc

TARG=xdb
CGOFILES=xdb.go

CGO_CFLAGS+=-L/opt/xunsearch/lib/ -I/opt/xunsearch/include
CGO_LDFLAGS+=-lscws -L/opt/xunsearch/lib/

include $(GOROOT)/src/Make.pkg
 
说明:CFlags等参数,可以写在Go的源代码中
 

 

数据类型转换

C -> Go

 

 

int(C.int )

// C string to Go string
func C.GoString(*C.char) string

// C string, length to Go string
func C.GoStringN(*C.char, C.int) string

// C pointer, length to Go []byte
func C.GoBytes(unsafe.Pointer, C.int) []byte
 

 

 

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


unsafe.Pointer (void*)

// Go string to C string
func C.CString(string) *C.char

var val []byte
(*C.char)(unsafe.Pointer(&val[0]))
 

 

 

内存释放

 

cs := C.CString(s)
defer C.free(unsafe.Pointer(cs))
Go创建的对象,可以很好的回收;而C创建的,则需要手动回收

 

注意事项:

  不支持调用像 Printf()

 

  不清楚的地方,问人,或者看别人用Go调用C的代码。

 

 

(待完善)

http://googollee.blog.163.com/blog/static/1159411201031812128593/

http://my.oschina.net/zengsai/blog/5138

http://my.oschina.net/zengsai/blog/5139

分享到:
评论

相关推荐

    Go 学习笔记——雨痕

    Go语言,又称Golang,是一种静态类型的编程语言,由Google开发,于2007年首次对外公布,并在2009年进行了开源。Go语言的设计哲学是简洁、快速和安全。它支持垃圾回收,具有类型系统和一些并发控制机制。 变量的定义...

    基于Go语言的学习笔记(附代码)

    Go语言,又称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。本学习笔记主要涵盖了Go语言的基础知识,包括类型、表达式、函数、数据结构、方法、接口、并发以及包管理等...

    Go 学习笔记 高清

    根据提供的文件内容,以下是对Go语言学习笔记的详细知识点阐述。 Go语言是Google开发的一种静态类型、编译型、并发型,并具有垃圾回收功能的编程语言。它由Robert Griesemer、Rob Pike和Ken Thompson于2007年9月...

    Go语言学习笔记

    Go语言学习笔记的知识点涵盖广泛,它从基础的语法到高级的并发编程,再到源码的剖析,全面介绍了Go语言的特点和编程技巧。以下是根据所提供的文件内容提取的知识点: 1. Go语言基础:Go是一种静态类型编程语言,...

    Go 学习笔记 第三版

    Go语言的进阶特性包括对内存布局的理解、指针的高级用法,以及对cgo的支持,后者允许Go调用C语言函数,这在与遗留系统交互时非常有用。反射(reflect)包提供了一种在运行时动态获取类型信息和修改变量值的能力。 Go...

    雨痕golang学习笔记第四版 加上书签版

    《雨痕golang学习笔记第四版 加上书签版》是针对Go语言学习者的参考资料,作者雨痕在书中详细记录了从2012年开始学习Go语言至今的经验与成果。本书内容全面,涵盖了Go语言的基础知识、数据结构、函数特性、并发编程...

    Go 学习笔记

    Go语言的进阶知识包括内存布局、指针陷阱、cgo(调用C语言代码的接口)以及Reflect(反射)机制等。其中反射机制允许程序在运行时访问、检测和修改对象的行为,是动态类型语言特性在Go中的体现。 Go语言笔记的第二...

    go笔记第三版

    - **定义**: 允许 Go 代码调用 C 代码。 - **使用**: 通过编写 C 代码并将其与 Go 代码链接来实现。 #### 9.4 Reflect - **定义**: 提供了一种在运行时检查和操作对象的方式。 - **使用**: 用于动态类型处理和实现...

    Go+学习笔记

    Go+学习笔记所包含的知识点涵盖了Go语言的基础知识、编程范式、数据结构、并发处理、标准库使用以及进阶话题等多个方面,详细介绍了Go语言的学习路径和应用实践。 首先,Go语言的基础部分包括变量声明、基本类型、...

    Go 学习笔记第四版

    - **cgo**:在Go中调用C语言代码的工具。 - **Reflect**:反射机制在Go中的实现和使用。 第三部分是关于源码和工具的介绍,包括内存分配器、垃圾回收器、Goroutine调度器以及Channel、Defer和Finalizer等内容。...

    Go学习笔记

    - **cgo**:允许Go代码调用C语言编写的库。 - **反射**:可以动态地获取和操作对象的类型和值。 以上内容涵盖了Go语言的基本概念和核心知识点。对于初学者来说,理解这些概念是学习Go的基础。随着经验的积累,...

    Go 学习笔记 第二版1

    《Go学习笔记第二版1》是一本记录Go语言学习过程的笔记,作者通过两年的实践积累了丰富的经验,并针对Go语言的不断更新进行了修订。新版笔记重新规划了目录结构,将语言特性和工具分开,不再包括易变的标准库内容,...

    golang学习笔记

    第9章进阶:涉及到内存布局、指针陷阱、cgo(用于Go调用C代码)以及反射(reflect)等高级特性。 第二部分是关于源码的理解,包括内存分配器、垃圾回收器和goroutine调度器的源码分析。 第三部分附录介绍了工具的...

    雨痕的GO学习笔记

    - **cgo**: C语言和Go语言之间的互操作。 - **性能测试**: 测试Go程序的性能。 - **源码阅读指南**: 指导如何阅读和理解Go标准库及第三方库的源码。 以上知识点概括了雨痕的GO学习笔记中涉及的主要内容,适合初学者...

    golang-china读书笔记

    - **cgo**: 介绍如何使用cgo来调用C语言编写的库。 #### 总结 本书通过一系列的章节详细介绍了Go语言的核心概念和技术细节,从基本的语法到高级的并发编程技术都有涉及。无论是初学者还是有经验的开发者,都可以从...

    Go语言学习笔记(自己整理的,超级全面)

    Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的编程语言。Go语言的设计目标是提高开发效率,简化并发编程,并提供高效的网络和系统级编程能力。 在Go语言的学习中,首先要...

    【_cjl3080434008_book】 Go 学习笔记.pdf

    首先,文档的标题“【_cjl***_book】 Go 学习笔记.pdf”暗示了这是关于Go语言(也称为Golang)的学习笔记。Go语言是由Google开发的一种静态类型、编译型语言,它具有简洁、快速、安全的特点,适合于网络编程和多核心...

    Go学习笔记第三版

    - **定义**: Go 语言提供了 cgo 工具来调用 C 语言代码。 - **用途**: 适用于需要与 C 语言交互的情况。 #### 9.4 Reflect - **定义**: Go 语言的反射机制允许程序在运行时检查和修改任何类型的值。 - **用途**: ...

Global site tag (gtag.js) - Google Analytics