Go語言愛好者週刊:第 160 期 — 竟然這麼多人不理解 map 的 make 含義

語言: CN / TW / HK

這裡記錄每週值得分享的 Go 語言相關內容,週日釋出。本週刊開源(GitHub: polaris1119/golangweekly [1] ),歡迎投稿,推薦或自薦文章/軟體/資源等,請 提交 issue [2]

鑑於一些人可能沒法堅持把英文文章看完,因此,週刊中會盡可能推薦優質的中文文章。優秀的英文文章,我們的 GCTT 組織會進行翻譯。

題圖:來自 golangweekly

刊首語

有一位網友後臺留言,遇到了一個面試題,這裡放出來看看大家知道答案嗎?以下程式碼輸出什麼?

package main

import "fmt"

type temp struct{}

func (t *temp) Add(elem int) *temp {
 fmt.Println(elem)
 return &temp{}
}

func main() {
 tt := &temp{}
 defer tt.Add(1).Add(2)
 tt.Add(3)
}

上期的題目正確率比之前好,達到了 52%。一起看看。

以下程式碼輸出什麼?

package main

func main() {
  m := make(map[int]int, 3)
  x := len(m)
  m[1] = m[1]
  y := len(m)
  println(x, y)
}

A:3 3;B:3 4;C:0 0;D:0 1

正確答案:D。這裡關鍵是 m[1] = m[1],右邊的 m[1] 返回 0(map 中不存在某個 key 時,返回零值),因此最後 map 中有一個元素:1->0。

不過,這道題竟然有 35% 的人選 A,完全不知道 make 對 map 而言,第二個引數意味著什麼。

資訊

1、 Go 向後相容討論 [3]

rsc 發起的相容性討論。

2、 CodePerfect [4]

Go 高效能 IDE,使用 C++編寫。不收收費的。

3、 chroma 2.3 釋出 [5]

純 Go 實現的通用語法高亮庫。

4、 Liftbridge 1.9 釋出 [6]

通過為 NATS 訊息傳遞系統實施持久的流增強,Liftbridge 提供了輕量級的,容錯的訊息流。

5、 bud 0.2.5 釋出 [7]

一個全棧框架。

6、 Buf 1.8 釋出 [8]

一種新的 Protobuf 處理庫。

7、 golang net/url 路徑穿越漏洞

golang 的元件 net/url 實現了 URL 的解析處理和查詢轉義。

文章

1、 Go 每日一庫之一個兼具單機和叢集模式的輕量級限流器 throttled

今天給大家推薦的工具是一個輕量級的限流器,star:1.2k。該工具實現了對資源的訪問速率限制,資源可以是特定的 URL、使用者或者任何自定義的形式。比如針對HTTP API介面。

2、 你信嗎?Go 泛型竟然已經被迅速採用

9 月 8 日,Go 語言社群釋出 2022 年第二季度開發者調查報告,本次調研覆蓋 5752 位受訪開發者,主題涉及他們在使用 Go 1.18 全新功能特性(包括泛型、安全工具和工作區)時的真實感受。

3、 在 Go 中進行 Web UI 開發 [9]

基於 sunmao-ui [10] 庫。

4、 不得不知道的Golang之sync.Map解讀!

本文結合原始碼,分析sync.Map的實現思路和原理,希望為更多感興趣的開發者提供一些經驗和幫助。

5、 Go:基於 Redis 實現的延遲佇列詳解

本文來自 Go 愛好者投稿,作者:finley。

6、 全面解讀!Golang中泛型的使用

Golang在2022-03-15釋出了V1.18正式版,裡面包含了對泛型的支援,那麼最新版本的泛型如何使用呢?有哪些坑呢?本文全面且詳細的帶你瞭解泛型在Golang中的使用。

開源專案

1、 go-sql-spanner [11]

Google Cloud Spanner 的 database/sql 驅動。

2、 seaweedfs [12]

一個快速的分散式儲存。

3、 go-set [13]

Set 的泛型實現。

4、 nset [14]

無符號整數的超快速和記憶體高效 Set 實現。

5、 gojq [15]

jq 的純 Go 實現。

6、 bun [16]

適用於PostgreSQL、MySQL、MSSQL和SQLite的SQL-first Go ORM。

資源&&工具

1、 toxiproxy [17]

模擬混亂網路條件的 TCP 代理。

2、 prolog [18]

Go 的 prolog 引擎。

訂閱

這個週刊每週日釋出,同步更新在 Go語言中文網 [19]微信公眾號 [20]

微信搜尋"Go語言中文網"或者掃描二維碼,即可訂閱。

wechat

參考資料

[1]

polaris1119/golangweekly: https://github.com/polaris1119/golangweekly

[2]

提交 issue: https://github.com/polaris1119/golangweekly/issues

[3]

Go 向後相容討論: https://github.com/golang/go/discussions/55090

[4]

CodePerfect: https://codeperfect95.com/

[5]

chroma 2.3 釋出: https://github.com/alecthomas/chroma

[6]

Liftbridge 1.9 釋出: https://github.com/liftbridge-io/liftbridge

[7]

bud 0.2.5 釋出: https://github.com/livebud/bud

[8]

Buf 1.8 釋出: https://github.com/bufbuild/buf

[9]

在 Go 中進行 Web UI 開發: http://www.myriptide.com/painless-web-ui-in-go/

[10]

sunmao-ui: https://github.com/smartxworks/sunmao-ui/

[11]

go-sql-spanner: https://github.com/googleapis/go-sql-spanner

[12]

seaweedfs: https://github.com/seaweedfs/seaweedfs

[13]

go-set: https://github.com/micnncim/go-set

[14]

nset: https://github.com/bloeys/nset

[15]

gojq: https://github.com/itchyny/gojq

[16]

bun: https://github.com/uptrace/bun

[17]

toxiproxy: https://github.com/Shopify/toxiproxy

[18]

prolog: https://github.com/ichiban/prolog

[19]

Go語言中文網: https://studygolang.com/go/weekly

[20]

微信公眾號: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91