【无标题】

如果没有显式关闭channel,当线程结束的时候,channel会自动关闭吗?

如果没有显式关闭channel,当线程结束的时候,channel不会自动关闭。channel是一个引用类型,它的生命周期不依赖于任何一个线程,而是由垃圾回收器管理。只有当没有任何线程持有channel的引用时,channel才会被垃圾回收器回收。所以,如果你想在线程结束的时候关闭channel,你需要在线程内部调用close函数。

怎么看go是否有内存泄露?

回到刚才的程序,可知channel里允许的内存最大为1GB,为什么运行的时候,程序实际占用了2GB的内存呢

http.handlefunc(“/”, index) 当有/请求进来,系统会新建一个处理线程吗?

当有"/“请求进来时,会调用http.HandleFunc(“/”, index)函数。这个函数会在和ListenAndServe函数相同的goroutine中执行。因此,当有”/"请求进来时,不会新建一个goroutine。

http.HandleFunc函数会把给定的模式和处理函数注册到DefaultServeMux中。如果你没有给ListenAndServe函数提供一个ServeMux实例,就会使用DefaultServeMux。

r.GET(“/ping”, func(c *gin.Context) {
c.JSON(200, gin.H{
“message”: “pong”,
})
})

当有100个 ping请求进来的时候,系统会新建100个协程吗
Gin框架会为每个请求创建一个新的goroutine,所以当有100个ping请求进来的时候,系统会新建100个goroutine。12

但是,如果你在中间件或处理函数中启动新的goroutine,你不能使用原始的上下文,你必须使用一个只读副本。12

例如,你可以这样写:

r.GET(“/ping”, func(c *gin.Context) { cCp := c.Copy() // 创建一个只读副本 go func() { // 在新的goroutine中处理请求 cCp.JSON(200, gin.H{ “message”: “pong”, }) } () })

Reactor的好处

在这里插入图片描述

新请求创建的协程是从协程池里拿到的吗?

不是的,是从pool里拿出了一个上下文(Context)对象,然后用go c.reset()来启动一个新的goroutine。

pool是一个对象池,它可以复用上下文对象,避免频繁地创建和销毁对象,从而提高性能和减少内存开销。

每个上下文对象都包含了请求和响应的信息,以及中间件和处理函数的链表。

你可以在这里看到上下文对象的定义:

type Context struct {
writermem responseWriter
Request *http.Request
Writer ResponseWriter

Params   Params
handlers HandlersChain
index    int8

fullPath string

engine *Engine

}

reactor为什么要把监听和处理分离?

在这里插入图片描述

mysql

ldn数据库迁移判断数据库大小等语句。

select ldn_funding_funder_id_db_00000004, sum(table_rows) as ‘rows_num’ from information_schema.tables where table_schema=“ldn_funding_funder_id_db_00000004” and table_name like “%funder_id_bcl_bke_disburse_tab_00000012%” group by table_name order by table_name desc;
解释这句话

这句话是一条SQL语句,它的作用是从information_schema.tables表中查询ldn_funding_funder_id_db_00000004数据库中以funder_id_bcl_bke_disburse_tab_00000012为前缀的表的名称和行数,并按照表名降序排序。

具体来说,这句话的各个部分的含义如下:

  • select ldn_funding_funder_id_db_00000004, sum(table_rows) as 'rows_num':这部分表示要选择ldn_funding_funder_id_db_00000004数据库的名称,以及每个表的行数之和,并将其命名为rows_num。
  • from information_schema.tables:这部分表示要从information_schema.tables表中获取数据,这是一个系统表,存储了所有数据库和表的元数据信息。
  • where table_schema="ldn_funding_funder_id_db_00000004":这部分表示要筛选出table_schema字段等于ldn_funding_funder_id_db_00000004的记录,也就是只查询ldn_funding_funder_id_db_00000004数据库中的表。
  • and table_name like "%funder_id_bcl_bke_disburse_tab_00000012%":这部分表示要进一步筛选出table_name字段包含funder_id_bcl_bke_disburse_tab_00000012的记录,也就是只查询以funder_id_bcl_bke_disburse_tab_00000012为前缀的表。 group by table_name:这部分表示要按照table_name字段进行分组,也就是对每个表进行统计。 `order by
  • table_name desc:这部分表示要按照table_name字段进行降序排序,也就是按照表名从大到小排列。

mysql都有哪些系统表?

在这里插入图片描述

select ldn_funding_funder_id_db_00000004, sum(table_rows) as ‘rows_num’ from information_schema.tables where table_schema=“ldn_funding_funder_id_db_00000004” and table_name like “%funder_id_bcl_bke_disburse_tab_00000012%” group by table_name order by table_name desc;
为什么这句sql查出来的funder_id_bcl_bke_disburse_tab_00000012表的行数和
select COUNT(*) FROM ldn_funding_funder_id_db_00000004.funder_id_bcl_bke_disburse_tab_00000012; 查出来的不一样?

在这里插入图片描述

uintptr 是什么类型

在这里插入图片描述

为什么要用uintptr而不是普通的指针?

在这里插入图片描述

a:=make([]byte,4)
那a是指针吗?如果是,为什么.unsafePointer(a)报错?
在这里插入图片描述

println()是只能接受指针吗?

在这里插入图片描述
不能打印struct结构

git merge 分支a到分支b,还push了,怎么撤销

在这里插入图片描述

git revert -m 1 <合并提交的哈希值> 解释

git revert -m 1 <合并提交的哈希值>是一个命令,用来撤销一个合并提交的改动。这个命令的意思是:

git revert表示要撤销一个已经存在的提交。
-m 1表示要保留合并的第一个父提交作为主线,也就是你合并到的分支。如果你想保留第二个父提交作为主线,也就是你合并的分支,你可以用-m 2
<合并提交的哈希值>表示要撤销的合并提交的标识符,你可以用git log命令来查看。
这个命令会创建一个新的提交,把合并提交的改动都取消掉,并且自动打开编辑器让你输入一个提交信息。你可以修改或者保留默认的提交信息,然后保存退出。这样,你就完成了撤销合并的操作。

car:=make([]byte, 110241024*1024) 一开始会分配内存吗

在这里插入图片描述

go 字符串类型占几个字节

Go 语言的字符串是由单个字节连接起来的,使用 UTF-8 编码标识 Unicode 文本。因此,字符串类型的字节长度和字节个数取决于字符串中的字符。如果字符串中只有 ASCII 编码的字符,那么每个字符占用一个字节,字符串的字节长度和字节个数相等。如果字符串中有非 ASCII 编码的字符,比如中文,那么每个字符占用多个字节,字符串的字节长度大于字节个数。一般来说,每个中文字符占用 3 个字节。

go 字符串变量最大字节值

底层是数组,可无限长
在这里插入图片描述

如何打印出字节长度和字符个数?

var s string = "Go 字符串类型占几个字节"
fmt.Println("s 的字节长度是:", len(s))                    // 输出 24
fmt.Println("s 的字节个数是:", utf8.RuneCountInString(s)) // 输出 10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值