我的Go+语言初体验——语法验证/性能测试篇(直男程序员的真实体验2)

简介: 我的Go+语言初体验——语法验证/性能测试篇(直男程序员的真实体验)

Go+完整测试代码


package main
import (
  "container/list"
  "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)
}
func test2() {
  start := time.Now().UnixMicro()
  num := 0
  for i := 0; i < 1000000; i++ {
    num = num + rand.Intn(200)
  }
  fmt.Println(num)
  end := time.Now().UnixMicro()
  fmt.Printf("循环操作 :%d us\n", end-start)
}
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)
}
//func test4() {
//  rmap := foo.ReverseMap(map[string]int{"Hi": 1, "Hello": 2})
//  fmt.Println(rmap)
//}
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())
}
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))
}
func main() {
  // test1()
  // test2()
  // test3()
  //test4()
  // test5()
  test6()
}

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)
}
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)
}
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)
}
//func test4() {
//  rmap := foo.ReverseMap(map[string]int{"Hi": 1, "Hello": 2})
//  fmt.Println(rmap)
//}
func test5() {
  total_arr := []int{}
  for i := 0; i < 1000000; i++ {
    total_arr = append(total_arr, rand.Intn(100))
  }
  fmt.Println(len(total_arr))
  start := time.Now().UnixMicro()
  result_arr := []int{}
  for _, value := range total_arr {
    result_arr = append(result_arr, value*value)
  }
  end := time.Now().UnixMicro()
  fmt.Printf("列表语法操作 :%d us\n", end-start)
  fmt.Println(len(result_arr))
}
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))
}
func main() {
  //test1()
  //test2()
  //test3()
  //test4()
  //test5()
  test6()
}

总结

目前测试的几个优化Go语言的语法,在使用中还是简化了许多的,只是代码性能还是有些许损耗的,但是不是很大。而Go语言代码在Go+中的使用性能基本没有损耗。其中还是要指出几个问题。


1)官网给出的可以在Go中直接使用Go+在github上的远程仓库代码进行直接编译,无法使用。经过和Go+团队的沟通,应该是给出的测试包已经迁移走了,无法使用。我本次测试没来得及上传Github自己的Go+包,所以无法评价是否可用。


2)关于Map的相关操作还有一定的优化空间。


如果本文对你有用的话,点个赞吧,谢谢!


相关文章
|
4月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
296 1
|
5月前
|
测试技术 UED 开发者
性能测试报告-用于项目的性能验证、性能调优、发现性能缺陷等应用场景
性能测试报告用于评估系统性能、稳定性和安全性,涵盖测试环境、方法、指标分析及缺陷优化建议,是保障软件质量与用户体验的关键文档。
|
6月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
483 0
|
6月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
326 0
|
6月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
359 0
|
6月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
397 0
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
环境搭建 GO+版的祝福语管理系统 前期想法 界面展示 整体界面 增加祝福信息 修改操作 删除操作 退出
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
|
12月前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
12月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
6月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
422 1

热门文章

最新文章