精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go1.18 新特性:引入新的 Netip 網絡庫

開發 前端
這個網絡地址庫,一般都用的比較少。但是 Brad Fitzpatrick 在此投入了大量的精力和研究,達到了最終的目標。

大家好,我是煎魚。

寫這篇文章時是大年初一,原本想說這個月就要發布 Go1.18 了。但是,好家伙,Go1.18 beta2 發布了,官方告知社區 Go1.18 要拖更到 3 月份了,咕咕咕...

如下圖:

所以還是得繼續學習新特性,今天煎魚將結合 Brad Fitzpatrick 寫的《netaddr.IP: a new IP address type for Go[1]》帶大家了解 Go1.18 的新網絡庫 net/netip 的緣由。

背景

大佬離職

原本 Go 開發團隊中的 Brad Fitzpatrick,在 2010~2020 年都在 Go 團隊工作,在 2021 年起換公司了。

如下推特的消息:

離職的原因是:做了同樣的東西太久了,有些厭煩,不想陷在一個舒適的困境中。

現在來看是換到了 Tailscale,做 WireGuard 相關工作,要經常與網絡庫打交道。

需求誕生

大佬公司寫的 Tailscale,本質上是一個網絡應用程序,要與網絡打交道,又是用 Go 寫的,就會涉及到標準庫 net:

  • 在單個 IP 類型上使用 net.IP。
  • 網絡表示上使用 net.IPNet。

示例代碼:

import (
"fmt"
"net"
)

func main() {
fmt.Println(net.IPv4(8, 8, 8, 8))
}

輸出結果:

8.8.8.8

Brad Fitzpatrick 在實際編寫和使用時,發現 net 標準庫的類型有很多問題,很不好用。

現在有什么問題

Brad Fitzpatrick 對于標準庫 net.IP 的問題,直接在文章中列舉了出來,論據十足。

共 7 個大問題:

  • 它是可變的。net.IP 的底層類型是 []byte,這意味著你傳遞給它的任何東西都可能改變它。
  • 它不具有可比性。因為 Go 中的 slice 不具有可比性,這意味著 net.IP 不支持 Go 的 == 運算符的對比,不能作為 map 的 key 來使用。
  • 它有兩種 IP 地址類型,要糾結用 net.IP,還是 net.IPAddr,要選擇就會很煩人。
  • 它很大。Go 的 net.IP 包含 2 個部分,分別是 24 字節的 slice header 和 4/6 字節的 IP 地址。如果是 net.IPAddr 還會包含 Zone 字段。
  • 它會在堆上分配內存。Go 的 net 包到處都是分配,把更多的工作放在了 GC 上。
  • 它不可解析。從字符串形式解析 IP 時,Go 的 IP 類型無法區分 IPv4 映射的 IPv6 地址和 IPv4 地址。
  • 它是透明類型(transparent type),net.IP的定義是:type IP []byte,是其公共API的一部分,不可更改。

Brad 也有提到有些是當年早期的設計,當時經驗不足,或是沒有考慮好。

現在受限于 Go1 兼容性承諾,已經無法改變了(兼容性保障的雙刃劍?)。

這是個真實版 “Eating your own dog food”,所以在 Tailscale 他又重新造了一個輪子inetaf/netaddr[2],想貢獻出來,塞進標準庫里。

未來想要的樣子

對比表格如下:

特性

老方案 net.IP

新方案

不變的

?, slice

?

可比的

?, slice

?

占用空間小

?,28~56 字節

?,固定 24 字節

不在堆上分配

?

?

支持 IPv4 和 IPv6

?

?

區分 IPv4 和 IPv6

?

?

支持 IPv6 區域

?

?

不透明的類型

?

?

與標準庫互通

?

??,需適配方法

想要的樣子,其實是 Brad 業務實戰出來的訴求,就是要支持前面提到的 7 點。

解決方案

當前的進展

實現的結果,也就是新方案做出來了,他就是inetaf/netaddr[3] 這個庫(當然,也不排除是結果倒推理論)。并且在 Go issues 中發起 issues 和 proposal。

https://pkg.go.dev/inet.af/netaddr

Russ Cox 發起了新提案的討論《proposal: net/netaddr: add new IP address type, netaddr package (discussion)[4]》,并被接納,進入了 Go1.18 的新特性當中。

重造過程

新的 net/netip 庫的每一個考量點,Brad 都在文章中有所詳細講解。

受限于篇幅,我們拿其中兩點來分享,有興趣的小伙伴可以閱讀原文的剖析部分。

接口類型組合

在可比較這事上,Go 的接口(interface)其實是支持比較的,也就是可以作為 map 的 key 進行 == 運算符的比較。

實現了如下的第一版方案,設計了新的netaddr.IP 類型:

type IP struct {
ipImpl
}

type ipImpl interface {
is4() bool
is6() bool
String() string
}

type v4Addr [4]byte
type v6Addr [16]byte
type v6AddrZone struct {
v6Addr
zone string
}

上述代碼,在 IP 結構體中增加了 ipImpl 接口,既能支持比較,還可以不對外暴露(不透明類型),且可以支持 IPv6。

新的問題在于,雖然比原生 net 小了,但還是沒達到目標,還是有在堆上分配的缺點。

免分配的 24 字節

如果繼續使用接口,是無法解決根本目標(Brad 的目標是 24 字節)的。

因為接口(interface)占用 16 字節,剩余 8 個字節可以用,要放如下東西:

  • 地址族(v4、v6,或兩者都不是,如:IP 的零值),至少需要 2 位。
  • IPv6 的 zone 信息。

還要能比較,顯然接口是無法實現的,因為地址+zone 信息算一下字節數,顯示是不夠用的。

正規顯式的沒辦法,Brad 想到了用打包的方式:

type IP struct {
addr [16]byte
zoneAndFamily uint64
}

但這么做,就意味著 zoneAndFamily 字段中需要計算位數,再對應的推入相應的值,但也未必太折騰了。

最終 Brad 想到了,可以使用指針的方式:

type IP struct {
addr [16]byte
zoneAndFamily *T
}

再定義 3 個對應哨位值的來應用:

var (
z0 *intern.Value // 表示零值。
z4 = new(intern.Value) // 表示 IPv4 的哨位值
z6noz = new(intern.Value) // 表示 IPv6 的哨位值(沒有 zone)。
)

這樣就可以把 IP 類型固定在 24 字節。

總結

這個網絡地址庫,一般都用的比較少。但是 Brad Fitzpatrick 在此投入了大量的精力和研究,達到了最終的目標。

除去庫的功能外,有許多技術優化點值得我們學習和參考,有興趣深入優化部分的,可以閱讀:https://tailscale.com/blog/netaddr-new-ip-type-for-go/[5]

本文介紹的新 net/netip 庫將會在 Go1.18 中作為新特性出現,歡迎大家一起學習交流:)

參考資料

[1]netaddr.IP: a new IP address type for Go: https://tailscale.com/blog/netaddr-new-ip-type-for-go/

[2]inetaf/netaddr: https://github.com/inetaf/netaddr

[3]inetaf/netaddr: https://github.com/inetaf/netaddr

[4]proposal: net/netaddr: add new IP address type, netaddr package): https://github.com/golang/go/discussions/47323

[5]https://tailscale.com/blog/netaddr-new-ip-type-for-go/: https://tailscale.com/blog/netaddr-new-ip-type-for-go/#wgcfg


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

2022-01-26 09:02:57

GoCut方法

2022-01-19 08:51:00

Module工作區Go

2021-12-02 18:21:49

GoIP 包設計

2022-02-14 09:32:49

Go場景TryLock

2021-12-27 18:27:18

GoTryLockJava

2022-02-16 08:59:43

Go方法Title

2022-01-26 00:02:01

Go二進制元信息

2021-12-28 07:20:44

泛型Go場景

2022-03-18 18:00:00

編程語言泛型支持模糊測試

2021-09-05 18:25:30

Go命令倉庫

2021-12-15 12:59:56

Go泛型版Beta1

2021-12-15 10:23:56

Go 1.18 Bet語言泛型

2024-01-22 00:30:00

Go編程Go 1.22

2025-04-29 08:59:37

2021-10-18 10:53:26

Go 代碼技術

2025-08-07 09:09:29

2017-12-11 16:32:07

JavaJDK 10語言

2021-09-01 07:21:46

堆棧Gopanic

2012-05-18 14:36:50

Fedora 17桌面環境

2024-09-11 09:30:58

IDEA工具編程
點贊
收藏

51CTO技術棧公眾號

99热99这里只有精品| 国产成人手机视频| 日本国产在线观看| 久久综合图片| 超在线视频97| 精品无码人妻一区| 国产精一区二区| 欧美日韩性视频在线| 正在播放国产精品| 熟妇高潮一区二区高潮| 久久99蜜桃精品| 欧美一级视频一区二区| 日韩欧美国产成人精品免费| 久久动漫网址| 欧美一区二区精品| 免费裸体美女网站| 成全电影大全在线观看| 欧美国产视频在线| 精品一区久久久| 精品国产无码AV| 麻豆成人在线观看| 日韩av手机在线看| 国产一卡二卡在线| 天堂美国久久| 亚洲一区www| 50一60岁老妇女毛片| 国产精一区二区| 欧美日韩日日骚| 成人在线看视频| 99re6在线精品视频免费播放| 中文字幕一区二区三区视频| 日本高清不卡三区| 天堂av中文字幕| 顶级嫩模精品视频在线看| 国产欧美一区二区三区视频| 黄瓜视频在线免费观看| 在线欧美三区| 欧美激情免费观看| 欧美日韩精品亚洲精品| 91精品啪在线观看国产18| 国产亚洲一级高清| 成人片黄网站色大片免费毛片| 粉嫩久久久久久久极品| 日韩视频免费观看高清完整版 | 石原莉奈在线亚洲三区| 午夜精品一区二区三区av| 玖玖爱免费视频| 欧美国产三级| 欧美黄色片在线观看| 欧美xxxx黑人xyx性爽| 亚洲午夜精品一区 二区 三区| 视频直播国产精品| 免费观看特级毛片| 91亚洲成人| 精品国产欧美成人夜夜嗨| av在线免费播放网址| 日韩在线观看| 久久精品91久久久久久再现| 男人晚上看的视频| 91精品国产福利在线观看麻豆| 久久精品精品电影网| 五月天激情丁香| 欧美成人有码| 性欧美暴力猛交69hd| 在线观看亚洲天堂| 日韩电影在线免费看| 国产欧美日韩中文| 99久久99久久久精品棕色圆| 国产精品1区2区3区在线观看| 91在线在线观看| 少妇无码一区二区三区| 久久影音资源网| 亚洲蜜桃av| a级毛片免费观看在线| 午夜精品爽啪视频| 88av.com| 日本99精品| 日韩av中文字幕在线免费观看| 免费看污黄网站在线观看| 久久五月天小说| 欧美激情按摩在线| 国产一级一级国产| 精品一区二区久久| 粉嫩av四季av绯色av第一区| 欧美高清成人| 亚洲人吸女人奶水| 欧美在线观看成人| 日韩美香港a一级毛片| 精品黑人一区二区三区久久| 久久丫精品国产亚洲av不卡| 久久亚洲成人| 69av在线视频| 国产精品久久久久久久久久久久久久久久 | 国产精品天天av精麻传媒| 日韩一级特黄| 日韩成人在线免费观看| www.黄色com| 99综合在线| 91精品视频一区| 色在线免费视频| 亚洲精品五月天| 蜜桃免费在线视频| 精品视频自拍| 另类美女黄大片| 欧美一区二区三区不卡视频| 国产在线精品视频| 日本一区二区在线视频观看| 欧美wwww| 欧美日本一区二区| 国产特黄级aaaaa片免| 欧美激情在线| 国产在线视频不卡| 国产精品视频二区三区| 亚洲成人一区二区在线观看| 女同激情久久av久久| 亚洲精华一区二区三区| 欧美精品激情blacked18| 中文字幕人妻互换av久久| av毛片久久久久**hd| 久久久成人精品一区二区三区| 黑人巨大精品| 亚洲国产精品久久久久秋霞蜜臀| 2025国产精品自拍| 男人的j进女人的j一区| 麻豆久久久9性大片| 成人爽a毛片免费啪啪动漫| 欧美一级欧美三级| 日本免费网站视频| 人禽交欧美网站| 欧美亚洲另类久久综合| 涩涩视频在线| 日韩精品视频在线播放| 日韩精品一区二区av| 国产成人小视频| 久久综合亚洲精品| 高清国产一区二区三区四区五区| 在线播放日韩av| 小泽玛利亚一区二区三区视频| 91女厕偷拍女厕偷拍高清| 又大又硬又爽免费视频| 亚洲精品18| 欧美精品在线免费播放| 国产美女免费视频| 成人免费一区二区三区在线观看| 亚洲综合av在线播放| 日韩亚洲一区在线| 国产美女久久精品| 麻豆视频在线| 欧美一区欧美二区| 欧美黄色aaa| 国产成人激情av| 无码av天堂一区二区三区| 国产精品sss在线观看av| 久久久久久久久久久免费| 国产 日韩 欧美 综合| 亚洲国产综合在线| 亚洲精品乱码久久久久久久| 免费看亚洲片| 亚洲精品不卡| 国产人与zoxxxx另类91| 欧美精品一区二区三区国产精品| av加勒比在线| 午夜伦理一区二区| 黄瓜视频污在线观看| 日韩国产在线观看一区| 尤物国产精品| 亚洲亚洲一区二区三区| 国语对白做受69| 免费在线超碰| 在线精品视频一区二区| 天天摸日日摸狠狠添| 久久99久久99| 国产精彩视频一区二区| 美女亚洲一区| 国产日韩在线看片| 国产美女情趣调教h一区二区| 亚洲黄色成人网| 老熟妇一区二区三区啪啪| 亚洲少妇最新在线视频| 欧洲成人午夜精品无码区久久| 国产色综合网| 中国人体摄影一区二区三区| 中文字幕一区二区三区四区久久 | 波霸ol色综合久久| 欧美 日韩 国产 成人 在线 91| 欧美视频精品一区| 亚洲AV成人无码精电影在线| 不卡一区在线观看| 国产视频1区2区3区| 亚洲国产导航| 伊人av成人| 欧美自拍视频| 91热福利电影| 日本美女一区| 欧美激情a∨在线视频播放| av播放在线| 亚洲国产中文字幕久久网| 一区精品在线观看| 欧美日韩免费看| 亚洲一级生活片| 久久久久高清精品| 在线观看欧美一区二区| 日精品一区二区| 男人添女人荫蒂免费视频| 欧美自拍偷拍| 久久精品久久精品国产大片| 电影一区中文字幕| 国产精品福利小视频| 97蜜桃久久| 九九热最新视频//这里只有精品| 国产在线三区| 日韩精品中文字幕有码专区| www.麻豆av| 欧美日本视频在线| 国产天堂第一区| 色综合久久久久久久| 国产精品999久久久| 专区另类欧美日韩| a天堂中文字幕| 91偷拍与自偷拍精品| 中文在线字幕观看| 国产一区二区三区综合| 亚洲国产精品三区| 免费亚洲网站| 无码粉嫩虎白一线天在线观看 | 国产男男gay网站| 欧美日韩视频第一区| 国产免费一区二区三区四区五区| 午夜精品福利一区二区三区蜜桃| 青青草手机在线观看| 亚洲欧美自拍偷拍色图| 少妇高潮惨叫久久久久| 国产欧美一区二区精品性| 在线免费观看麻豆| 91视频精品在这里| 韩国无码一区二区三区精品| 国产成人精品综合在线观看| 性生活一级大片| 国产老妇另类xxxxx| 99热这里只有精品2| 国产精选一区二区三区| 在线观看中文av| 国产精品91一区二区| 在线播放av网址| 成人福利在线看| 精品国产一区在线| 97久久精品人人做人人爽| 欧美双性人妖o0| 91玉足脚交白嫩脚丫在线播放| 又黄又爽的网站| 93久久精品日日躁夜夜躁欧美| 日本一区二区在线免费观看| 97精品久久久久中文字幕| 熟女丰满老熟女熟妇| 26uuu国产一区二区三区| 自拍偷拍亚洲天堂| 中文字幕av一区 二区| av资源在线免费观看| 亚洲欧美日韩国产一区二区三区| 美女的奶胸大爽爽大片| 亚洲一区二区三区在线| 人人干人人干人人干| 色婷婷精品大视频在线蜜桃视频| 超碰在线免费97| 在线综合亚洲欧美在线视频| 精品人妻一区二区三区蜜桃 | 亚洲久久一区| 国产av无码专区亚洲精品| 日韩av电影一区| av噜噜在线观看| proumb性欧美在线观看| 色综合99久久久无码国产精品| 亚洲欧美在线视频| 精品午夜福利视频| 91九色02白丝porn| 国产白浆在线观看| 亚洲精品中文字幕女同| 免费看a在线观看| 高清亚洲成在人网站天堂| 欧洲av不卡| 91精品在线一区| 欧美一区自拍| 中文字幕在线观看一区二区三区| 亚洲一级黄色| 波多结衣在线观看| 国产成人高清在线| 日本黄色小视频在线观看| 亚洲精品免费播放| av毛片在线免费观看| 欧美一区欧美二区| 国产天堂在线| 欧美国产日韩一区二区| 欧美暴力调教| 国产精品一区二区三区观看| 精品色999| 免费看毛片的网址| 激情五月婷婷综合网| 国产老熟女伦老熟妇露脸| 中文字幕一区二区三区视频| 国产精品黄色网| 欧美一区二区三区在线观看| 你懂的免费在线观看| 欧美大秀在线观看| 黄色精品视频网站| 久久99久久精品国产| 91成人精品| 无码内射中文字幕岛国片| 国产91精品一区二区麻豆亚洲| 一级片手机在线观看| 夜夜精品浪潮av一区二区三区| 国产亚洲欧美日韩高清| 亚洲国产精品电影在线观看| 免费在线观看黄| 国产成人免费av电影| 美女av一区| 欧美性受xxxx黑人猛交88| 秋霞影院一区二区| 久久国产精品无码一级毛片| 亚洲精选一二三| 91尤物国产福利在线观看| 亚洲人成绝费网站色www| 91老司机福利在线| 国产伦精品一区二区三区| 一区二区中文字| 亚洲娇小娇小娇小| 亚洲国产精品高清| 国产精品久久久久久久久夜色| 日韩av在线一区| 男女羞羞在线观看| 国产日韩一区二区| 亚洲大片在线| 国产性猛交96| 亚洲国产精品一区二区www在线 | 日韩精品在线免费观看| 91破解版在线观看| 国产精品二区三区四区| 国精品一区二区三区| 女女调教被c哭捆绑喷水百合| 亚洲女同一区二区| 国产成人精品毛片| 欧美理论片在线观看| 美女日韩一区| www.18av.com| 成人污污视频在线观看| 国产精品9191| 精品偷拍一区二区三区在线看 | 国产精品大片| 制服丝袜av在线| 午夜精品久久一牛影视| 刘亦菲久久免费一区二区| 97精品伊人久久久大香线蕉 | 国产网友自拍视频| 亚洲第一福利网站| 蜜桃视频www网站在线观看| 久久久久网址| 青青草成人在线观看| 欧日韩不卡视频| 日韩精品一区在线| 黄色漫画在线免费看| 麻豆视频成人| 精一区二区三区| 麻豆亚洲av成人无码久久精品| 欧美tk—视频vk| 最近在线中文字幕| 亚洲高清123| 国产精品影音先锋| 日韩av片在线播放| 亚洲午夜精品视频| 狂野欧美xxxx韩国少妇| 高清欧美精品xxxxx| 久久蜜桃一区二区| 国产又黄又大又爽| 亚洲97在线观看| 欧美日韩精品一区二区视频| 一区二区久久精品| 午夜不卡在线视频| av电影在线网| 春色成人在线视频| 日韩国产在线观看一区| 欧美黄色免费看| 精品性高朝久久久久久久| 九九久久国产| www.日本在线播放| 国产精品拍天天在线| 好男人在线视频www| 国产精品欧美风情| 在线观看视频免费一区二区三区| 91成人破解版| 日韩欧美国产小视频| 欧美韩国亚洲| 日韩精品手机在线观看| 久久久99精品免费观看| 国产夫绿帽单男3p精品视频| 国产精品91久久| 国模一区二区三区| 在线观看天堂av| 亚洲女人初尝黑人巨大| 91亚洲精品视频在线观看| 手机在线成人免费视频| 亚洲va国产天堂va久久en|