1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 04:22:22 +00:00

ch2: 规范图片文件名

This commit is contained in:
chai2010 2018-08-14 21:38:11 +08:00
parent 9121393748
commit f558654e09
14 changed files with 6 additions and 6 deletions

View File

@ -378,7 +378,7 @@ p = (*X)(unsafe.Pointer(q)) // *Y => *X
下面是指针间的转换流程的示意图: 下面是指针间的转换流程的示意图:
![](../images/ch2-x-ptr-to-y-ptr.uml.png) ![](../images/ch2.3-1-x-ptr-to-y-ptr.uml.png)
任何类型的指针都可以通过强制转换为`unsafe.Pointer`指针类型去掉原有的类型信息,然后再重新赋予新的指针类型而达到指针间的转换的目的。 任何类型的指针都可以通过强制转换为`unsafe.Pointer`指针类型去掉原有的类型信息,然后再重新赋予新的指针类型而达到指针间的转换的目的。
@ -390,7 +390,7 @@ p = (*X)(unsafe.Pointer(q)) // *Y => *X
下面流程图演示了如何实现int32类型到C语言的`char*`字符串指针类型的相互转换: 下面流程图演示了如何实现int32类型到C语言的`char*`字符串指针类型的相互转换:
![](../images/ch2-int32-to-char-ptr.uml.png) ![](../images/ch2.3-2-int32-to-char-ptr.uml.png)
转换分为几个阶段在每个阶段实现一个小目标首先是int32到uintptr类型然后是uintptr到`unsafe.Pointr`指针类型,最后是`unsafe.Pointr`指针类型到`*C.char`类型。 转换分为几个阶段在每个阶段实现一个小目标首先是int32到uintptr类型然后是uintptr到`unsafe.Pointr`指针类型,最后是`unsafe.Pointr`指针类型到`*C.char`类型。
@ -416,6 +416,6 @@ pHdr.Cap = qHdr.Cap * unsafe.Sizeof(q[0]) / unsafe.Sizeof(p[0])
下面演示了切片间的转换的具体流程: 下面演示了切片间的转换的具体流程:
![](../images/ch2-x-slice-to-y-slice.uml.png) ![](../images/ch2.3-3-x-slice-to-y-slice.uml.png)
针对CGO中常用的功能作者封装了 "github.com/chai2010/cgo" 包,提供基本的转换功能,具体的细节可以参考实现代码。 针对CGO中常用的功能作者封装了 "github.com/chai2010/cgo" 包,提供基本的转换功能,具体的细节可以参考实现代码。

View File

@ -8,7 +8,7 @@
在一个Go源文件中如果出现了`import "C"`指令则表示将调用cgo命令生成对应的中间文件。下图是cgo生成的中间文件的简单示意图 在一个Go源文件中如果出现了`import "C"`指令则表示将调用cgo命令生成对应的中间文件。下图是cgo生成的中间文件的简单示意图
![](../images/ch2-cgo-generated-files.dot.png) ![](../images/ch2.5-1-cgo-generated-files.dot.png)
包中有4个Go文件其中nocgo开头的文件中没有`import "C"`指令其它的2个文件则包含了cgo代码。cgo命令会为每个包含了cgo代码的Go文件创建2个中间文件比如 main.go 会分别创建 main.cgo1.go 和 main.cgo2.c 两个中间文件。然后会为整个包创建一个 `_cgo_gotypes.go` Go文件其中包含Go语言部分辅助代码。此外还会创建一个 `_cgo_export.h``_cgo_export.c` 文件对应Go语言导出到C语言的类型和函数。 包中有4个Go文件其中nocgo开头的文件中没有`import "C"`指令其它的2个文件则包含了cgo代码。cgo命令会为每个包含了cgo代码的Go文件创建2个中间文件比如 main.go 会分别创建 main.cgo1.go 和 main.cgo2.c 两个中间文件。然后会为整个包创建一个 `_cgo_gotypes.go` Go文件其中包含Go语言部分辅助代码。此外还会创建一个 `_cgo_export.h``_cgo_export.c` 文件对应Go语言导出到C语言的类型和函数。
@ -132,7 +132,7 @@ void _cgo_506f45f9fa85_Cfunc_sum(void *v) {
`C.sum`的整个调用流程图如下: `C.sum`的整个调用流程图如下:
![](../images/ch2-call-c-sum-v1.uml.png) ![](../images/ch2.5-2-call-c-sum-v1.uml.png)
其中`runtime.cgocall`函数是实现Go语言到C语言函数跨界调用的关键。更详细的细节可以参考 https://golang.org/src/cmd/cgo/doc.go 内部的代码注释和 `runtime.cgocall` 函数的实现。 其中`runtime.cgocall`函数是实现Go语言到C语言函数跨界调用的关键。更详细的细节可以参考 https://golang.org/src/cmd/cgo/doc.go 内部的代码注释和 `runtime.cgocall` 函数的实现。
@ -243,7 +243,7 @@ func runtime.cgocallback(fn, frame unsafe.Pointer, framesize, ctxt uintptr)
整个调用流程图如下: 整个调用流程图如下:
![](../images/ch2-call-c-sum-v2.uml.png) ![](../images/ch2.5-3-call-c-sum-v2.uml.png)
其中`runtime.cgocallback`函数是实现C语言到Go语言函数跨界调用的关键。更详细的细节可以参考相关函数的实现。 其中`runtime.cgocallback`函数是实现C语言到Go语言函数跨界调用的关键。更详细的细节可以参考相关函数的实现。

View File

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB