package util
|
|
import (
|
"bytes"
|
"errors"
|
"net"
|
"strconv"
|
"unsafe"
|
)
|
|
// 获取本机网卡IP
|
func GetLocalIP(networkName string) (ipv4 string, mask string, err error) {
|
interfaces, err := net.Interfaces()
|
if err != nil {
|
return "", "", err
|
}
|
|
for _, i := range interfaces {
|
byName, err := net.InterfaceByName(i.Name)
|
if err != nil {
|
return "", "", err
|
}
|
addresses, err := byName.Addrs()
|
for _, v := range addresses {
|
if ipnet, ok := v.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
if ipnet.IP.To4() != nil {
|
if byName.Name == networkName {
|
maskStr := ipnet.Mask.String()
|
mask64, _ := strconv.ParseUint(maskStr, 16, 32)
|
return ipnet.IP.String(), IpIntToString(int(mask64)), nil
|
}
|
}
|
}
|
}
|
}
|
return "", "", errors.New("ipv4 not found")
|
}
|
|
func IpIntToString(ipInt int) string {
|
ipSegs := make([]string, 4)
|
var len int = len(ipSegs)
|
buffer := bytes.NewBufferString("")
|
for i := 0; i < len; i++ {
|
tempInt := ipInt & 0xFF
|
ipSegs[len-i-1] = strconv.Itoa(tempInt)
|
|
ipInt = ipInt >> 8
|
}
|
for i := 0; i < len; i++ {
|
buffer.WriteString(ipSegs[i])
|
if i < len-1 {
|
buffer.WriteString(".")
|
}
|
}
|
return buffer.String()
|
}
|
|
// 判断一个数组是否包含另一个数组的所有元素
|
func ArrayContains(list []string, arr []string) bool {
|
c := 0
|
if arr == nil || list == nil {
|
return false
|
}
|
for _, s := range arr {
|
for _, t := range list {
|
if s == t {
|
c++
|
break
|
}
|
}
|
}
|
return c == len(arr)
|
}
|
|
func ByteSlice2float32Slice(src []byte) []float32 {
|
if len(src) == 0 {
|
return nil
|
}
|
|
l := len(src) / 4
|
ptr := unsafe.Pointer(&src[0])
|
|
return (*[1 << 26]float32)((*[1 << 26]float32)(ptr))[:l:l]
|
}
|