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
}
更多内容请关注每日编程,每天进步一点。