go语言中文文档 学习笔记(未完)

news2025/1/16 6:57:28

这里写目录标题

  • 网络编程
    • 互联网协议介绍
    • socket编程
      • socket图解
      • TCP编程
        • 服务端
        • 客户端
      • UDP编程
      • TCP黏包
    • http编程
    • WebSocket编程

网络编程

互联网协议介绍

在这里插入图片描述

socket编程

socket图解

Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket后面,对用户来说只需要调用Socket规定的相关函数,让Socket去组织符合指定的协议数据然后进行通信。
在这里插入图片描述

  • Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求
  • 常用的Socket类型有两种:流式Socket和数据报式Socket,流式是一种面向连接的Socket,针对于面向连接的TCP服务应用,数据报式Socket是一种无连接的Socket,针对于无连接的UDP服务应用
  • TCP:比较靠谱,面向连接,比较慢
  • UDP:不是太靠谱,比较快

TCP编程

服务端

  1. 监听端口
  2. 接收客户端请求建立链接
  3. 创建goroutine处理链接。
// tcp/server/main.go
// TCP server端

// 处理函数
func process(conn net.Conn) {
	defer conn.Close() // 关闭连接
	for {
		reader := bufio.NewReader(conn)
		var buf [128]byte
		n, err := reader.Read(buf[:])
		if err != nil {
			fmt.Println("read from client failed, err:", err)
			break
		}
		recvStr := string(buf[:n])
		fmt.Println("收到client端发来的数据:", recvStr)
		conn.Write([]byte(recvStr)) // 发送数据
	}
}

func main() {
	listen, err := net.Listen("tcp", "127.0.0.1:20000")
	if err != nil {
        fmt.Println("listen failed, err:", err)
        return
    }
    for {
		conn, err := listen.Accept() // 建立连接
		if err != nil {
            fmt.Println("accept failed, err:", err)
            continue
        }
        go process(conn) // 启动一个goroutine处理连接
	}
}

客户端

  1. 建立与服务端的链接
  2. 进行数据收发
  3. 关闭链接
// tcp/client/main.go

// 客户端

func main() {
	conn, err := net.Dial("tcp", "127.0.0.1:20000")
	if err != nil {
		fmt.Println("Dial err :", err)
        return
	}

	defer conn.Close() // 关闭连接

	inputReader := bufio.newReader(os.Stdin)
	for {
		input, _ := inputReader.ReadString('\n') // 读取用户输入
		inputInfo := strings.Trim(input, '\r\n')
		if strings.ToUpper(inputInfo) == "Q" { // 如果输入q就退出
			return  
		}
		_, err = conn.Write([]byte(inputInfo)) // 发送数据
        if err != nil {
            return
        }

		buf := [512]byte{}
		n, err := conn.Read(buf[:])
		if err != nil {
			fmt.Println("recv failed, err:", err)
			return 
		}
		fmt.Println(string(buf[:n]))
	}


}

UDP编程

TCP黏包

http编程

WebSocket编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12.设计模式之门面模式

前言 门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。日志框架slf4J是门面模式最经典的应用场景。 本节,我们就门面模式,展开详细介绍…

1.setContentView流程分析

1. setContentView初步分析之继承自Activity 我们创建的MainActivity继承自Activity,在代码中使用setContentView(R.layout.activity_main),查看他在Activity中的源码如下: public void setContentView(LayoutRes int layoutResID) {//这里的getWindow方法获取到一个PhoneWind…

什么是好代码/坏代码?给普通人的图解示例

本文翻译自国外论坛 medium,原文地址:https://medium.com/todbotts.triangles/what-is-good-bad-code-an-illustrated-example-for-non-programmers-1222b600a0f0 我曾经在某个地方读到过一句话,基本上有以下内容: 在现代世界中&a…

算法(一)—— 回溯(3)

文章目录 1 78 子集2 90 子集II3 491 递增子序列 子集问题 1 78 子集 如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题是收集树的叶子节点,而子集问题是找树的所有节点! 因为需要找到所有的节点&#xff0…

JavaEE(系列一 )-- 计算机是如何进行工作的

目录 1. 操作系统 2. 进程/任务(Process/Task) 2.1 进程 2.2 进程管理 2.2.1 进程的结构体 2.2.2 进程调度 2.3 并行 和 并发 2.4 内存分配 -- 内存管理(Memory Manage) 2.5 进程间通信 3. 线程 1. 操作系统 操作系统是一组做计算机资源管理的软件的…

谷歌I/O大会重磅发布:Bard编码能力优化后仍不支持中文,开发者选择CodeGeeX更佳

谷歌I/O大会今天凌晨发布,打出系列AI组合拳。除了发布升级版语言模型PaLM2之外,Bard能力也要起飞。 凭借改进的数学、逻辑和推理技能,Bard 现在可以帮助生成、解释和调试 20 多种编程语言的代码,开发者们需要输入prompt&#xff0…

C#从入门到入坟(原创不易,转载请注明出处)

文章目录 C# 基础篇0 环境部署1 Hello world1.1 两种框架1.2 创建项目的过程1.3 项目组成结构1.3.1 解决方案和项目1.3.2 程序集信息1.3.3 引用1.3.4 配置文件1.3.5 程序入口类 1.4 解决方案1.5 Debug 和 Release1.6 CSharp虚拟机初始1.7 .Net Framework混合语言开发1.8 托管代…

上下文感知的体素对比学习用于标签高效的多器官分割

文章目录 Context-Aware Voxel-Wise Contrastive Learning for Label Efficient Multi-organ Segmentation摘要本文方法有监督损失Context-Aware Contrastive Learning Loss for Unlabeled Voxels 实验结果 Context-Aware Voxel-Wise Contrastive Learning for Label Efficient…

GSMA-eSIM-官网规范说明

GSMA | eSIM Consumer and IoT Specifications - eSIM GSMA | eSIM Consumer and IoT Specifications - eSIMhttps://www.gsma.com/esim/esim-specification/ 架构、测试、技术规范 3.0版本 测试套件 EID的定义和分配 GSMA EID Definition and Assignment 合规性规范 自我评…

第十四届蓝桥杯青少组模拟赛Python真题 (2023年2月12日),包含答案

第十四届蓝桥杯青少组模拟赛Python真题 (2023年2月12日) 一、选择题 第 1 题 单选题 关于Python3.10,下列选项描述正确的是 ( )。 答案:B 第 2 题 单选题 下列数据类型中,哪一个是不可变的?() 答案:B 第 3 题 单选题 以下关于函数参数描述正确的是 ()。 答案:D 第 …

【JAVAEE】文件操作——IO

目录 💋1. 冯诺伊曼体系 🐷2. 内存与外存的区别 ✨3. 文件 🎁3.1 认识文件 ✌3.2 文件的管理 🍳3.3 文件路径 🎃3.4 文件的保存 👑3.4.1 文本文件 📷3.4.2 二进制文件 🎀3.5 文件系…

Python基本数据类型之一——set(集合)

Python基本数据类型之一——set(集合) 一、python集合定义 集合(set)是一个无序不重复元素的序列。基本功能是进行成员关系测试和删除重复元素。 二、创建方式 在Python中,创建集合有两种方式: 一种是用一对大括号将多个用逗号分隔的数据括起来。 另一种…

Vue3-黑马(九)

目录: (1)vue3-antdv-删除选中 (2)vue3-进阶-antdv-增改 (3)vue3-进阶-antdv-增改2 (1)vue3-antdv-删除选中 我们在表格中在加一列,做一个复选框&#xff…

【一起啃书】《机器学习》第六章 支持向量机

文章目录 第六章 支持向量机6.1 间隔和支持向量6.2 对偶问题6.3 核函数6.4 软间隔与正则化6.5 支持向量回归6.6 核方法6.7 一些问题 第六章 支持向量机 6.1 间隔和支持向量 给定训练样本集 D { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , y i ∈ { − 1 , …

【YOLO系列】--YOLOv4超详细解读/总结

YOLOv4(YOLOv4: Optimal Speed and Accuracy of Object Detection)(原文+解读/总结+翻译) 系列文章: YOLOv1论文解读/总结_yolo论文原文_耿鬼喝椰汁的博客-CSDN博客 YOLOv2论文解读/总结_耿鬼…

[免疫学]抗原递呈详解

目录 🧫1. 抗原递呈是什么 🧫1.1 MHCⅠ类分子 🧫1.2 MHCⅡ类分子 🧫1.3 MHCⅠ类分子 分子介导的抗原递呈 🧫1.4 MHCⅡ类分子 分子介导的抗原递呈 🧫1.5 抗原递呈细胞 🧫1.5.1 激活的树突状…

初识Linux篇:第三篇

初识Linux篇:第三篇 初识Linux篇:第三篇1.Linux中常见的通配符1.1*号通配符1.2 ?通配符1.3[ ]通配符1.4{ }通配符 2.man指令3.cp指令4.mv指令5.alias指令6. echo指令7.cat指令8.more指令9.less指令10.head与tail指令11.在Linux中写代码 总结 …

DHCP中继负载均衡使用原理

DHCP常用四种报文 基于UDP67服务端, 68端口客户端 discover 广播 offer 单播 rquest 广播 ack 单播 DHCP 50%时间续租时request报文为单播报文 DHCP 87.5%时间请求重新绑定IP时request报文为广播报文 DHCP的另类配置方案: 负载均衡: ip re…

【Python_Pandas】reset_index() 函数解析

【Python_Pandas】reset_index函数解析 文章目录 【Python_Pandas】reset_index函数解析1. 介绍2. 示例2.1 参数drop2.2 参数inplace2.3 参数level2.4 参数col_level2.5 参数col_fill 参考 1. 介绍 pandas.DataFrame.reset_index reset_index(levelNone, dropFalse, inplaceF…

【AI大模型智慧办公】用《文心一言》1分钟写一篇博客简直yyds

文章目录 前言文心一言是什么文心一言可以做什么文心一言写博客申请体验写在最后 前言 当今社会,博客已成为了许多人分享观点、知识和经验的重要平台。用文心一言写博客是将自己的思考、想法和经验以文字的形式呈现出来,让更多人了解自己。通过写博客&a…