golang的类成员map会自动make么

golang的类成员map会自动make么,第1张

golang的类成员map会自动make

选中刚添加的table, 然后在菜单中选择Editor\Embed In\Navigation Controller。

同时选中table view和table view controller, 将Attributes Inspector中的content type修改为Static Cells(如下图所示)。

在文档概要视图中Table View单击下面的按钮显示storyboard层次关系视图,然后选中Table View Section 将行数设置为4。如下图所示

依次编辑table view的每一行, 将style设置为Basic,编辑显示的标签:

Image Scroll

Custom View Scroll

Paged

Paged with Peeking

注释: 由于你将每一行的style设置成了“Basic”, 表单的每一行会出现额外的标签子组件。你要再次展开每行的子项目来进行编辑。

保存storyboard, 之后构建并运行。你会看到你编辑的table view如下图所示不过现在table view中还没有任何东西 – 但你可以改好它!

package main

import (

    "reflect"

)

type User struct {

    ID int

    Name string

}

func main() {

    user := User{}

    t := reflectTypeOf(user)

    if _, ok := tFieldByName("Name"); ok {

        println("存在")

    } else {

        println("不存在")

    }

}

在上一篇文章的golang代码中,函数add的上一行,增加了一条注释语句: //go:noinline 。在bpftrace追踪时,是否可以去掉?有什么作用?

为了说明该问题,设计一个例子。

golang代码中,有两个求和函数。其中,add1加上 //go:noinline ,另一个add2不加。代码如下:

bpftrace程序分别对函数add1和add2的输入参数、返回值进行追踪,代码如下:

执行程序后,可以看到bpftrace程序能够正常追踪到函数add1,但是无法追踪到函数add2。

通过上文中的示例代码,可以看到,没有加 //go:noinline 的函数无法被bpftrace程序追踪到。通过查阅golang相关文档,可以知道, //go:noinline 表示该函数在编译时,不会被内联

使用 objump -S 生成golang程序的汇编代码如下:

通过汇编代码,我们可以看到,主函数中,地址 0x498e52 处 callq 498e00 调用了add1函数,地址 0x498ebb 处 movq $0x4,(%rsp) 直接计算求值。

因此,golang编译器在编译代码时,会对代码进行分析,并按照内联规则,将某些函数生成内联代码。一旦函数被内联,bpftrace将无法追踪到对应函数。也就是,上文中函数 add2 无法被追踪到。

针对golang程序中编译器内联的问题,可以通过禁止内联的方式来解决。禁止内联的方式有:

在实践中,可以通过 go build -gcflags="-m -m" 来查看,哪些函数会在编译时执行内联,如:

从输出中,可以看到:

关于golang编译器进行内联的场景,可以参考golang源码:>

以上就是关于golang的类成员map会自动make么全部的内容,包括:golang的类成员map会自动make么、golang 查看结构体是否有某个属性、bpftrace动态追踪golang应用-函数内联问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10213159.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存