国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go1.24 新特性:更多的迭代器方法、JSON 支持省略零值、終結器的改進等

開發 前端
本次新版本增加的 runtime.AddCleanup? 函數是一個比原有 runtime.SetFinalizer 更靈活、更高效且更不易出錯的終結機制。

大家好,我是煎魚。

今天給大家繼續介紹 Go1.24 的新特性,主要涉及垃圾回收時的注冊函數機制、新增的迭代器方法、JSON 零值的優化。

改進的終結器(finalizer)

本次新版本增加的 runtime.AddCleanup 函數是一個比原有 runtime.SetFinalizer 更靈活、更高效且更不易出錯的終結機制。

AddCleanup 允許為對象附加一個清理函數,該函數會在對象不可達時執行。

例如像如下案例的代碼:

func main() {
 e := newExample(233)
 fmt.Printf("e=%v, type=%T\n", e, e)
}

type Example []byte

func (b Example) String() string {
 return fmt.Sprintf("Example(%d KB)", len(b)/1024)
}

func newExample(size int) *Example {
 b := make([]byte, size*1024)
 for i := range size {
  b[i] = byte(i) % 255
 }
 return (*Example)(&b)
}

如果我們希望在 Example 被垃圾回收時運行一個清理函數,現在可以直接借用 runtime.AddCleanup 就可以很便捷的達到目的了。

引入 runtime.AddCleanup 函數后,如下 Go1.24 的新版本代碼:

func cleanup(created time.Time) {
 fmt.Printf(
  "object is cleaned up! lifetime = %dms\n",
  time.Since(created)/time.Millisecond,
 )
}

func main() {
 e := newExample(233)

 now := time.Now()
 runtime.AddCleanup(e, cleanup, now)
 time.Sleep(10 * time.Millisecond)
 e = nil
 runtime.GC()
 time.Sleep(10 * time.Millisecond)
}

輸出結果:

object is cleaned up! lifetime = 10ms

可以看到該函數順利在 newExample 結束后進行垃圾回收時運行了提前注冊的函數。

slog 增加丟棄標識 Discard

Go1.24 新版本中添加一個包級變量 slog.DiscardHandler(類型為 slog.Handler),用于丟棄所有日志輸出。

提案如下:

圖片圖片

以前想要達到這個目的的話,slog 代碼需要寫成如下這樣:

func main() {
 log := slog.New(
  slog.NewTextHandler(io.Discard, nil),
 )
 log.Info("腦子進煎魚了...")
}

現在新版本后,代碼直接這么寫即可:

func main() {
 log := slog.New(slog.DiscardHandler)
 log.Info("腦子進煎魚了!")
}

增加 strings 標準庫迭代器方法

strings.Lines

Lines 函數簽名:

func Lines(s string) iter.Seq[string]

Lines 返回字符串 s 中換行結束行 \n 的迭代器。如果 s 為空,則迭代器不會產生任何行。如果 s 不以換行結束,則最后生成的行也不會以換行結束。

該迭代器返回一個一次性使用的迭代器。

示例代碼:

func main() {
 s := "腦子\n進\n煎魚了"
 for line := range strings.Lines(s) {
  fmt.Print(line)
 }
}

輸出結果:

腦子
進
煎魚了

strings.SplitSeq

SplitSeq 函數簽名:

func SplitSeq(s, sep string) iter.Seq[string]

SplitSeq 返回用 sep 分隔的 s 的所有子串的迭代器。該迭代器產生的字符串與 Split(s, sep) 返回的字符串相同,但不構造切片。

該迭代器返回一個一次性使用的迭代器。

示例代碼:

func main() {
 s := "腦子-進-煎魚了"
 for part := range strings.SplitSeq(s, "-") {
  fmt.Println(part)
 }
}

輸出結果:

腦子
進
煎魚了

strings.SplitAfterSeq

SplitAfterSeq 函數簽名:

func SplitAfterSeq(s, sep string) iter.Seq[string]

SplitAfterSeq 返回在每個 sep 實例之后分割的 s 子串的迭代器。該迭代器產生的字符串與 SplitAfter(s, sep) 返回的字符串相同,但不需要構造切片。

該迭代器返回一個一次性使用的迭代器。

示例代碼:

func main() {
 s := "腦子-進-煎魚了"
 for part := range strings.SplitAfterSeq(s, "-") {
  fmt.Println(part)
 }
}

輸出結果:

腦子-
進-
煎魚了

strings.FieldsSeq

FieldsSeq 函數簽名:

func FieldsSeq(s string) iter.Seq[string]

根據 unicode.IsSpace 的定義,FieldsSeq 返回圍繞空白字符串分割的 s 子串的迭代器。迭代器產生的字符串與 Fields(s) 返回的字符串相同,但不需要構建切片。

示例代碼:

func main() {
 s := "腦子 進\n煎魚了"
 for part := range strings.FieldsSeq(s) {
  fmt.Println(part)
 }
}

輸出結果:

腦子
進
煎魚了

strings.FieldsFuncSeq

FieldsFuncSeq 函數簽名:

func FieldsFuncSeq(s string, f func(rune) bool) iter.Seq[string]

FieldsFuncSeq 返回圍繞滿足 f(c) 的 Unicode 代碼點運行分割的 s 子串的迭代器。迭代器產生的字符串與 FieldsFunc(s) 返回的字符串相同,但不需要構建切片。

示例代碼:

func main() {
 f := func(c rune) bool {
  return !unicode.IsLetter(c) && !unicode.IsNumber(c)
 }

 s := "腦子,進;煎魚了..."
 for part := range strings.FieldsFuncSeq(s, f) {
  fmt.Println(part)
 }
}

輸出結果:

腦子
進
煎魚了

json.Marshal 支持省略零值

時隔近 4 年,Go 終于在 1.24 中支持 JSON 省略零值。這是很多同學在開發過程中比較煩惱的問題。這回總算是有個解決的口子了。

相關提案:

圖片圖片

以前我們使用 omitempty 標簽時:

type Person struct {
 Name      string    `json:"name"`
 BirthDate time.Time `json:"birth_date,omitempty"`
}

func main() {
 eddycjy := Person{Name: "煎魚"}
 b, err := json.Marshal(eddycjy)
 fmt.Println(string(b), err)
}

輸出結果:

{"name":"煎魚","birth_date":"0001-01-01T00:00:00Z"} <nil>

可以看到 birth_date 是有零值結果的。

在 Go1.24 新版本后,可以使用 omitzero 標簽:

type Person struct {
 Name      string    `json:"name"`
 BirthDate time.Time `json:"birth_date,omitzero"`
}

func main() {
 eddycjy := Person{Name: "煎魚"}
 b, err := json.Marshal(eddycjy)
 fmt.Println(string(b), err)
}

輸出結果:

{"name":"煎魚"} <nil>

可以看到 JSON 后 birth_date 的零值沒有了。只有 name 的值結果。符合使用預期。

總結

這次 Go1.24 還是可以的,帶來了一些比較實用的新特性方法。尤其是像是 JSON 零值等用法,可以有效解決一些小痛點。

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2025-01-06 09:18:04

2024-12-30 11:05:28

泛型Go類型別名

2024-12-23 08:44:49

2025-03-07 09:12:28

2025-02-12 08:50:22

2025-05-07 08:55:14

GoMap存儲

2025-01-20 08:51:32

2024-09-03 08:49:01

2022-05-05 11:20:08

KubernetesDocker云計算

2024-09-09 08:56:03

2024-11-19 09:10:19

迭代器Go語言

2022-12-09 08:52:51

Go匿名接口

2010-05-13 18:05:34

IIS服務器

2024-08-07 08:51:20

Go優化開發

2025-02-08 11:00:33

2014-12-04 10:47:18

Java 9

2025-06-16 08:54:01

macOS模式版本

2022-01-26 09:02:57

GoCut方法

2013-05-02 09:14:19

Java 8Java 8的新特性

2025-05-26 10:10:00

Go開發testing
點贊
收藏

51CTO技術棧公眾號

91精品亚洲一区在线观看| 久久天天做天天爱综合色| 久久亚洲精品视频| 黄色网在线免费观看| 亚洲自拍与偷拍| 91国视频在线| 国产一区二区三区四区五区入口| 精品不卡在线| 欧美国产高潮xxxx1819| 国产精品久久一区主播| 国产一级成人av| 久久精品国产亚洲精品| 成人自拍av| 亚洲精品小视频| 51漫画成人app入口| 日韩午夜在线观看视频| 大片免费播放在线视频| 亚洲超丰满肉感bbw| 成年人视频网站| 欧美激情在线看| 国产视频一区二区视频| 久久精品在线免费观看| 日本精品www| 99久久亚洲一区二区三区青草| 超薄肉色丝袜足j调教99| 国产自产2019最新不卡| 中文字幕av导航| 国产成人在线视频免费播放| 国产三级中文字幕| 国产成人午夜99999| 2019日韩中文字幕mv| 99re热视频这里只精品| 男人添女荫道口女人有什么感觉| 国产精品资源在线看| 男女视频网站在线观看| 国产亚洲女人久久久久毛片| 天天爱天天操天天干| 中文字幕成人av| jizzjizz亚洲中国少妇| 在线观看一区日韩| 色操视频在线| 国产亚洲精品成人av久久ww| 中文字幕综合| 国产精品成人一区二区三区吃奶| 久久久久免费av| 老牛影视免费一区二区| 国产成人啪免费观看软件 | 国产一区二区三区| 久久久久久久久久久91| 天天射成人网| 亚洲乱码一区二区三区| 久久婷婷一区二区三区| 老司机色在线视频| 欧美电视剧在线看免费| 亚洲精品三区| 成人午夜在线观看| 精品一区二区影视| av成人网在线| 欧美一区午夜视频在线观看| 在线不卡一区| 亚洲一区二区中文| 日韩福利一区二区三区| 蜜臀国产一区二区三区在线播放| 日韩一级片一区二区| 中文字幕欧美区| 国产中文字幕在线| 中文国产成人精品| 亚洲精品国产首次亮相| 国产91沈先生在线播放| 午夜激情久久久| 国精产品一区二区三区有限公司| 日本国产欧美一区二区三区| 日韩av二区在线播放| 成人女性文胸| 精品电影一区二区| 国产成人久久| xxxxxx在线观看| 欧美日韩免费一区| 美女视频一区| 国产综合欧美在线看| 久久亚洲二区三区| 色三级在线观看| 久久久久久国产精品| 久久最新视频| ga∨成人网| 日韩中文字幕视频在线| 亚洲高清二区| 91av入口| 中文字幕国产日韩| 亚洲综合国产| fc2人成共享视频在线观看| 曰本色欧美视频在线| 激情久久久久| 国产美女特级嫩嫩嫩bbb片| 亚洲欧美成人网| 欧美私人啪啪vps| 四虎影视av| 色一区av在线| 日本欧美一区二区| 韩国三级在线观看久| 欧美影院在线播放| 91美女片黄在线观看91美女| 俺来俺也去www色在线观看| 亚洲综合第一页| 亚洲男人天堂av| 熟女人妇 成熟妇女系列视频| 欧美色图第一页| 精品久久一区| 一道本在线免费视频| 色偷偷av一区二区三区乱| 日本免费在线视频不卡一不卡二| 黄网在线免费| 国产精品扒开腿爽爽爽视频| 久久久亚洲精品一区二区三区| 蜜桃视频在线观看播放| 青青草久久网络| 欧美日韩成人综合在线一区二区| 精品午夜久久| 久久国产情侣| 欧美在线视频观看| 国产精品剧情在线亚洲| 99精品美女视频在线观看热舞| 日本老太婆做爰视频| 亚洲激情国产精品| 国产a级片免费观看| 欧美乱人伦中文字幕在线| 国产亚洲女人久久久久毛片| 3344国产永久在线观看视频| 99久热在线精品视频| 午夜精品免费在线| 国产a久久精品一区二区三区| 国产99久久久精品| 在线电影一区| 亚洲美免无码中文字幕在线| 欧美日韩国产首页在线观看| 美女国产一区二区| 蜜臀va亚洲va欧美va天堂| 不卡中文字幕| 日本va欧美va精品发布| 91小视频xxxx网站在线| 精品一区二区国产| 欧美一级欧美三级| 久久9热精品视频| 美日韩精品视频免费看| 玉米视频成人免费看| 日本高清精品| 欧美色区777第一页| 激情综合中文娱乐网| 九九久久婷婷| 国产精品一级在线| 亚洲欧美在线专区| 超碰中文在线| 亚洲欧美日韩一级| 91av在线国产| 亚洲国产日韩在线一区模特| 妖精视频成人观看www| 国产日韩欧美中文在线| 免费人成黄页在线观看忧物| 97欧洲一区二区精品免费| 欧美日韩一区久久| 国产在线视频精品一区| 毛片在线视频| 国产精品久久久久国产精品日日| 国产精品色在线网站| 欧美成人视屏| 日本大片在线观看| 国产黄色一级电影| 色播色播色播色播色播在线| 美臀av在线| 女人天堂在线| 1stkiss在线漫画| 激情av综合| 久久精品色综合| 欧美日韩激情在线一区二区三区| 9国产精品午夜| 久久国产精品色婷婷| 久久嫩草精品久久久精品 | 精品国产乱子伦一区| 精品乱码亚洲一区二区不卡| 天天影视天天精品| 黑人精品欧美一区二区蜜桃 | 久久在线观看| 深爱激情综合网| 天堂中文在线资| 亚洲国产精品久久久久秋霞蜜臀| 日韩欧美黄色动漫| 亚洲欧美国产va在线影院| 性日韩欧美在线视频| 蜜桃臀一区二区三区| 一级一片免费视频| 一区二区欧美视频| 亚洲精品在线一区二区| 国产精品制服诱惑| 传媒av在线| 欧洲成人一区| 国产成人精品一区二区三区网站观看| 91在线视频免费观看| 亚洲欧美日韩一区二区在线| 亚洲影院色无极综合| 天天做天天躁天天躁|