前言
跟着我的上一个文章:我的Go+语言初体验——环境搭建篇(直男程序员的真实体验)_阿良的博客-CSDN博客
我对Go+语言的部分感兴趣的内容进行了代码实现以及性能测试。我说一下我为什么要测试性能的原因,因为我认为不管语法有多华丽,在语法足够好写的前提下,性能才是关键的指标。
代码验证
在代码验证之前,我先说明一下。Go+的环境以及ide我都部署好了,如果你还没有部署好的话,可以看我上一篇文章,里面有一些部署中的问题解决方法,可以参考。
格式转换操作(go+、go性能对比)
100万次格式转换(由int转为string)效率,代码Go+与Go一致。代码如下:
package main import ( "fmt" "strconv" //"github.com/goplus/tutorial/14-Using-goplus-in-Go/foo" "math/rand" "sort" "time" ) func test1() { start := time.Now().UnixMicro() num := 10 for i := 0; i < 1000000; i++ { fmt.Sprintf("%d", num) } end := time.Now().UnixMicro() fmt.Printf("格式转换操作 :%d us\n", end-start) }
go+效率截图:
go效率截图:
初步结论:在格式转换操作上,Go+与Go语言基本一致,没什么区别。
循环操作(Go+、Go性能对比)
100万个100以内随机数之和,代码Go+与Go一致。代码如下:
package main import ( "fmt" "strconv" //"github.com/goplus/tutorial/14-Using-goplus-in-Go/foo" "math/rand" "sort" "time" ) func test2() { start := time.Now().UnixMicro() num := 0 for i := 0; i < 1000000; i++ { num = num + rand.Intn(100) } fmt.Println(num) end := time.Now().UnixMicro() fmt.Printf("循环操作 :%d us\n", end-start) }
排序操作(Go+、Go性能对比)
100万随机数组排序,代码Go+与Go一致。代码如下:
package main import ( "fmt" "strconv" //"github.com/goplus/tutorial/14-Using-goplus-in-Go/foo" "math/rand" "sort" "time" ) func test3() { total_arr := []int{} for i := 0; i < 1000000; i++ { total_arr = append(total_arr, rand.Int()) } start := time.Now().UnixMicro() sort.Ints(total_arr) end := time.Now().UnixMicro() fmt.Printf("排序操作 :%d us\n", end-start) }
List comprehension操作(Go+、Go性能对比)
按照官网给出的语法说明,支持数组的链式写法,如下图:
按照同样的功能,我按照Go+语法与Go语法分别写了如下比较代码。功能均是100万100以内随机数组,生成对应2次方的数组。
Go+代码
package main import ( "container/list" "fmt" "strconv" //"github.com/goplus/tutorial/14-Using-goplus-in-Go/foo" "math/rand" "sort" "time" ) func test5() { total_arr := []int{} for i := 0; i < 1000000; i++ { total_arr = append(total_arr, rand.Intn(100)) } fmt.Println(total_arr.Len()) start := time.Now().UnixMicro() result_lis := [x*x for x <- total_arr] end := time.Now().UnixMicro() fmt.Printf("列表语法操作 :%d us\n", end-start) fmt.Println(result_lis.Len()) }
Go+代码
package main import ( "container/list" "fmt" "strconv" //"github.com/goplus/tutorial/14-Using-goplus-in-Go/foo" "math/rand" "sort" "time" ) func test6() { old_map := map[string]int{} for i := 0; i < 1000000; i++ { old_map["test"+strconv.Itoa(i)] = i } start := time.Now().UnixMicro() reversedMap := {v: k for k, v <- old_map} end := time.Now().UnixMicro() fmt.Printf("map操作 :%d us\n", end-start) fmt.Println(len(reversedMap)) }
Go代码
package main import ( "fmt" "strconv" //"github.com/goplus/tutorial/14-Using-goplus-in-Go/foo" "math/rand" "sort" "time" ) func test6() { old_map := map[string]int{} for i := 0; i < 1000000; i++ { old_map["test"+strconv.Itoa(i)] = i } start := time.Now().UnixMicro() invMap := make(map[int]string, len(old_map)) for k, v := range old_map { invMap[v] = k } end := time.Now().UnixMicro() fmt.Printf("map操作 :%d us\n", end-start) fmt.Println(len(invMap)) }