首先介绍github.com/goplus/mod模块。该模块支持Go/Go+模块相关功能。它可以被认为是对golang.org/x/mod的增强,包括:
github.com/goplus/mod:提供了找到go.mod/gop的能力。国防部文件。
github.com/goplus/mod/…:为gop提供读写支持。国防部文件。
github.com/goplus/mod/{modload, gopmod}:提供Go+ Module类(推荐使用gopmod包,在modload的基础上有了很大的增强)。
github.com/goplus/mod/…:提供模块缓存目录的支持
github.com/goplus/mod/…:提供模块下载功能。
其次,它改进了gop mod(模块管理)相关命令,尤其是gop mod tidy命令在很多情况下需要考虑。
第三,增强了gop build/install/run/test等命令函数的完整性,主要体现在:
- 支持远程包。例如,在Go+ v1.0中,你只能gop运行本地目录或文件,现在支持gop运行运行远程包。
- gop构建/安装/运行/测试的一致性。之前gop run和gop build/install的代码是分开编写的,缺乏统一的支持框架,它们的行为会有所不同。现在它们被统一到同一个实现框架中。
- gop缓存bug已被消除。在Go+ v1.0中,由于导入包的实现性能较差,引入gop cache模块cache,导致模块更新检测出现一些bug,导入一些复杂的包会出现无限循环。
第四,它增加了一些v1.0没有的语法特性。这主要包括:
- 支持重载++、——操作符。
- 支持表达式type()来表示type的0值。例如,string()等价于"",int32()等价于int32(0),以此类推。
- 支持uint128、int128类型。
- 支持any类型,相当于空接口。
第五,它在结构和函数头中增加了对注释指令的支持。eg:
//go:notinheap
type S struct{ x int }
//go:noinline
//go:uintptrescapes
func test(s string, p, q uintptr, rest ...uintptr) int {
...
}
当然,注释说明还需要进一步完善。例如,目前还没有实现条件编译指令等。
第六,修复许多bug。它包括Go+ bug (issue #888, #1056, #1228, #1243等)和新的测试用例已经在go1.8版本中添加,在Go+ v1.0版本中可能不会全部通过(issue #1195, #1196, #1197, #1198等)。
第七是支持Go/Go+混合项目。详细信息请参考gop/testdata/mixgo示例。以下是项目的README文件中对此的介绍:
第八,支持从Go+中调用C。这包括:
- gop c命令(相当于独立的c2go命令)可用于将c项目转换为Go项目。
- import“C”和import“C/xxx”用于导入由c2go转换的C项目。其中import“C”是import“C/github.com/goplus/libc”的缩写。
- C"xxx"语法表示C风格的字符串常量。
下面是一个展示Go+如何与C交互的例子。
import "C"
C.printf C"Hello, c2go!\n"
C.fprintf C.stderr, C"Hi, %7.1f\n", 3.14
在这个例子中,我们调用两个C标准函数printf和fprintf,传递一个C变量stderr和两个C"xxx"形式的C字符串(用Go+语法表示C风格字符串)。 这个示例的输出:
Hello, c2go!
Hi, 3.1
当然,目前Go+对C的支持只是一个预览版本,还没有到工程上实际可用的程度。就libc而言,目前的迁移进度只有5%左右,这只是一个开始。
在即将发布的Go+ v1.2版本规划中,对C的完全支持被列为重中之重。当然,对cgo和Go模板的支持也在计划中,这对于Go/Go+混合项目来说是一个至关重要的能力增强。
更多资讯内容请查看该链接:github.com/goplus/gop/…