Go ??? net/netip
???? ?? ??? ??: Addr
type
????? ???! ??? net/netip
??? ???? Go ??? Addr
???? ???????. Go? ???? ??? ??? ??? ?? net.IP
??? ??? ?? ????. ????? ? ??? ???? ?? ???? ???? ???? ?? ??? ? ?? ??? ????. net/netip
???(Go 1.18? ???)? IP ??? ???? ?? ???? ???? ??? ?????.
???? ??net/netip.Addr
?
??? ???? ?? ??? ??? ???? ??? ???????. ???? net.IP
??? ????? ??? ??([]byte
)???. ??
- ??
- ? ?? ??
- ??? ??? ??? ? ??
- ??? ??
==
???? ??? ? ????
??? Addr
??? ??? ?? ??? ?????. ?? ? ??(?? ??)?? ??? ? ??? ?? ??? IP ??? ?????. ? ?? ???? ?????? ???? ????!
????Addr
??? ???? ?? ??? ???????. Addr
:
package main import ( "fmt" "net/netip" ) func main() { // 從字符串創(chuàng)建Addr addr, err := netip.ParseAddr("192.168.1.1") if err != nil { panic(err) } // 如果你絕對確定輸入 addr2 := netip.MustParseAddr("2001:db8::1") fmt.Printf("IPv4: %v\nIPv6: %v\n", addr, addr2) }
ParseAddr
? ?? ? ??? ?? ????? ????. ??? ???? ???? ?? ??? ???? ????. ?:
// 這些將會失敗 _, err1 := netip.ParseAddr("256.1.2.3") // 無效的IPv4八位字節(jié) _, err2 := netip.ParseAddr("2001:db8::1::2") // 無效的IPv6(雙冒號) _, err3 := netip.ParseAddr("192.168.1.1/24") // Addr不允許CIDR表示法
Addr
??
? ?? ?? ?????.
Addr
?? ??? ?? ??? ???????. ? ??? ??? ? ?? ?? ??? ???????.
??? IPv4???, IPv6????
func checkAddressType(addr netip.Addr) { if addr.Is4() { fmt.Println("這是IPv4") // 你可以在這里安全地使用As4() bytes := addr.As4() fmt.Printf("作為字節(jié):%v\n", bytes) } else if addr.Is6() { fmt.Println("這是IPv6") // 你可以在這里安全地使用As16() bytes := addr.As16() fmt.Printf("作為字節(jié):%v\n", bytes) } }
?? ?: IPv4 ?? IPv6 ??(?: ::ffff:192.0.2.1
)? ??? ? Is4In6()
? ???? ?? ?????. ?? ????? ???? ?? ??? ??? ? ?? ?????.
?? ?? ??
Addr
??? IP ??? ???? ?? ?? ??? ?????. ???? ?? ??? ????.
func classifyAddress(addr netip.Addr) { checks := []struct { name string fn func() bool }{ {"IsGlobalUnicast", addr.IsGlobalUnicast}, {"IsPrivate", addr.IsPrivate}, {"IsLoopback", addr.IsLoopback}, {"IsMulticast", addr.IsMulticast}, {"IsLinkLocalUnicast", addr.IsLinkLocalUnicast}, {"IsLinkLocalMulticast", addr.IsLinkLocalMulticast}, {"IsInterfaceLocalMulticast", addr.IsInterfaceLocalMulticast}, {"IsUnspecified", addr.IsUnspecified}, } for _, check := range checks { if check.fn() { fmt.Printf("地址是 %s\n", check.name) } } }
?? ?: ??? ?????? ??? ?? ?????? ????? ?? ???? ????? ??? ?????.
func getBindableAddresses(addrs []netip.Addr) []netip.Addr { var bindable []netip.Addr for _, addr := range addrs { if !addr.IsLoopback() && !addr.IsLinkLocalUnicast() { bindable = append(bindable, addr) } } return bindable }
??(IPv6 ?? ID) ??
IPv6? ???? ?? ???? ??? ???? ???. ?? ?? ?? ??? ?? ???? ??? ???? ?????? ?????.
func handleZones() { // 創(chuàng)建一個帶有區(qū)域的地址 addr := netip.MustParseAddr("fe80::1%eth0") // 獲取區(qū)域 zone := addr.Zone() fmt.Printf("區(qū)域:%s\n", zone) // 比較帶有區(qū)域的地址 addr1 := netip.MustParseAddr("fe80::1%eth0") addr2 := netip.MustParseAddr("fe80::1%eth1") // 由于區(qū)域不同,這些是不同的地址 fmt.Printf("相同的地址?%v\n", addr1 == addr2) // false // WithZone創(chuàng)建一個具有不同區(qū)域的新地址 addr3 := addr1.WithZone("eth2") fmt.Printf("新的區(qū)域:%s\n", addr3.Zone()) }
??? ??: IP ?? ??
? ?? ?? ?? ??? ??? ?????. ? ???? ??? ? ?? ??? IP ?????.
type IPFilter struct { allowed []netip.Addr denied []netip.Addr } func NewIPFilter(allowed, denied []string) (*IPFilter, error) { f := &IPFilter{} // 解析允許的地址 for _, a := range allowed { addr, err := netip.ParseAddr(a) if err != nil { return nil, fmt.Errorf("無效的允許地址 %s: %w", a, err) } f.allowed = append(f.allowed, addr) } // 解析拒絕的地址 for _, d := range denied { addr, err := netip.ParseAddr(d) if err != nil { return nil, fmt.Errorf("無效的拒絕地址 %s: %w", d, err) } f.denied = append(f.denied, addr) } return f, nil } func (f *IPFilter) IsAllowed(ip string) bool { addr, err := netip.ParseAddr(ip) if err != nil { return false } // 首先檢查拒絕列表 for _, denied := range f.denied { if addr == denied { return false } } // 如果沒有指定允許的地址,則允許所有未被拒絕的地址 if len(f.allowed) == 0 { return true } // 檢查允許列表 for _, allowed := range f.allowed { if addr == allowed { return true } } return false }
?? ?:
func main() { filter, err := NewIPFilter( []string{"192.168.1.100", "10.0.0.1"}, []string{"192.168.1.50"}, ) if err != nil { panic(err) } tests := []string{ "192.168.1.100", // 允許 "192.168.1.50", // 拒絕 "192.168.1.200", // 不在任何列表中 } for _, ip := range tests { fmt.Printf("%s 允許?%v\n", ip, filter.IsAllowed(ip)) } }
?? ??
net/netip.Addr
? ?? ? ?? ? ??? ?? ?????. ? ?????:
- ? ??? ?? ?? ??
- ???? ?? ??
- 0 ?? ???? ????(0 ?? ??? ? ??
net.IP
? ??)
???? ??? ??
-
net.IP
?netip.Addr
? ???? ???? ???. ? ??? ???? ?? ????? ???? ?? ?? ??? ????netip.Addr
? ????? ???. - ???? ?? ?? ?? ??? ? ?? ??? ??? ?? ??? ?????.
-
???? ?????
MustParseAddr
???? ??? ????? ????? ??? ??? ???? ???? ?????ParseAddr
? ?????. -
?? ?????? ?? ?????. ??? ???? ??? ??? ?? ???(?:
WithZone
)? ??? ? ??? ?????.
??? ??????
? ????? Addr
??? ?? ??? ?? ?? ???? ???? net/netip
????? ? ?? ??? ??? ? ????. ?? ????? IP ??? ?? ??? ???? AddrPort
? ???????. ?? ???? ?????? ?? ?????.
???? ??? ?????! ????? net/netip.Addr
? ????? ??? ?? ??? ???? ??? ???.
? ??? Gos net/netip Addr ?? ??: ?? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

Golang? ?? ??? ??? ????? ??? ?? ???? ??? ? ??? ? ?? ????. ?? ??? ???, ?? ?? ? ??? ?? ?????? ????? API ??, ???? ???, ?? ???, ?????? ?? ? CLI ??? ?? ??? ?? ????? ???? ? ?????. Golang? ? ??? ??? ?? ??? ???? Gopherjs? ?? JavaScript? ?????? Tinygo? ?? WebAssembly?? ????? ??? ?? ??? ???? ?? ??? ???? HTML ???? ?? ? ? ????. ??? ???? ??? ?? ??? ??? ??JavaScript/TypeScript ? ???? ???????. ??? Golang? ??? ???? ???? ?? ?? ??? ? ?????.

GO? ???? ?? ??? ??? ???? ?? ??? ???? ??? ???? ????. 1. ?? ???? ?? ???? ??????? ?? ? ???? ??????. Windows? .msi ??? ???? MacOS? .pkg ??? ???? Linux? .tar.gz ??? ???? /usr /local ????? ??? ????. 2. Linux/MacOS?? ?? ??, ?? ~/.bashrc ?? ~/.zshrc? ???? ??? Gopath? ???? Windows Set ??? ??? ???? ?????. 3. ?? ??? ???? ??? ???? ??? ???? Hello.Go? ???? ?? ? ??? ???? ??????. ???? ???? ?? ?? ? ??

GO?? GraphQlapi? ????? GQLGEN ?????? ???? ?? ???? ????? ?? ????. 1. ?? ???? ???? ?? ?? ??? ???? GQLGEN? ?? ??? ?????? ??????. 2. ?? ?? GraphQLSchema? ???? POST ?? ? ?? ??? ??? ?? API ?? ? ?? ??? ??????. 3. ?? ?? ????? ????? ?? ??? ???? Resolver?? ???? ??? ?????. 4. ????? ??? Qlhandler? httpserver? ???? ?? ???? ?? API? ???????. ?? ?? ?? ??, ?? ??, ?? ??? ? ?? ??? ???? ???? ?? ??? ?????.

sync.waitgroup? ?? ? ??? ??? ?? ? ??? ???? ? ?????. ??? ??? ? ?? ??? ?? ?? ??? ???? : ??, ?? ? ??. 1. Aadd (n) ?? ? ?? ? ?? ?????. 2. DONE ()? ? ? ??? ??? ???? ???? 1 ? ?? ???. 3. Wait ()? ?? ??? ?? ? ??? ?? ? ??? ?????. ?? ??? ?? ?? ?? : ADD? ?? ? ???? ????????. ?? ??? ??? DON? ????? ??????. ??? ?? ???? ?? ????. ? ???? ?? ???, ?? ??? ?? ? ?? ?????? ????? ??? ????? ????? ?? ? ? ????.

Go? Embed ???? ???? ? ???? ??? HTML, CSS, ?? ? ?? ??? ???? ? ??? ?? ???? ????? ?? ???? ? ????. 1. ?? ? ???? ????? ??????. 2. ??/*? ?? ?? ????? ??? ? ??? embed.fs? ?? ?? ?? ??? ??? ? ????. 3. ?? ?? ?? ?? ??? ?? ??? ?? ??? ???? ???? ????? ?? ????. 4. ???? ???? ?? ???, ?? ?? ?? ? ?? ?? ?????????. Embed? ???? ??? ??? ????? ???? ??? ??? ? ? ????.

??? ? ??? ??? ??? ?? ???? ? ??? ??? ???? ? ????. 1. ?? ?????? ??, ???, ??, ??? ? ??? ???? ? ???? ??? ? ???? ????. 2. ??? ? ??? ??, ?? ??, ??? ???, ??? ?? ?? ?? ???? ??? ?? ??, ?? ???, ??? ?? ??, ?? ?? ?? ?? ?? ??? ? ????. 3. FFMPEG, OPENCV, WEBRTC, GSTREAMER ? ?? ??? ???? ??? ???? ?? ????. 4. ?? ?? ???? ???? ??, ???? ??? ??? ?? ??, ?? ??? ? ??? ?? ?????? ???????. ??? ?? ???? ????? ?? ???? ??? ??? ????? ? ??????.

?? ?? ??? ? ??? ???? ?? ??? ????. ??? Net/HTTP ???? ???? ?? ???? ???? ? ????. 1. net/http? ???? ?? ??? ??? ??????. ?? ?? ??? ???? ? ?? ??? ?? ??? ????. 2. ??? ?? : Servemux? ???? ?? ??? ? ??? ?? ?? ????? ??? ?????. 3. ???? ?? : ?? ?? ? ?? ??? ? ?? ?????? ???? ??? ??? ?????. 4. ?? ?? ??? : http.fileserver? ?? HTML, CSS ? JS ??? ?????. 5. ?? ? ?? : HTTPS ???, ?? ??? ??? ???? ?? ? ??? ????? ?? ?? ??? ?????. ??? ?? ???? ????? ??? ???? ?? ? ?? ????.

Select Plus Default? ??? ?? ??? ???? ??? ?? ????? ??? ? Select? ?? ??? ????? ???? ????. 1. ???? ?? ???? ???? ?? ? ? ??? ?? ??? ?? ??? ?? ?????. 2. ??? ??. ?? ?? ?? ????? ???? ?????. ??? ?? ?? ???? ?? ?? ????. 3. ?? ??? ????, ??? ?? ??? ???? ?? ?? ????? ???? ???????. ?? ??? ?? ?? ??? ?? ???? ?? ? ? ??? ?? ? ??? ?? ????? ??? ???? ????.
