type tt struct{

aa int
bb int
cc int
str string

}

func func_rstruct () tt{

t:=tt{1,2,3,"88888888888"}

return t

}

func func_rpstruct () *tt{

t:=tt{1,2,3,"88888888888"}

return &t

}

func Benchmark_rstruct(t *testing.B) {

strs:=[CNT]string{}
for i:=0;i<CNT;i++ {
dat:= func_rstruct()
strs[i]=dat.str
}
t.Log("success"+strconv.Itoa(len(strs)))
}

func Benchmark_rpstruct(t *testing.B) {

strs:=[CNT]string{}
for i:=0;i<CNT;i++ {
dat:= func_rpstruct()
strs[i]=(*dat).str

}
t.Log("success"+strconv.Itoa(len(strs)))

}

result:

C:\Users\xinhua\workspace\testproj\src\main>go test -test.bench=".*"
Benchmark_rstruct-4 1000000000 0.29 ns/op
--- BENCH: Benchmark_rstruct-4
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
... [output truncated]
Benchmark_rpstruct-4 1000000000 0.26 ns/op
--- BENCH: Benchmark_rpstruct-4
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
... [output truncated]
PASS
ok _/C_/Users/xinhua/workspace/testproj/src/main 7.997s

golang中 return如果返回指针比大型struct性能高的更多相关文章

  1. python中return的返回和执行

    1 打印函数名和打印函数的执行过程的区别 例子1.1 def a(): print(111) print(a) # 打印a函数的内存地址,不会对a函数有影响,a函数不会执行 print(a()) # ...

  2. 【GoLang】golang中可以直接返回slice吗?YES

    结论: 可以,slice本质是结构体,返回slice时返回的是结构体的值,结构体的指针.len.cap等信息也全部返回了. 如下: type slice struct { start *uintptr ...

  3. Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题

    在Java中返回值定义为int类型的 方法return 1:中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型. 定义一个Test类,在异常处理try中和finally中分 ...

  4. 第十九课 golang中的下划线

    在 Golang 里, _ (下划线)是个特殊的标识符. 用在 import 在导包的时候,常见这个用法: 1 2 import _ "net/http/pprof" import ...

  5. 【golang】golang中结构体的初始化方法(new方法)

    准备工作: 定义结构体:Student import ( "fmt" "reflect") type Student struct { StudentId st ...

  6. Golang中defer、return、返回值之间执行顺序的坑

    原文链接:https://studygolang.com/articles/4809 Go语言中延迟函数defer充当着 cry...catch 的重任,使用起来也非常简便,然而在实际应用中,很多go ...

  7. golang 中的指针

    # golang 中的指针 看了一篇[文章](http://blog.51cto.com/steed/2341409),写的很好.这里略微总结下重点: 1. 地址值.unsafe.Pointer.ui ...

  8. go中defer的理解--defer、return、返回值之间执行顺序

    defer可以读取有名返回值 func c() (i int) { defer func() { i++ }() return 1 } 输出结果是2. 在开头的时候,我们知道defer是在return ...

  9. Golang 中的指针 - Pointer

    http://www.cnblogs.com/jasonxuli/p/6802289.html   Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int ...

随机推荐

  1. Go语言【第五篇】:Go条件语句

    Go语言条件 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况再执行另外的语句.下图展示了程序语言中条件语句的结构: Go语言提 ...

  2. Luogu1155 NOIP2008双栈排序(并查集)

    两个位置i和j上的元素不能被放进同一个栈的充要条件显然是存在k使i<j<k且ak<ai<aj.由此在保证合法的情况下贪心地放就是正确的了. 至于如何判断,可以记一下后缀最小值, ...

  3. P3986 斐波那契数列

    题目描述 定义一个数列: f(0)=a,f(1)=b,f(n)=f(n−1)+f(n−2) 其中 a,b均为正整数,n≥2 . 问有多少种 (a,b),使得 k 出现在这个数列里,且不是前两项. 由于 ...

  4. AtCoder Regular Contest 075 E - Meaningful Mean(树状数组)

    题目大意:求一个数组中,平均值不小于k的连续子序列个数 所有数减去k,算个前缀和出来,就变成二维数点问题了. 没有修改,离线的话就是CZL所说的“NOIP最喜欢的套路”了:倒着加进BIT,以权值为数组 ...

  5. 在 C Level 用 dlopen 使用 第三方的 Shared Library (.so)

    http://falldog7.blogspot.com/2013/10/android-c-level-dlopen-shared-library-so.html 在 Android 裡,撰寫 JN ...

  6. mysql 集群+主从同步

    SQL节点: 给上层应用层提供sql访问. 管理节点(MGM):  管理整个集群. 启动,关闭集群. 通过ndb_mgmd命令启动集群 存储/数据节点: 保存cluster中的数据.  数据节点,可以 ...

  7. bzoj 1131 [POI2008]Sta 树形dp 转移根模板题

    [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1889  Solved: 729[Submit][Status][Discu ...

  8. bzoj1177 [Apio2009]Oil 二维前缀最大值,和

    [Apio2009]Oil Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 2300  Solved: 932[Submit][Status][Disc ...

  9. HDU3046 最大流(最小割)

    Pleasant sheep and big big wolf Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...

  10. 第01篇 说一下Setting,我一直没有讲过

        settings 调整 settings 中的设置是非常关键的,它们会改变 MyBatis 的运行时行为.下表描述了设置中各项的意图.默认值等. 设置参数 描述 有效值 默认值 cacheEn ...