net包對於網絡I/O提供了便攜式接口,包括TCP/IP,UDP,域名解析以及Unix Socket,經常用來解析ip或者host。
常用的幾個函數介紹:
func InterfaceAddrs() ([]Addr, error) //InterfaceAddrs返回該系統的網絡接口的地址列表。
func JoinHostPort(host, port string) string //JoinHostPort將host和port合併為一個網絡地址。
func LookupAddr(addr string) (name []string, err error) //對於給定的地址進行反向查找,並返回映射到那個地址的一個list列表
func LookupHost(host string) (addrs []string, err error) //通過利用本地解析器對給定的host進行查找,返回主機地址的數組
func Dial(network, address string) (Conn, error) //Dial 連接到指定address和name的網絡
示例:
package main
import (
"fmt"
"net"
)
func main() {
addr, _ := net.InterfaceAddrs()
fmt.Println(addr) //[127.0.0.1/8 10.236.15.24/24 ::1/128 fe80::3617:ebff:febe:f123/64]
hp := net.JoinHostPort("127.0.0.1", "8080")
fmt.Println(hp) //127.0.0.1:8080,根據ip和端口組成一個addr字符串表示
lt, _ := net.LookupAddr("127.0.0.1")
fmt.Println(lt) //[localhost],根據地址查找到改地址的一個映射列表
host, _ := net.LookupHost("www.baidu.com")
fmt.Println(host) //[111.13.100.92 111.13.100.91],查找給定域名的host名稱
}
經典案例:
golang判斷是否本機ip:
func isLocalIP(ip string) (bool, error) {
addrs, err := net.InterfaceAddrs()
if err != nil {
return false, err
}
for i := range addrs {
intf, _, err := net.ParseCIDR(addrs[i].String()) //net.ParseCIDR 解析IP
if err != nil {
return false, err
}
if net.ParseIP(ip).Equal(intf) {
return true, nil
}
}
return false, nil
}
更多內容請關注每日編程,每天進步一點。
閱讀更多 每日編程 的文章