成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go1.23 新特性:Slices、Panic、Cookie 等函數改進,效率提高了!

開發 前端
今天給大家分享了一些 Go1.23 新版本的新方法、函數,目前來看這些函數沒有特別大的功能調整,主要都是對于日常工程開發上的優化。

大家好,我是煎魚。

最近介紹了 Go1.23 的幾個重要新特性。今天給大家分享一些本次新版本的方法/函數的功能優化、改進的匯總。

主打一個快速知悉,跟上新用法。看看 rsc 在 Go 核心團隊負責人的職業生涯最后都推動了什么函數的合入。

Go1.23 方法/函數優化

slices.Repeat

這是一個今年(2024 年)才提出的新提案,原提案作者提供給功能介紹時,還給出了其他語言的相關案例。很快受到了 Go 官方團隊的響應并通過。

圖片圖片

函數簽名:

func Repeat[S ~[]E, E any](x S, count int "S ~[]E, E any") S

Repeat 方法會返回一個新的切片,函數的作用是將所提供的切片,按給定的次數進行重復。

注意:如果 count 為負數或溢出,該方法會觸發 panic 事件。

Go1.23 代碼例子如下:

import (
 "fmt"
 "slices"
)

func main() {
 s := []string{"煎魚", "咸魚", "摸魚"}
 repeat := slices.Repeat(s, 2)
 fmt.Println(repeat)
}

輸出結果:

[煎魚 咸魚 摸魚 煎魚 咸魚 摸魚]

os.DirFS

這個新提案由 rsc 于 2023 年從 2021 年的舊提案轉化過來,目的上是為了更安全地將目標文件復制到本地文件系統,認為可以幫助到很多場景。

圖片圖片

函數簽名:

func DirFS(dir string) fs.FS

os.DirFS 方法返回以目錄 dir 為根的文件樹的文件系統(fs.FS),再結合 os.CopyFS 方法可以實現一次性的遞歸復制文件和目錄。

Go1.23 代碼例子如下:

src := os.DirFS("/Users/eddycjy/hello.txt")
dst := "/tmp/hello.txt"

err := os.CopyFS(dst, src)
if err != nil {
 panic(err)
}

fmt.Printf("copied %s to %s\n", src, dst)

panic

在 Go1.22 及以前的版本,運行以下代碼:

func main() {
 panic("腦子\n進\nI\n煎魚了")
}

輸出結果如下:

panic: 腦子
進
I
煎魚了

goroutine 1 [running]:
main.main()
 /tmp/sandbox3096848362/prog.go:6 +0x25

Go1.23 新版本起,輸出結果將會變成:

panic: 腦子
 進
 I
 煎魚了

goroutine 1 [running]:
main.main()
 /tmp/sandbox1717599036/prog.go:6 +0x25

新版本后,panic 函數會用制表符縮進錯誤信息(如 panic 的參數)的第二行和后續行,以區別于第一個 goroutine 的堆棧跟蹤。

http.ParseCookie/ParseSetCookie

現在在 Go 程序中,如果我們要從 cookie 標頭字符串中提取 cookie 結構體。需要編寫以下類似的代碼:

req := http.Request{Header: http.Header{"Cookie": []string{raw}}}
cookies := req.Cookies()

雖然從原提案的角度來看還能用。但是終究繞了幾層才把東西取到,也不方便。

因此 @Eyal Posener 在 2018 年提出了 x/net/http/httpguts: add ParseCookie and ParseSetCookie[1] 的新提案訴求。在 2024 年,rsc 重新把這活拎了出來,加進了新版本中。

本次 Go1.23 是在 net.http 標準庫中新增了如下兩個方法:

  1. ParseCookie
  2. ParseSetCookie

ParseCookie

函數簽名:

func ParseCookie(line string) ([]*Cookie, error)

ParseCookie 解析 Cookie 標頭值并返回其中設置的所有 Cookie。

Go1.23 代碼例子如下:

func main() {
 lines := "session_id=eddycjy; value=hello-world; lang=en; lang=zh-CN"
 cookies, _ := http.ParseCookie(lines)
 for _, cookie := range cookies {
  fmt.Printf("%s: %s\n", cookie.Name, cookie.Value)
 }
}

輸出結果:

session_id: eddycjy
value: hello-world
lang: en
lang: zh-CN

如果存在多個相同字段,將會返回多次。

ParseSetCookie

函數簽名:

func ParseSetCookie(line string) (*Cookie, error)

ParseSetCookie 函數解析 Set-Cookie 標頭值并返回 Cookie。

Go1.23 代碼例子如下:

func main() {
 line := "session_id=eddycjy; MaxAge=0; lang=zh-CN; Domain=.eddycjy.com"
 cookie, _ := http.ParseSetCookie(line)

 fmt.Println("Name:", cookie.Name)
 fmt.Println("Value:", cookie.Value)
 fmt.Println("Domain:", cookie.Domain)
 fmt.Println("MaxAge:", cookie.MaxAge)
}

輸出結果:

Name: session_id
Value: eddycjy
Domain: .eddycjy.com
MaxAge: 0

在解析結果上,主要是對標 Cookie,有預定義的標準字段:

type Cookie struct {
 Name  string
 Value string

 Path       string    // optional
 Domain     string    // optional
 Expires    time.Time // optional
 RawExpires string    // for reading cookies only

 // MaxAge=0 means no 'Max-Age' attribute specified.
 // MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0'
 // MaxAge>0 means Max-Age attribute present and given in seconds
 MaxAge   int
 Secure   bool
 HttpOnly bool
 SameSite SameSite
 Raw      string
 Unparsed []string // Raw text of unparsed attribute-value pairs
}

如果有自定義字段需要讀取的,可以使用 Cookie.Raw 讀取到原始的字符串進行解析和額外處理。

總結

今天給大家分享了一些 Go1.23 新版本的新方法、函數,目前來看這些函數沒有特別大的功能調整,主要都是對于日常工程開發上的優化。

這些新調整也算是針對開發效率的一定的提效了,大家可以及時用到工作的開發上!

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

2024-08-20 08:51:41

2024-02-07 13:37:39

AWS系統應用程序

2024-08-01 08:47:04

Go計時器工程

2024-09-09 08:56:03

2021-12-08 12:50:39

代碼MyBatisJava

2012-05-02 11:09:38

無線網絡數據傳輸

2012-05-02 12:39:31

無線網絡多跳無線網絡數據傳輸

2024-05-11 09:24:15

性能Go團隊

2019-06-21 08:39:23

SQLmysql索引

2019-12-10 09:47:51

IaaS云計算物聯網

2021-07-28 09:32:57

Go社區GitHutGo模塊

2020-06-12 14:44:06

線程池模式nginx

2020-08-21 10:59:10

微軟服務器運維

2020-06-11 08:05:47

nginx線程池數據

2020-02-25 16:51:34

Rust廣告攔截器瀏覽器

2021-07-28 14:35:09

代碼進度條前端

2024-09-02 00:30:41

Go語言場景

2025-01-06 09:18:04

2020-09-02 08:27:58

CSS 屬性前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品亚洲一区二区 | 毛片免费视频 | 国产日产欧产精品精品推荐蛮挑 | 美女啪啪国产 | www.亚洲一区二区 | 一级在线 | 亚洲欧美在线一区 | 精品国产31久久久久久 | 精品国产乱码久久久久久蜜臀 | 欧美一卡二卡在线观看 | 久久久看| 视频在线一区二区 | 欧美一区二区三区在线 | 天堂网色| 欧美黄色小视频 | 中文字幕国产 | 免费同性女女aaa免费网站 | 国产高清精品在线 | 国产精品亚洲精品 | 亚洲精品乱码久久久久久按摩观 | 人人澡视频| 日韩av在线一区二区 | 欧美日韩网站 | 成年精品 | 国产高清一区二区三区 | 中文字幕一区二区三区乱码图片 | 日韩成人精品一区二区三区 | 蜜桃一区二区三区在线 | 亚洲精品一区二区三区四区高清 | 九九精品在线 | 亚洲国产精品一区二区三区 | 精品在线一区 | www.亚洲区| 欧美中文字幕在线 | 男女网站在线观看 | 孕妇一级毛片 | 亚洲美女一区 | 黄色免费看| 国产精品久久久久久 | 国产精品久久av | 成人高清在线 |