題解:31% 正確率是什么 Go 題目?
這里記錄每周值得分享的 Go 語(yǔ)言相關(guān)內(nèi)容,周日發(fā)布。本周刊開(kāi)源(GitHub:polaris1119/golangweekly[1]),歡迎投稿,推薦或自薦文章/軟件/資源等,請(qǐng)提交 issue[2] 。
鑒于一些人可能沒(méi)法堅(jiān)持把英文文章看完,因此,周刊中會(huì)盡可能推薦優(yōu)質(zhì)的中文文章。優(yōu)秀的英文文章,我們的 GCTT 組織會(huì)進(jìn)行翻譯。
由于微信公眾號(hào)不支持外鏈,文中大量鏈接可通過(guò)文末「閱讀原文」查看。

題圖:各大語(yǔ)言收入排行,來(lái)自 StackOverflow 最新調(diào)研
刊首語(yǔ)
上期題目又是慘不忍睹,正確率 31%。以下代碼輸出什么?
package main
import "fmt"
func main() {
var p [100]int
var m interface{} = [...]int{99: 0}
fmt.Println(p == m)
}
A:true;B:false;C:panic;D:編譯失敗
正確答案:A。
網(wǎng)友「上弦月」的解釋挺到位的,直接引用;
A value x of non-interface type X and a value t of interface type T are comparable when values of type X are comparable and X implements T. They are equal if t's dynamic type is identical to X and t's dynamic value is equal to x. ——以上內(nèi)容來(lái)自 https://go.dev/ref/spec#Operators
個(gè)人理解:
interface類型變量與非interface類型變量判等時(shí),首先要求非interface類型實(shí)現(xiàn)了接口,否則編譯不通過(guò)(本題接口方法集為空,我們認(rèn)為所有類型都實(shí)現(xiàn)了該接口) 滿足上一條的前提下,interface類型變量的動(dòng)態(tài)類型、值均與非interface類型變量相同時(shí),兩個(gè)變量判等結(jié)果為true,結(jié)合array判等規(guī)則,答案為true 我看到題目的時(shí)候,感覺(jué)答案要么是true、要么是編譯不過(guò)。試了一下發(fā)現(xiàn)能比較,然后去翻文檔,發(fā)現(xiàn)了上面提到的第一個(gè)知識(shí)點(diǎn),又是漲知識(shí)的一天。
本期來(lái)一道簡(jiǎn)單的題目。以下代碼輸出什么?
package main
import "fmt"
func main() {
fmt.Println(09)
}
資訊
1、render 1.5 發(fā)布[3]
輕松 Render JSON,XML,二進(jìn)制數(shù)據(jù)和 HTML 模板響應(yīng)。
2、cobra 1.5.0 發(fā)布[4]
一個(gè)構(gòu)建現(xiàn)代 CLI APP 的框架。
3、benthos 4.3 發(fā)布[5]
流處理。
4、panicparse 2.3 發(fā)布[6]
Panic 堆棧跟蹤解析器和調(diào)試工具。
5、phonenumbers 1.1 發(fā)布[7]
Google 電話號(hào)碼解析庫(kù)的 Go 移植版。
6、clash 1.11 發(fā)布[8]
Go 中基于規(guī)則的隧道。
文章
1、拒絕千篇一律,這套Go錯(cuò)誤處理的完整解決方案值得一看!
在使用Go開(kāi)發(fā)的后臺(tái)服務(wù)中,對(duì)于錯(cuò)誤處理,一直以來(lái)都有多種不同的方案,本文探討并提出一種從服務(wù)內(nèi)到服務(wù)外的一個(gè)統(tǒng)一的傳遞、返回和回溯的完整方案,拋磚引玉,希望與大家一起討論分享。
項(xiàng)目中遇到了可重入鎖的需求和實(shí)現(xiàn),具體記錄下。
一款 Go 語(yǔ)言 的打樁框架,目標(biāo)是讓用戶在單元測(cè)試中低成本的完成打樁,從而將精力聚焦于業(yè)務(wù)功能的開(kāi)發(fā)。
第 148 期周刊的題目解析。
5、等等, 怎么使用 SetMemoryLimit?[9]
這是 Go1.19 將實(shí)現(xiàn)的功能。
開(kāi)源項(xiàng)目
1、h3-go[10]
層次空間索引系統(tǒng)。
2、critical[11]
TCL 解析器。
3、hertz[12]
一個(gè) Golang 微服務(wù) HTTP 框架。
4、gambas[13]
Go 的數(shù)據(jù)分析工具,類似 Python 中的 pandas。
5、ksql[14]
簡(jiǎn)單、強(qiáng)大的 SQL 庫(kù)。這里是一篇介紹文章:https://betterprogramming.pub/golang-sql-problems-with-existing-libraries-145a037261b8。
資源&&工具
1、viddy[15]
一個(gè)現(xiàn)代的 watch 命令。
2、tproxy[16]
分析 TCP 連接的工具
3、100 天學(xué) Go 系列文章[17]
英文的。
4、K8S 指南[18]
GitHub 開(kāi)源。
訂閱
這個(gè)周刊每周日發(fā)布,同步更新在Go語(yǔ)言中文網(wǎng)[19]和微信公眾號(hào)[20]。
微信搜索"Go語(yǔ)言中文網(wǎng)"或者掃描二維碼,即可訂閱。
參考資料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]render 1.5 發(fā)布: https://github.com/unrolled/render
[4]cobra 1.5.0 發(fā)布: https://github.com/spf13/cobra/releases/tag/v1.5.0
[5]benthos 4.3 發(fā)布: https://github.com/benthosdev/benthos
[6]panicparse 2.3 發(fā)布: https://github.com/maruel/panicparse
[7]phonenumbers 1.1 發(fā)布: https://github.com/nyaruka/phonenumbers
[8]clash 1.11 發(fā)布: https://github.com/Dreamacro/clash
[9]等等, 怎么使用 SetMemoryLimit?: https://colobu.com/2022/06/20/how-to-use-SetMemoryLimit/
[10]h3-go: https://github.com/uber/h3-go
[11]critical: https://github.com/skx/critical/
[12]hertz: https://github.com/cloudwego/hertz
[13]gambas: https://github.com/jpoly1219/gambas
[14]ksql: https://github.com/VinGarcia/ksql
[15]viddy: https://github.com/sachaos/viddy
[16]tproxy: https://github.com/kevwan/tproxy
[17]100 天學(xué) Go 系列文章: https://dev.to/mr_destructive/series/17548
[18]K8S 指南: https://github.com/mikeroyal/Kubernetes-Guide
[19]Go語(yǔ)言中文網(wǎng): https://studygolang.com/go/weekly
[20]微信公眾號(hào): https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
