-
淺談 Go 語言代碼注釋問題
每隔一段時間,網(wǎng)上總會突然出現(xiàn)一些令人討厭的帖子,其觀點是:不應該為代碼寫注釋,它存在的唯一原因是因為代碼本身不足夠好。對于這些論點,我完全不能茍同。 爛代碼 他們的觀點也不完全是錯誤的。沒有人能說自己的代碼足夠好。代碼本身也會慢慢變壞。你知道什么時候代碼腐爛得最厲害嗎?當你六個月沒有碰這些代碼的時候! 當回過頭再讀的時候,你會非常好奇:“這個作者到底是怎么想的?”(于是,使用 Git blame 來查看歷史記錄,沒想到代碼竟然是自己寫的,因為這是你的代碼。) 反對注釋者的論點是:需要注釋的唯一…
-
詳述 Golang 的符號表
???本文基于 Go 1.13。 符號表是由編譯器生成和維護的,保存了與程序相關的信息,如函數(shù)和全局變量。理解符號表能幫助我們更好地與之交互和利用它。 符號表 Go 編譯的所有二進制文件默認內(nèi)嵌了符號表。我們來舉一個例子并研究它。下面是代碼: var?AppVersion?string func?main()?{ ?fmt.Println(`Version:?`+AppVersion) } 可以通過命令?nm?來展示符號表;下面是從?OSX?的結(jié)果中提取的部分信息: 00000000011772…
-
Go:符號表是什么?如何使用?
???本文基于 Go 1.13 ,原文及譯者信息在文末。 符號表是由編譯器生成和維護的,保存了與程序相關的信息,如函數(shù)和全局變量。理解符號表能幫助我們更好地與之交互和利用它。 符號表 Go 編譯的所有二進制文件默認內(nèi)嵌了符號表。我們來舉一個例子并研究它。下面是代碼: var?AppVersion?string func?main()?{ ?fmt.Println(`Version:?`+AppVersion) } 可以通過命令?nm?來展示符號表;下面是從?OSX?的結(jié)果中提取的部分信息: 00…
-
詳述 Golang 的符號表
???本文基于 Go 1.13。 符號表是由編譯器生成和維護的,保存了與程序相關的信息,如函數(shù)和全局變量。理解符號表能幫助我們更好地與之交互和利用它。 符號表 Go 編譯的所有二進制文件默認內(nèi)嵌了符號表。我們來舉一個例子并研究它。下面是代碼: var?AppVersion?string func?main()?{ ?fmt.Println(`Version:?`+AppVersion) } 可以通過命令?nm?來展示符號表;下面是從?OSX?的結(jié)果中提取的部分信息: 00000000011772…
-
3種常用的 Web 會話管理方式
http 是無狀態(tài)的,即我們的一次請求結(jié)束后,下一次請求,服務端他并不知道是哪個用戶發(fā)來的。 我們在業(yè)務開發(fā)中通常是不需要關注是哪個客戶端發(fā)來的,更多的是關注是哪個用戶發(fā)來的。 基于這個特點,我們在處理業(yè)務邏輯時,就得想方設法地在下一次請求時讓服務端知道我是哪個用戶。 為什么是下一次呢? 因為首先我們得先登錄,才能告訴下一次請求是哪個,否則我們的很多業(yè)務就沒法開展,這就是所謂的會話管理。 那我們在項目里通常是怎么去管理我們的會話呢? 下面介紹常用的三種方式: 一、基于 server 端 sess…
-
基于 Go 語言開發(fā)的監(jiān)控系統(tǒng)
01?介紹 小米開源的監(jiān)控系統(tǒng) open-falcon 和滴滴開源的日志采集工具 falcon-log-agent 作為一組黃金搭檔,被互聯(lián)網(wǎng)公司廣泛使用。 本文介紹怎么使用這組黃金搭檔監(jiān)控業(yè)務系統(tǒng)的日志。 02? open-falcon open-falcon 使用 Golang 和 Python 開發(fā),其中 Python 主要開發(fā)的是 Dashboard。 限于篇幅,本文不準備介紹 open-falcon 的原理,僅介紹如何安裝。 安裝 open-falcon 之前,必須確保已成功安裝 Re…
-
Go語言中淺拷貝和深拷貝的區(qū)別是什么?
要想搞明白深拷貝和淺拷貝的區(qū)別,我們需要先弄懂以下幾點: 一、值類型和引用類型 Go 語言里面變量有兩類,一類是值類型,一類是引用類型。 兩者區(qū)別是什么呢? 我們在電腦里面創(chuàng)建的變量,都是需要內(nèi)存來存放的。 值變量就是直接,一個內(nèi)存地址對應一個值。 而引用變量,則是某個值存放的是另一個值的地址。 我畫了一個邏輯圖,幫助我們?nèi)ダ斫膺@個概念。 在 Go 語言中: string、int、bool、float 等這些都屬于值類型 slice、map、chan 等這些都屬于引用類型 二、什么是淺拷貝和深拷…
-
面試官:值為 nil 為什么不等于 nil ?
小明同學去面試被問到了這么一個面試題,請看代碼: 請問輸出結(jié)果是啥? 可能很多同學,會認為結(jié)果是輸出兩個 nil。 為什么呢? 因為 f 和 a 都沒初始化,都是 nil,所以循環(huán)遍歷后肯定也是 nil。 如果你的答案也是這樣,那就掉進坑里了。 答案是,啥都不會輸出! 且聽我慢慢給你分析: 一、變量的值和類型 我們先來打印下這兩個值: 我們這樣打印其實是打印的是他的值,是 nil 沒錯的。 但是類型不是 nil。 我們可以這樣打印他類型: 二、if 判 nil 含有對類型的判斷 當我們從 int…
-
面試官:值為 nil 為什么不等于 nil ?
小明同學去面試被問到了這么一個面試題,請看代碼: var?f?func() var?a?*struct{} list?:=?[]interface{}{f,?a} for?_,?item?:=?range?list?{ ?if?item?==?nil?{ ??fmt.Println("nil") ?} } 請問輸出結(jié)果是啥? 可能很多同學,會認為結(jié)果是輸出兩個 nil。 為什么呢? 因為 f 和 a 都沒初始化,都是 nil,所以循環(huán)遍歷后肯定也是 nil。 如果你的答案也是這樣,那就掉進坑里了…
-
Go 中的數(shù)據(jù)分析——如何使用 Gota 包
數(shù)據(jù)分析是過濾、操縱和處理原始數(shù)據(jù)和數(shù)據(jù)集以從中獲得洞察力的過程。Python 和 R 通常是數(shù)據(jù)分析的首選語言。但是這些天,Go 正為此目的而變得越來越流行。在本教程中,我們將介紹 Gota(Go 中的數(shù)據(jù)分析包)及其核心功能和用途。