JavaEE鸿蒙应用开发HTML&JS+前端Python+大数据开发人工智能开发电商视觉设计软件测试新媒体+短视频直播运营产品经理集成电路应用开发(含嵌入式)Linux云计算+运维开发C/C++拍摄剪辑+短视频制作PMP项目管理认证电商运营Go语言与区块链大数据PHP工程师Android+物联网iOS.NET

【Go语言与区块链】读取本地文件到读出p.node涉及的函数

来源:黑马程序员

浏览37191人

2019.05.20

这里是读取本地文件的所调用的函数

func ParseNode(rawurl string) (*Node, error) {
    if m := incompleteNodeURL.FindStringSubmatch(rawurl); m != nil {
        id, err := HexID(m[1])
        if err != nil {
            return nil, fmt.Errorf("invalid node ID (%v)", err)
        }
        return NewNode(id, nil, 0, 0), nil
    }
    return parseComplete(rawurl)
}

func parseComplete(rawurl string) (*Node, error) {
    var (
        id NodeID
        ip net.IP
        tcpPort, udpPort uint64
    )
    u, err := url.Parse(rawurl)
    if err != nil {
        return nil, err
    }
    if u.Scheme != "enode" {
        return nil, errors.New("invalid URL scheme, want "enode"")
    }
    // Parse the Node ID from the user portion.
    if u.User == nil {
        return nil, errors.New("does not contain node ID")
    }
    if id, err = HexID(u.User.String()); err != nil {
        return nil, fmt.Errorf("invalid node ID (%v)", err)
    }
    // Parse the IP address.
    host, port, err := net.SplitHostPort(u.Host)
    if err != nil {
        return nil, fmt.Errorf("invalid host: %v", err)
    }
    if ip = net.ParseIP(host); ip == nil {
        return nil, errors.New("invalid IP address")
    }
    // Ensure the IP is 4 bytes long for IPv4 addresses.
    if ipv4 := ip.To4(); ipv4 != nil {
        ip = ipv4
    }
    // Parse the port numbers.
    if tcpPort, err = strconv.ParseUint(port, 10, 16); err != nil {
        return nil, errors.New("invalid port")
    }
    udpPort = tcpPort
    qv := u.Query()
    if qv.Get("discport") != "" {
        udpPort, err = strconv.ParseUint(qv.Get("discport"), 10, 16)
        if err != nil {
            return nil, errors.New("invalid discport in query")
        }
    }
    return NewNode(id, ip, uint16(udpPort), uint16(tcpPort)), nil
}

--------------------- 
作者:不折腾就闹心 
来源:CSDN 
原文:https://blog.csdn.net/DDFFR/article/details/79228539