您可以实现如下功能:


func parseMask(ipaddr string) (mask string, err error) {

    removeExtra := regexp.MustCompile("^(.*[\\/])")

    asd := ipaddr[len(ipaddr)-3:]

    findSubnet := removeExtra.ReplaceAll([]byte(asd), []byte(""))

    subnet, err := strconv.ParseInt(string(findSubnet), 10, 64)

    if err != nil {

        return "", errors.New("Parse Mask: Error parsing mask")

    }

    var buff bytes.Buffer

    for i := 0; i < int(subnet); i++ {

        buff.WriteString("1")

    }

    for i := subnet; i < 32; i++ {

        buff.WriteString("0")

    }

    masker := buff.String()

    a, _ := strconv.ParseUint(masker[:8], 2, 64)

    b, _ := strconv.ParseUint(masker[8:16], 2, 64)

    c, _ := strconv.ParseUint(masker[16:24], 2, 64)

    d, _ := strconv.ParseUint(masker[24:32], 2, 64)

    resultMask := fmt.Sprintf("%v.%v.%v.%v", a, b, c, d)

    return resultMask, nil

}

然后调用它:


func main() {

    ifaces, _ := net.Interfaces()

    for _, iface := range ifaces {

        localip, _ := iface.Addrs()

        for _, ip := range localip {

            done, _ := parseMask(ip.String())

            log.Println(done) // 255.255.255.0

        }

    }

}