phpor

5月 112021
 

https://mp.weixin.qq.com/s?__biz=MzU2MDc3OTgwOQ==&mid=2247484142&idx=1&sn=b33ee34c8cf1e290171ee896634d3f58&chksm=fc0385a0cb740cb6fad2c11c55aca9764c267d3959980c506c5adfb456a8c111a5fae321f1cc&scene=132&ascene=0&devicetype=android-29&version=28000339&nettype=cmnet&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=Aerk5wJCdNN1LngL1e8TI8Y%3D&pass_ticket=KNotPwjCw%2B35X1eg6d7wXioVvWchi1Wp2pWWZfRKkOqdnm71Hm96S1MQcJehSKd9&wx_header=1

了解了一种查看golang数据结构的内部结构的方法,unsafe加自定义结构体

 Posted by at 下午 12:09
5月 112021
 

示例:

  1. 这里的字符串b复用了字符串a的一部分,使得
    1. 截取操作很快
    2. 字符串a离开作用域而字符串b没有离开作用域的话,a不能被gc
 Posted by at 上午 11:35
4月 112021
 

 

连接状态:

相关代码: src/net/http/server.go

 

 

状态说明:

New: 从Accept拿到一个新连接后,连接被标记为New,并触发hook

Active: 对于http2,只要连接上有请求存在,就算是Active的

Idle: 请求处理完毕,处于keep-alive状态

Hijack: 连接被偷走了,自己不需要继续处理了,这种连接不会进入Close状态的,Hijack 是个终态

Close:连接已关闭

 

参考:

Golang Http 学习(一) Http Server 的实现 – SegmentFault 思否

 Posted by at 下午 4:28
3月 152021
 

https://github.com/dolthub/dolt

让MySQL表也能版本管理,这个对于存储配置的数据库非常不错。

通常使用git存储配置的好处是方便查看变更历史。然而,如何让生产服务器访问却不太方便。

所以,很多时候使用MySQL存储配置,但是,查看变更历史就不那么方便了。

现在,有了dolt,简直太棒了!

 Posted by at 下午 1:56
2月 202021
 

golang程序如果build时不是static的话,Linux上基本会依赖glibc的动态库的,通常也不是啥问题,但是,如果你期望一个更高版本的glibc,但是目标机器上没有,就尴尬了,这时候,其实可以编译成一个静态链接的二进制程序的,这时候需要的就是编译环境上有glibc-static,centos上的安装方法为:

 

那么,静态链接和动态链接后的目标文件差别会非常大吗?

  1. 从目标文件大小上来看,应该会大一些,但是并不大的离谱:
  2. 或许这个差值基本比较固定,你的程序越大,这个差值的占比就越小;但是,和你使用到的glibc中的代码的多少有关系
  3. 从执行的角度来看,动态链接是会启动更快一些,也比较节省内存,因为底层的动态库在内存中只需要加载一次;但是,如果我们的程序是跑在容器中的,而且,通常容器中只有一个进程,那么,扩容器共享底层动态库的可能性就很小,因为它能不是同一个文件(或许有技术可以做到这一点)。
  4. 编译的时候,静态链接会比动态链接要慢一点点,应该差别也不会太明显
  5. 所以,过时的静态链接可能真的又可以回来了

 

静态链接只需要添加选项:

 

注意:

  • 静态链接不代表完全没有依赖,有些情况下对内核版本是有要求的
 Posted by at 下午 12:10