From 050048d4f66bf59eb1e8842b163668fcbb74d41b Mon Sep 17 00:00:00 2001 From: wahaha Date: Sat, 16 Jun 2018 20:29:10 +0800 Subject: [PATCH] =?UTF-8?q?ch2-02-=E6=94=B9=E9=94=99=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch2-cgo/ch2-02-basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch2-cgo/ch2-02-basic.md b/ch2-cgo/ch2-02-basic.md index 0be9e0d..d83e333 100644 --- a/ch2-cgo/ch2-02-basic.md +++ b/ch2-cgo/ch2-02-basic.md @@ -67,7 +67,7 @@ func main() { 这段代码是不能正常工作的,因为当前main包引入的`C.cs`变量的类型是当前main包的cgo构造的虚拟的C包下的char类型,它和cgo_helper包引入的`*C.char`类型是不同的。在Go语言中方法是依附于类型存在的,不同Go包中引入的虚拟的C包的类型却是不同的,这导致从它们延伸出来的Go类型也是不同的类型,这最终导致了前面代码不能正常工作。 -有Go语言使用经验的用户可能会建议参数转型后再传入。但是这个方法似乎也是不可行的,因为`cgo_helper.PrintCString`的参数是它自身包引入的`*C.char`类型,在外部是无法直接获取这个类型的。换言之,一个包如果在公开的接口中直接使用了`*C.char`等类似的虚拟C包的类型,其它的Go包是无法直接使用这些类型的,除非这个Go包同时也提供了`*C.char`类型的构造函数。因为这些诸多因素,如果想在go test环境直接测试这些cgo导出的类型也会于通用的限制。 +有Go语言使用经验的用户可能会建议参数转型后再传入。但是这个方法似乎也是不可行的,因为`cgo_helper.PrintCString`的参数是它自身包引入的`*C.char`类型,在外部是无法直接获取这个类型的。换言之,一个包如果在公开的接口中直接使用了`*C.char`等类似的虚拟C包的类型,其它的Go包是无法直接使用这些类型的,除非这个Go包同时也提供了`*C.char`类型的构造函数。因为这些诸多因素,如果想在go test环境直接测试这些cgo导出的类型也会有相同的限制。