游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Go编译时写入数据的原理

  场景
  公司线上运行的Go服务存在多个版本
  时间:某天凌晨
  事情:线上Go服务突然间crash
  紧急处理:重启Go服务
  故障排查:查询日志,找出可能出现的堆栈信息以及追溯源码
  问题:线上同时存在多个版本,如何知道当前crash的程序属于哪个版本?添加版本信息的两种方案
  方案1,手动添加版本信息:packagemainimport(flagfmt)下面三个变量,每次发版都要修改varversionv0。0。1程序版本号vargitTagv0。0。1gittag号vardateTime2021081410:00:00编译生成时间funcmain(){debugVerInfo:flag。Bool(ver,false,showappversioninfo)flag。Parse()ifdebugVerInfo{fmt。Println(versionis:,version)fmt。Println(dateTimeis:,dateTime)fmt。Println(gitTagis:,gitTag)return}fmt。Println(dootherthing)}
  由于手动在代码中添加版本信息,所以在排查时可以查看到对应信息。code。clientverversionis:v0。0。1dateTimeis:2021081410:00:00gitTagis:v0。0。1
  分析:
  在很多公司甚至开源项目都会采用该方式,在代码中显式地添加版本等信息。假设不经常发版或者发版周期比较长,则完全没问题假设发版频繁,很大概率会出现版本信息的遗漏、错误假设版本信息忘记更改,则查询出来的信息就是错的
  针对以上情况,提出一个问题:Go是编译型语言,版本等信息是否可以在编译时,自动地打包到二进制文件中?
  方案2,自动打包版本信息:packagemainimport(flagfmt)varversionv0。0。0此处暂时只填写大的版本号vargitTagstringvardateTimestringfuncmain(){debugVerInfo:flag。Bool(ver,false,showappversioninfo)flag。Parse()ifdebugVerInfo{fmt。Println(versionis:,version)fmt。Println(dateTimeis:,dateTime)fmt。Println(gitTagis:,gitTag)return}fmt。Println(dootherthing)}
  在编译时,打包版本等信息到Go的二进制文件中:gobuildldflagsXmain。versionv0。0。1Xmain。dateTimedateYmd,H:M:SXmain。gitTaggittagoclientbuild通过ldflags的X参数可以在编译时将值写入变量
  变量格式:包名称。变量名称值
  查看版本信息code。clientverversionis:v0。0。1dateTimeis:2021081410:00:00gitTagis:v0。0。1
  优点:无需代码中显式添加版本等信息避免手动添加版本信息时,遗漏或者错误等情况发生可使用持续集成工具自动把版本等信息打包到二进制文件中原理
  二进制文件在加载到内存中之后,整个内存空间会被划分为若干段。除了代码区、数据区、堆、栈,还有有一个段为符号表。
  在编译时,把版本等信息打包到符号表中,供程序运行时使用。〔rootlocalhostdemo〕readelfsclientgrepmain。。。。。。1686:00000000005608b016OBJECTGLOBALDEFAULT10main。version1687:00000000005608a016OBJECTGLOBALDEFAULT10main。gitTag1688:000000000056089016OBJECTGLOBALDEFAULT10main。dateTime。。。。。。2320:00000000004eb2e87OBJECTGLOBALDEFAULT2main。version。str2321:00000000004ebba020OBJECTGLOBALDEFAULT2main。dateTime。str2322:00000000004eb2e07OBJECTGLOBALDEFAULT2main。gitTag。str
  使用readelfs命令查看编译好的Go二进制文件符号表信息,可以明显看到在编译时写入的三个变量。
  其中,main。version、main。gitTag、main。dateTime大小都为16,是指在Go中的string类型结构体大小。(gdb)ptypeversiontypestructstring{uint8str;intlen;}(gdb)ptypedateTimetypestructstring{uint8str;intlen;}(gdb)ptypegitTagtypestructstring{uint8str;intlen;}
  不知细心的你是否发现,在符号表显示的变量具体值main。version。str、main。dateTime。str、main。gitTag。str长度都比实际多一个字节。虽然目前Go实现了自举,但是编译Go编译器的编译器还是用C语言写的
  C语言字符串(字节数组)是非安全类型,使用尾零来标识字符串结束。其中,尾零也占用一个字节。
  尾零是ASCII第一个元素0,即:NUL(gdb)pversion1v0。0。1(gdb)pdateTime220210813,23:26:44(gdb)pgitTag3v0。0。1

任意依恋结局什么意思,任意依恋大结局男主死了没言情剧《任意依恋》给带来年少时结下恶缘黯然分离的男女主人公,可长大后成为目中无人的顶级韩流明星和卑微势利的纪录片导演身份再度相遇而开展恋情,最后男主申晙暎因癌症去世,也没能跟鲁……微信分销商城系统的发展势不可挡移动电商时代的来临,让网络分销模式更为火热了。其中,微信分销系统的效果及优势不容小觑。微信分销依托微信为载体,拥有不少传统网络分销模式无法匹敌的优势。微信分销平台,把用户……世界上第一部丧尸电影(精选16部丧尸电影)世界上第一部丧尸电影是什么你知道吗?史上第一部丧尸题材的片为1968年拍的《活死人之夜》,虽然该片之前也有同类型的,但是这部影片为后续丧尸片定下了丧尸的几大定律。此后,僵尸电影……叶轻眉根本没死(叶轻眉身世揭晓)叶轻眉根本没死?其实,叶轻眉在刚开场的时候就死了。叶轻眉,猫腻所着小说《庆余年》的角色,范闲的母亲。从故事一开始便已死去,但是她的影响贯穿着整本书。1叶轻眉根本没死?……好看10部8分以上冷门良心国产剧盘点(图)好看10部8分以上冷门良心国产剧盘点(图)谁说国产没有好剧?明明有《武林外传》、《潜伏》、《大宅门》、《倚天屠龙记》、《伪装者》middot;middot;middot;……如何培养大格局?大格局者,理想远大,志向高远,心胸开阔,气吞山河,深谋远虑,智深勇沉,可上九天揽月,可下五洋捉鳖。如何养成大格局呢?前人早已给出了答案:读万卷书,行万里路。说……国家队出击!2大运营商站队华为,爱立信仅占3,诺基亚彻底出局众所周知,改革开放以来中国的经济水平和科技实力有了跨越式的提升,很多科技领域取得很大的提升,导致很多西方国家开始畏惧中国,其中华为5G技术全球领先,以其为首的科技企业多受美国限……深海利剑大结局介绍,深海利剑大结局剧情是什么军旅剧《深海利剑》开播时候给观众带来精彩的表演,不过众多人关注结局,却最后剧情给带来一群九零后在校大学生历经挑选对我国军队新式潜水艇海底潜航,过后驱逐外国的侦查和搔扰,好保卫领……阿宁结局是什么,盗墓笔记阿宁为什么要当人蛇?阿宁是《盗墓笔记》中鲜有的女性角色之一,大家都人物阿宁结局最后死了,其实,阿宁的结局是没有死的,只是变作了人蛇。在原著小说的阿宁,是不少读者深爱的角色之一,她拥有帅气靓丽……分析称2022年重卡行业竞争将更加激烈中国重汽等押宝新能源每经记者:彭斐每经编辑:文多在排放法规进一步趋严、传统燃油重卡市场再度压缩、新能源汽车渗透率大幅度提高,以及存量市场竞争加剧的背景下,我国的重卡江湖也在发生改变。1……寄生虫获最佳剧本电影寄生虫讲述了什么近日,举办的奥斯卡颁奖典礼上面,电影《寄生虫》获得了最佳电影原创剧本,并且这部剧是首个非英语剧本的电影获奖。电影《寄生虫》讲述了什么故事?一起来看一下。寄生虫获最佳剧本……孟祥飞用超算推动一个加速创新的中国每秒可计算百亿亿次的超级计算机正在思考的问题,关乎宇宙演化、自然灾害、人工智能以及生命健康等各个领域:百亿级高效高通量虚拟药物筛选、全尺寸航空航天飞行器超百亿网格计算流体力学模……
火遍全球的Blackpink,竟然也在背中古包时尚不会让你变得性感,你的经历和想象力才能让你变得性感,而要想得到这些性感没有别的捷径,唯一的方法就是你得好好生活。山本耀司野生代言要问当下……选电视的重要参数之一,不能忽视你知道你家电视屏幕刷新率是多少吗?如果没有特意提起,买电视的时候你会在意这个参数吗?手机屏幕的刷新率早已达到90、120Hz。电脑屏幕刷新率更是高达300Hz。而我们的电视普遍……2021自动驾驶商业应用大会隆重举行2021年4月8日,由车载信息服务产业应用联盟(TIAA)、四川大学、电子科技大学、成都高新技术产业开发区管理委员会联合主办的第十届TIAA大会暨2021自动驾驶商业应用大会在……重拳整治下,优爱腾们还有盈利的那天吗?最近几天,在监管政策决心整治文娱圈内容生态的背景之下,互联网几大视频平台的日子好像也变得难过起来。虽然之前腾讯视频《扫黑风暴》的热播着实收获了不少好评,但剧中超前点播的话……双十一险些踩雷!盲撸投影仪有风险,看攻略真的很重要昨晚,和我一样一边看着那个男人和那个女人直播一边疯狂剁手的,请在评论区扣1。昨晚的淘宝已经承受不住大家的热情,开局10分钟就崩了!淘宝:悠着点,我怕了。姐妹们,定金……如何保养家里的麦克风?分享几个实用小技巧麦克风使用不当还会降低寿命?无论是什么类型的麦克风,都建议大家存放在湿度较低的环境中,这是因为潮湿会对麦克风中的振膜和其它零部件带来的影响。如果麦克风长期处于高湿度的环境……深度总结RFID在离散制造企业中的应用处于智能制造转型、改造和升级阶段的企业,或多或少都听说过RFID技术,然而,网上信息冗杂、众说纷纭、各有侧重,让人眼花缭乱,无从判断。作为离散制造企业的负责人,RFID到……税务UKey,发票开具指南来了!Mark一下今天就给大家推荐一篇税务Ukey的开票指南,赶紧收下吧!CONTENTS目录01增值税专用发票的开具02增值税普通发票的开具03折扣开具04……高通阿蒙支持Sub6GHz和毫米波双频段的5G基带才是真5G来源:IT之家作者:沧海在今日的高通骁龙技术峰会上,高通正式发布了高通骁龙765765G865处理器,其中骁龙865定位旗舰,骁龙765集成了X525G基带,预计骁龙76……早鸟票已售罄,华为HDC开发者大会与你相约松山湖一年一度的华为HDC开发者大会是科技领域的盛会,2021年全新一届大会举办时间已定档,10月22日至24日,与你相约有着华为欧洲小镇之称的东莞松山湖。,作为一场技术干货的盛宴,……电气运行试题十九1、高压断路器的作用答:正常运行时,接通或断开电路的空载电流和负荷电流。当电气设备,线路故障时,高压断路器与保护装置相配合,迅速自动能切除故障电流。需要时能自动重合……定了!今年2月14日情人节礼物需要这些渠道隔离疫情不隔离爱,情不欠费爱不停歇。眼看就快到一年一度的情人节了,今年的情人节跟以往的情人节不同,没有电影院,没有鲜花,只有被隔离,最实用的礼物就是医护产品,比如医用口罩、一次……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网