首页 > 其他分享 >golang net 包的功能概述

golang net 包的功能概述

时间:2024-06-15 22:55:21浏览次数:21  
标签:解析器 Dial err golang 概述 Go net conn

 

Go语言中的 net 包提供了一个可移植的网络输入输出接口,涵盖了 TCP/IP、UDP、域名解析以及 Unix 域套接字等功能。

该包提供了访问底层网络原语的能力,但大多数客户端仅需使用基本接口,这包括 Dial、Listen 和 Accept 函数以及相关的 Conn 和 Listener 接口。

crypto/tls 包也利用了相同的接口,并提供了类似的连接和监听函数。

 

Dial 函数用于连接服务器,例如通过指定网络类型(如 "tcp")和地址(如 "golang.org:80")建立连接。

Listen 函数用于创建服务器,同样需要指定网络类型和监听地址(如 ":8080")。

之后服务器通过 Accept 函数接受传入的连接。

// The Dial function connects to a server:

    conn, err := net.Dial("tcp", "golang.org:80")
    if err != nil {
        // handle error
    }
    fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
    status, err := bufio.NewReader(conn).ReadString('\n')
    // ...


// The Listen function creates servers:

    ln, err := net.Listen("tcp", ":8080")
    if err != nil {
        // handle error
    }
    for {
        conn, err := ln.Accept()
        if err != nil {
            // handle error
        }
        go handleConnection(conn)
    }

在域名解析方面,无论是间接通过 Dial 等函数还是直接通过 LookupHost、LookupAddr 等函数,其解析方式依据操作系统而异。

 

在类Unix系统中,解析器有两种解析域名的选项:

  一是使用纯 Go 解析器,直接向 /etc/resolv.conf 文件中列出的DNS服务器发送请求;

  二是使用基于 cgo 的解析器,调用C库例程如 getaddrinfo 和 getnameinfo。默认情况下,Go倾向于使用纯Go解析器以减少系统线程的消耗,但在特定条件下会自动切换到 cgo 解析器。

用户可以通过设置环境变量 GODEBUG 或编译标签来强制使用某一种解析器,并可以开启调试信息输出以了解解析器的决策过程。

在 macOS 上,当Go代码以 -buildmode=c-archive 模式构建并链接到C程序时,需要在链接C代码时添加 -lresolv 选项。

而在 Plan 9 系统上,解析器始终访问 /net/cs 和 /net/dns。

对于Windows系统,在 Go 1.18 及更早版本中,解析器始终使用C库函数如 GetAddrInfo 和 DnsQuery 来进行域名解析。

 

Link:https://www.cnblogs.com/farwish/p/18249124

标签:解析器,Dial,err,golang,概述,Go,net,conn
From: https://www.cnblogs.com/farwish/p/18249124

相关文章

  • kubernetes部署dashboard
    kubernetes部署dashboard1.简介Dashboard是基于网页的Kubernetes用户界面。你可以使用Dashboard将容器应用部署到Kubernetes集群中,也可以对容器应用排错,还能管理集群资源。你可以使用Dashboard获取运行在集群中的应用的概览信息,也可以创建或者修改Kubernetes资源......
  • openEuler22.03(LTS-SP3)安装kubernetesV1.29
    一、环境配置主机配置角色系统版本IPmaster012核4GmasteropenEuler22.03(LTS-SP3)192.168.0.111master022核4GmasteropenEuler22.03(LTS-SP3)192.168.0.112master032核4GmasteropenEuler22.03(LTS-SP3)192.168.0.113worker012核4GworkeropenEu......
  • 基于RandLA-Net深度学习模型的激光点云语义分割
    一、场景要素语义分割部分的文献阅读笔记        RandLA-Net是一种高效、轻量级的神经网络,其可直接逐点推理大规模点云的语义标签。RandLA-Net基于随机点采样获得了显著的计算和内存效率,并采用新的局部特征聚合模块有效地保留了几何细节,弥补了随机采样可能丢失关键特......
  • Golang 百题(实战快速掌握语法)_1
    整形转字符串类型实验介绍本实验将展示三种方法来实现整形类型转字符串类型。知识点strconvfmtItoa函数代码实例Go语言中strconv包的itoa函数输入一个int类型,返回转换后的字符串。下面是一个例子。packagemainimport("fmt""strconv")funcmai......
  • ASP.NET Core应用程序11:使用模型绑定
      模型绑定是使用从HTTP请求获得的数据值,创建操作方法和页面处理程序所需的对象的过程。本章描述模型绑定系统的工作方式;显示它如何绑定简单类型、复杂类型和集合;并演示如何控制流程,以指定请求的哪一部分提供应用程序所需的数据值。  本章介绍了模型绑定特性,展示了如何使......
  • 【C#入门超简单】基本的.NET框架概念
    一、基本的.NET框架概念.NET框架是一个由微软开发的软件开发平台,它提供了一个运行时环境(CLR-CommonLanguageRuntime)和一套丰富的类库(FCL-FrameworkClassLibrary)。CLR负责管理代码的执行,而FCL则提供了大量预先编写好的代码,供开发者使用。例子:想象一下.NET框架是一个大型......
  • Fundamentals of Networks and Security – 4CM507
    FundamentalsofNetworksandSecurity–4CM507ContentsModuleLeaderKeydatesanddetailsDescriptionoftheassessmentAssessmentContentBackground:Casestudy-LocalAreaNetworkDesign:CompliancewithRequirementIntroductionGeneralrequi......
  • ASP.NET Core之使用OpenTelemetry的日志管理
    一、前言当前软件架构演变由单体架构=>分布式架构(SOA)=>微服务架构(mircoservice)=>云原生架构(cloudnative),所以架构的演变导致对系统日志、监控、链路等统称为观测性方案提出巨大的挑战。在单体架构时代,借助丰富的日志库基本满足对日志管理,但是面对分布式、微服务的架构盛行,......
  • log4net 在winfrom中的使用
    1.安装两个nuget包 2.创建 log4net.config文件,选中文件鼠标右键,选择属性->复制到输出目录修改为始终复制<?xmlversion="1.0"encoding="utf-8"?><configuration><!--只保留创建日期是最近1天的--><log4netOverdueDays="1">&l......
  • 【第8章】如何利用ControlNet生成“可控画面”?(配置要求/一键安装/快速上手/生成第一张
    这节我们来讲AI绘画领域中一个很重要的概念:ControlNet,看下如何让生成的画面更可控。......