Go语言发布1.1.0版本

首先介绍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文件中对此的介绍:

image.png 第八,支持从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/…