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

}

更多内容请关注每日编程,每天进步一点。