当前位置: 首页 > news >正文

# Go学习-Day10

Go学习-Day10

  • 个人博客:CSDN博客

反射

  • 编写函数适配器,序列化和反序列话可以用到

  • 反射可以在运行时,动态获取变量的各种信息,例如类型,结构体本身的信息,修改变量的值,调用关联的方法

  • 反射是不是和映射相反?是一种逆函数?

  • 变量到空接口相互转换,空接口和reflect.value相互转换

  • 动手一下

  • import ("fmt""reflect"
    )func test(a interface{}) {b := reflect.TypeOf(a)fmt.Println(b)
    }func main() {var a int = 10test(a)
    }
    
  • 打印 “int”

  • reflect.TypeOf()//从接口获取原类型
    reflect.ValueOf()//从接口获取reflect.Value类型.Int能取到具体的类型
    //如果需要原类型,需要类型断言
    reflect.Interface//把reflect.Value转换成空接口
    
  • Kind是大的种类,Type是小的类型

  • 常量在定义的时候必须初始化

  • reflect.Value.Kind返回的是常量

  • 如果传入指针类型的话(反射常常需要改变原来的值)指针类型需要.Elem方法取到值,再用.SetInt之类的方修改原来的值

  • Value//指reflect.Value
    Value.NumField()//获取字段数
    Value.Field()//根据下标,获取第几个字段,返回的也是relect.Value
    Tpye//指reflect.Type
    Tpye.Field().Tag.Get("key")//可以获取tag,键值是结构体里面设置的例如,"json:"的key就是json,序列化反序列化的键值固定取json,其实可以自定义
    Value.NumMethod()//获取方法数
    Value.Method().Call(...)//获取第几个方法,然后调用
    //这个顺序是按照函数名字典序排列的,Call传的是Value切片,返回的也是Value切片
    //输入的时候需要定义一个Value切片,用reflect.ValueOf(xx)插入这个切片
    Value.Elem().Field().SetXxx//修改字段
    ...FieldByName()//可以用字段名来找
    Value.New()//为指针申请空间,可以通过反射来创建类型
    

网络编程

  • Golang的主要设计目标之一就是面向大规模的后端服务程序,网络通信是服务端程序必不可少的一部分
  • 网络编程有两种 TCP(Transmission Control Protocol) socket编程和HTTP编程(建立在前者之上)
  • 做服务器尽量少开端口,一个端口只能被一个程序监听

监听端口小Demo

  • net包提供了可以指的I/O接口

  • package mainimport ("fmt""net"
    )func main() {fmt.Println("开始监听")//使用tcp协议,监听本机listen, err := net.Listen("tcp", "0.0.0.0:8888")if err != nil {fmt.Println("err=", err)}//延迟关闭defer listen.Close()//循环等待for {//等待客户端连接fmt.Println("等待连接...")//获取连接conn, err := listen.Accept()if err != nil {fmt.Println("err=", err)} else {fmt.Println("con=", conn)}//起一个协程为客户端服务}
    }
  • 用telnet呼叫一下 telnet 127.0.0.1 8888

  • 开始监听
    等待连接...
    con= &{{0xc00010ec80}}
    等待连接...
    //返回
    

客户端

  • conn, err := net.Dial("tcp", "ip...:端口")
    //获取连接
    //Dial是拨号的意思
    
  • 通过端口就能和对应的程序进行交流

  • func main() {conn, err := net.Dial("tcp", "127.0.0.1:8888")if err != nil {fmt.Println("err=", err)}fmt.Println("连接成功conn=", conn)
    }
    //注意此时要开着上面的监听程序
    //输出 连接成功conn= &{{0xc00010ca00}}

发送&&接收

server.go

package mainimport ("fmt""net"
)func process(conn net.Conn) {//连接过多不关闭的话就会导致其他连接无法成功defer conn.Close()for {buf := make([]byte, 512)//如果没有Write会停在这里,类似我们stdin输入的时候,光标会停在输入的位置//如果连接突然中断的话,这里会报错//TCP底层会定时发送消息,检查连接是否存在n, err := conn.Read(buf)if err != nil {fmt.Println("err=", err)return//有可能是关闭了}//字节切片要强制转换//buf后面的存的可能是乱七八糟的东西,注意取前n个!fmt.Print(string(buf[:n]))}
}func main() {fmt.Println("开始监听")//使用tcp协议,监听本机listen, err := net.Listen("tcp", "0.0.0.0:8888")if err != nil {fmt.Println("err=", err)}//延迟关闭defer listen.Close()//循环等待for {//等待客户端连接fmt.Println("等待连接...")//获取连接conn, err := listen.Accept()if err != nil {fmt.Println("err=", err)} else {fmt.Println("con=", conn)}//起一个协程为客户端服务go process(conn)}
}

client.go

package mainimport ("bufio""fmt""net""os"
)func main() {conn, err := net.Dial("tcp", "127.0.0.1:8888")if err != nil {fmt.Println("err=", err)}fmt.Println("连接成功conn=", conn)//创建标准stdin的readerreader := bufio.NewReader(os.Stdin)//读取一行str, err := reader.ReadString('\n')if err != nil {fmt.Println("err=", err)}n, err := conn.Write([]byte(str))if err != nil {fmt.Println("err=", err)}fmt.Println("发送了n个字节n=", n)
}
  • 一个小点,发送的字节数多2,应该是回车键的缘故,可能这里是当成\n\r

相关文章:

# Go学习-Day10

Go学习-Day10 个人博客:CSDN博客 反射 编写函数适配器,序列化和反序列话可以用到 反射可以在运行时,动态获取变量的各种信息,例如类型,结构体本身的信息,修改变量的值,调用关联的方法 反射是…...

vue3:5、组合式API-reactive和ref函数

<script setup> /* reactive接收一个对象类型的数据&#xff0c;返回一个响应式的对象 *//*** ref:接收简单类型或复杂类型&#xff0c;返回一个响应式对象* 本质&#xff1a;是在原有传入数据的基础上&#xff0c;外层报了一层对象&#xff0c;包成了复杂类型* 底层&…...

Unity Inspector面板上显示Api

serializeField】——将私有类型和保护类型可视化到面板上【System.serializeField】——将自定义类型可视化到面板上【HideIninspector】——将公共变量隐藏【Header&#xff08;“分组说明”&#xff09;】——将可视化变量进行分组【Tooltip&#xff08;“内容说明”&#x…...

Redis功能实战篇之附近商户

在互联网的app当中&#xff0c;特别是像美团&#xff0c;饿了么等app。经常会看到附件美食或者商家&#xff0c; 当我们点击美食之后&#xff0c;会出现一系列的商家&#xff0c;商家中可以按照多种排序方式&#xff0c;我们此时关注的是距离&#xff0c;这个地方就需要使用到我…...

selenium 自动化测试——元素定位

WebDriver 提供了8种元素的定位方法&#xff0c;分别是&#xff1a; id 定位&#xff1a;find_element(By.ID, "kw") name 定位: find_element(By.NAME, "") tag 定位: find_element(By.TAG, "") class 定位: find_element(By.CLASS_NAME, &quo…...

【JMeter】 二次开发插件开发 Dubbo 接口测试插件浅析

概述 在一些企业中&#xff0c;各类业务系统非常丰富&#xff0c;相互之间或对外提供很多的服务或接口这些服务或接口中&#xff0c;有很多是需要强契约约束的&#xff0c;服务的提供方、服务的使用方必须遵守相同契约这类服务最典型的就是RPC&#xff0c;其中应用广泛的有Dub…...

手机SSL证书认证失败是什么意思?

手机SSL证书认证失败是指在使用手机设备浏览网站时&#xff0c;由于SSL证书的认证问题&#xff0c;导致无法建立安全的加密连接。本文将详细介绍手机SSL证书认证失败的含义、可能的原因以及解决方法&#xff0c;帮助用户了解并解决该问题&#xff0c;以确保手机端浏览的数据传输…...

PXE网络批量装机(centos7)

目录 前言 一、实验拓扑图 二、PXE的组件 三、配置PXE装机服务器 1、设置防火墙、selinux 2.安装、启动vsftp 3、拷贝系统文件到/var/ftp用于装机 4、配置tftp 5、准备pxelinx.0文件、引导文件、内核文件 6、配置本机IP 7、配置DHCP服务 8、创建default文件 四、配…...

P1104 生日

题目描述 cjf 君想调查学校 OI 组每个同学的生日&#xff0c;并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多&#xff0c;没有时间&#xff0c;所以请你帮她排序。 输入格式 输入共有 n 1 n 1 n1 行&#xff0c; 第 1 1 1 行为 OI 组总人数 n n n&#xff1b; …...

计算机网络复习大纲

第一章 计算机网络概述 一&#xff0c;网络发展的形态 了解&#xff1a;当前网络的组成形态&#xff1a; 二&#xff0c;计算机网络的定义 掌握 网络的物理组成实体 网络的工作方式 网络组建的目的 三&#xff0c;通过网络定义 我们如何学习网络 物理实体如何构成&…...

Linux:进程(概念)

学习目标 1.认识冯诺依曼系统 2.认识操作系统概念与定位 (系统调用接口) 3.理解进程的概念&#xff08;PCB&#xff09; 4.理解进程的状态&#xff08;fork创建进程&#xff0c;僵尸进程及孤儿进程&#xff09; 5.了解进程的调度&#xff08;优先级&#xff0c;竞争性&#xff…...

智能机器人:打造自动化未来的关键技术

文章目录 1. 智能机器人的基本概念2. 智能机器人的关键技术2.1 机器视觉2.2 机器学习与深度学习2.3 传感器技术 3. 智能机器人的应用领域3.1 制造业3.2 医疗保健3.3 农业3.4 服务业 4. 智能机器人的未来趋势4.1 自主决策能力的提升4.2 协作与互操作性4.3 个性化定制4.4 环境感知…...

大数据(七):Pandas的基础应用详解(四)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…...

【1day】​万户协同办公平台 ezoffice未授权访问漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录...

适配器模式:如何让不兼容的接口变得兼容

在软件开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;我们需要使用一个现有的类或者接口&#xff0c;但它与我们系统的目标接口不兼容&#xff0c;而我们又不能修改它。这时候&#xff0c;我们该怎么办呢&#xff1f;大多数情况下我们都可以使用适配器模式来解决这个…...

sentinel熔断报java.lang.reflect.UndeclaredThrowableException

背景&#xff1a;内部要进行应用jdk&springboot升级&#xff0c;因此也需要将Spring Cloud Hystrix 替换成alibaba sentinel。 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</a…...

工业4G路由器的户外组网与无人值守场景应用

工业4G路由器是专为不便电缆布线的工业或日晒雨淋网络不畅的户外环境所设计的网络设备。它能够在没有光纤宽带的情况下使用插卡的方式提供4G或无线WiFi的网络支持。具备工业级防水功能&#xff0c;能够在户外环境下进行网络部署&#xff0c;并实现无人值守运行。工业4G路由器还…...

中移粤港澳大湾区创新研究院、南湖研究院类脑实验室面试(部分)

中移粤港澳大湾区创新研究院 reids热key的高并发量&#xff0c;导致此redis节点的cpu使用率爆满&#xff0c;有什么优化方案&#xff1f;高并发情况下为了保证平台正常运行&#xff0c;怎么设置平台的监控和告警 南湖研究院类脑实验室 笔试通过后&#xff0c;面试无后续...

API 自动化测试难点总结与分享

API自动化测试的难点包括&#xff1a; 接口的参数组合较多&#xff0c;需要覆盖各种可能的情况。接口的状态和数据关联较多&#xff0c;需要验证返回结果是否符合预期。接口的并发访问和性能测试较为复杂&#xff0c;需要合理规划和调度测试策略。接口的安全性和权限控制较为重…...

【每日一题】补档 ABC309F - Box in Box | 三维偏序 | 树状数组 | 中等

题目内容 原题链接 给定 n n n 个箱子&#xff0c;问是否存在一个箱子 x x x 是否可以放到另一个箱子 y y y 里。 需要满足 h x < h y , w x < w y , d x < d y h_x<h_y,w_x<w_y,d_x<d_y hx​<hy​,wx​<wy​,dx​<dy​。 箱子可以随意翻转。 …...

11. 架构:前端工程化与状态管理实战

写在前面: 如果说后端 MVT 引擎是 GIS 系统的“心脏”,那么前端就是它的“大脑”和“面孔”。在现代 WebGIS 开发中,如何优雅地管理复杂的图层状态、如何处理海量瓦片的渲染逻辑,是决定项目成败的关键。 今天,我们将深入 light-mvt-server 的前端核心,看看如何利用 Vite …...

Sequin实战教程:构建企业级变更数据捕获管道

Sequin实战教程&#xff1a;构建企业级变更数据捕获管道 【免费下载链接】sequin Postgres change data capture to streams, queues, and search indexes like Kafka, SQS, Elasticsearch, HTTP endpoints, and more 项目地址: https://gitcode.com/gh_mirrors/se/sequin …...

GitHub Desktop中文汉化解决方案:智能文本映射技术实现界面本地化

GitHub Desktop中文汉化解决方案&#xff1a;智能文本映射技术实现界面本地化 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese GitHub De…...

86、【Agent】【OpenCode】bash 工具提示词(完结)

【声明】本博客所有内容均为个人业余时间创作&#xff0c;所述技术案例均来自公开开源项目&#xff08;如Github&#xff0c;Apache基金会&#xff09;&#xff0c;不涉及任何企业机密或未公开技术&#xff0c;如有侵权请联系删除 背景 上篇 blog 【Agent】【OpenCode】bash 工…...

30天学会AI工程师|Day 13:Tool Calling 不是高级玩法,它是 Agent 开始有手脚的那一步

你先知道一件事 很多人第一次听到 Tool Calling&#xff0c;会觉得这是很后面的内容&#xff0c;好像得先学完模型、Prompt、框架&#xff0c;再轮到它。 为什么这一步重要 其实从工程视角看&#xff0c;它反而是一个很早就该理解的能力。 因为大模型只会“生成文本”这件事&am…...

别再用 STVP 了!用 IAR 3.11.1 调试 STM8S003 点灯程序,效率翻倍

告别STVP&#xff1a;用IAR 3.11.1高效调试STM8S003点灯程序全指南 在嵌入式开发领域&#xff0c;工具链的选择往往决定了开发效率的上限。对于STM8系列开发&#xff0c;许多工程师仍在使用STVP这种基础的烧录工具&#xff0c;却不知已经错过了IAR Embedded Workbench带来的效…...

为内容生成平台构建支持多模型备选的 AI 中台

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内容生成平台构建支持多模型备选的 AI 中台 在内容创作领域&#xff0c;无论是自媒体运营还是营销团队&#xff0c;对文本生成的…...

【紧急预警】ElevenLabs 2024 Q3瑞典文语音许可证变更:3类商业场景已触发合规风险,附欧盟GDPR语音数据处理自查清单

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ElevenLabs瑞典文语音许可证变更的合规背景与影响速览 2024年第三季度&#xff0c;ElevenLabs正式更新其语音合成服务的区域许可政策&#xff0c;将瑞典语&#xff08;sv-SE&#xff09;语音模型纳入欧盟《人…...

如何查阅与分析Taotoken平台提供的详细用量账单

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 如何查阅与分析Taotoken平台提供的详细用量账单 对于使用大模型API的开发者与团队而言&#xff0c;清晰、准确地掌握资源消耗与成本…...

Python量化投资利器:5步掌握pywencai获取同花顺问财数据

Python量化投资利器&#xff1a;5步掌握pywencai获取同花顺问财数据 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 在金融数据分析和量化投资领域&#xff0c;获取高质量、实时的A股市场数据一直是开发者和分析师…...