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

十一、快速入门go语言之接口和反射

文章目录

    • 接口
      • :one: 接口基础
      • :two: 接口类型断言和空接口
        • :star2: 空接口实现存储不同数据类型的切片/数组
        • :star2: 复制切片到空接口切片
        • :star2: 类型断言
    • 反射

📅 2024年5月9日

📦 使用版本为1.21.5

接口

十、Java类的封装和继承、多态 - 七点半的菜市场 (tanc.fun) Java的接口

ps: 我感觉Go的接口和类方法两个就很模糊

1️⃣ 接口基础

⭐️ 接口就是一些未实现功能的集合(我是这样理解的),为了实现多态(就是多状态)

type PersonIF interface {Status() //人类的状态Skills() string //会的技能
}

⭐️ 在Go语言中接口可以有值,它的值默认是nil,接口本质上是一个指针,一个类型如果实现了接口中的所有方法,那么这个类实现的方法就会使用指针自动指向接口的方法

⚠️ 注意是所有抽象方法,如果有一个没实现都会报错

⭐️ 类型不需要使用什么关键字来表面实现了这个接口,多个类型可以同时实现一个接口,一个类型也可以实现多个接口

type PersonIF interface {Status()Skills()
}type WorkIF interface {Class()Income()
}type Person struct { //人的基本Name stringage  intsex  string
}/*Person实现PersonIF接口
*/
func (this *Person) Status() {println("Status")
}func (this *Person) Skills() {println("Skills")
}/*Person实现WorkIF接口*/
func (this *Person) Class() {println("Class")
}	
func (this *Person) Income() {println("Income")
}

⭐️ 调用则和Java差不多,这里可以直接使用Interfer来创建一个变量调用,然后就可以调用实现interfer内的方法

type PersonIF interface {Status()Skills()
}type WorkIF interface {Class()Income()
}type Person struct { //人的基本Name stringage  intsex  string
}/*
Person实现PersonIF接口
*/
func (this *Person) Status() {println("Status")
}func (this *Person) Skills() {println("Skills")
}/*
Person实现WorkIF接口
*/
func (this *Person) Class() {println("Class")
}
func (this *Person) Income() {println("Income")
}//Person类自己的方法
func (this *Person) GetTest() {println("GetTest")
}func main() {p1 := Person{"张三", 18, "男"} //创建一个对象pIn := PersonIF(&p1) //实现接口pIn.Status() //调用接口的方法,接口无法调用类自己的方法,也就是无法调用GetTestpIn.Skills()p1.GetTest()fmt.Println(pIn)  //接口变量包含了接受实列的值和指向对应方法表的指针,这里输出的是实列的值
}

⭐️ 接口也可以内嵌接口

type PersonIF interface {Status()Skills()WorkIF
}type WorkIF interface {Class()Income()
}
func main() {p1 := Person{"张三", 18, "男"} //创建一个对象pIn := PersonIF(&p1)        //实现接口pIn.Class()			//可以调用嵌套接口中的实现fmt.Println(pIn)
}

2️⃣ 接口类型断言和空接口

⭐️ Go语言有个万能的类型通配符,是一个空接口interfer{},因为在Go中任何接口类型都实现了空接口,类似于Java中的Object

⭐️ 每个空接口变量在内存中占据两个字长,一个是用来存储包含的类型,一个是存储数据或者指向数据的指针

func main() {Test(1)Test("abc")Test(1.111)
}func Test(i interface{}) { //空类型fmt.Println(i)
}//输出:
1
abc  
1.111
🌟 空接口实现存储不同数据类型的切片/数组

⭐️ 直接使用type给空接口一个别名类型,然后创建这个接口别名类型的切片/数组(真的太聪明了这个办法)

package mainimport "fmt"type Empty interface{}type Vector struct {e []Empty
}func (this *Vector) NewInit() { //初始化切片this.e = make([]Empty, 5)
}func (this *Vector) Set(i int, a interface{}) { //将元素插入指定索引this.e[i] = a
}
func (this *Vector) Get(i int) { //获取指定索引元素并输出fmt.Println(this.e[i])
}func main() {var v Vectorv.NewInit() //初始化v.Set(0, 22) //整数v.Set(1, "222") //stringv.Set(2, 13.14) //float32v.Get(0)v.Get(1)v.Get(2)
}//输出:
22
222
13.14
🌟 复制切片到空接口切片

⭐️ 如果你需要将切片复制到一个空接口切片中需要通过for-range,不能直接传递

func main() {dataSlice := make([]int, 0)dataSlice = append(dataSlice, 1, 2, 3, 4, 5, 6)emptySlice := make([]interface{}, 10)for i, j := range dataSlice {emptySlice[i] = j}fmt.Println(emptySlice)
}

⭐️ 一个接口的值是可以赋值给另外一个接口变量,只要底层类型实现了必要的方法

🌟 类型断言

⭐️ 如果变量是一个接口变量,则直接可以使用断言机制,直接就是接口变量.(类型)即可,注意一定要是接口变量

func main() {Test(1)Test("abc")
}func Test(i interface{}) { //空类型if value, ok := i.(string); ok {fmt.Printf("值: %v 是string\n", value)} else {fmt.Printf("值: %v 不是string\n", i)}
}

⭐️ 还有一种是type-switch

func main() {Test(1)Test("abc")
}func Test(i interface{}) { //空类型switch v := i.(type) {case string:fmt.Printf("值 %v 是string\n", v)case int:fmt.Printf("值 %v 是int\n", v)case float32:fmt.Printf("值 %v 是float32\n", v)default:fmt.Printf("我不想学习\n")}
}

反射

Go 语言反射的实现原理 | Go 语言设计与实现 (draveness.me) 可以好好看看

⭐️ Go语言的反射机制也是通过空接口来实现的,在reflect包中

⭐️ 反射提供了两个简单的函数实现一个是TypeOf(获取类型信息),一个是ValueOf(获取数据的运行时表示)

它们两个对应了两个不同的接口分别是TypeValue

golang-reflection

⭐️ TypeOf返回的是一个Type接口对象,所以说它可以使用Type方法

它接受一个any类型的值

type any = interface{} //空接口
// TypeOf函数返回给定参数i的类型。
// 
// 参数:
// i - 任意类型的值。
// 
// 返回值:
// Type - 表示参数i类型的类型值。
func TypeOf(i any) Type {// 将i转换为emptyInterface类型,以获取其动态类型信息。eface := *(*emptyInterface)(unsafe.Pointer(&i))// 使用noescape函数确保i的指针不会逃逸,这样做是为了避免i的生命周期被延长。// 这是基于Value.typ字段的注释中提到的安全理由。return toType((*abi.Type)(noescape(unsafe.Pointer(eface.typ))))
}

⭐️ 在Type接口中内定义了很多方法

type Type interface {// 基本属性Align() int           // 返回类型值对齐所需的字节数。FieldAlign() int      // 返回类型作为结构体字段时的对齐要求。// 方法相关Method(int) Method    // 获取方法集合中的第i个方法。NumMethod() int       // 返回方法总数。MethodByName(string) (Method, bool) // 通过名称查找方法。// 类型基本信息Name() string        // 返回类型名。PkgPath() string     // 返回类型所在的包路径。Size() uintptr       // 返回类型的大小。String() string      // 返回类型表示的字符串。Kind() Kind          // 返回类型的基本类别。// 类型兼容性Implements(Type) bool    // 检查是否实现某个接口。AssignableTo(Type) bool // 检查值是否可直接赋值给另一类型。ConvertibleTo(Type) bool // 检查值是否可通过类型转换匹配另一类型。Comparable() bool       // 指示类型值是否可比较。// 特定类型特有操作Elem() Type             // 对数组/切片/指针/映射/通道,返回元素类型。ChanDir() ChanDir        // 对通道类型,返回通信方向。IsVariadic() bool       // 对函数类型,检查是否可变参数。Key() Type              // 对映射类型,返回键的类型。Len() int               // 对数组类型,返回其长度。// 结构体操作Field(int) StructField  // 获取结构体的第i个字段信息。NumField() int         // 返回结构体字段数量。FieldByIndex([]int) StructField // 通过嵌套索引获取字段信息。FieldByName(string) (StructField, bool) // 通过字段名获取字段信息。FieldByNameFunc(func(string) bool) (StructField, bool) // 通过匹配函数查找字段。// 函数类型操作In(int) Type           // 获取函数的第i个输入参数类型。NumIn() int            // 返回函数输入参数数量。Out(int) Type          // 获取函数的第i个输出参数类型。NumOut() int           // 返回函数输出参数数量。// 内部方法,用户通常无需直接调用common(), uncommon() *internal // 返回底层实现相关的数据结构。
}

⭐️ ValueOf 放回一个Value对象,接受的也是一个任意类型的值

// ValueOf 是一个将任意类型转换为 Value 类型的函数。
// 参数 i 为任意类型的值,表示需要转换的值。
// 返回值为 Value 类型,表示转换后的值。
// 如果输入值 i 为 nil,则返回一个空的 Value。
func ValueOf(i any) Value {// 检查输入值是否为 nil,如果是则返回空的 Valueif i == nil {return Value{}}// 如果满足特定条件(go121noForceValueEscape 为 false),则标记 i 为逃逸变量if !go121noForceValueEscape {escapes(i)}// 将输入值 i 解包为 Value 类型并返回return unpackEface(i)
}

⭐️ 在Value中也定义了一些方法,反射包中 reflect.Value 的类型与 reflect.Type 不同,它被声明成了结构体。这个结构体没有对外暴露的字段,但是提供了获取或者写入数据的方法

type Value struct {// 内部结构未公开,实际包含值和类型等信息
}// 实例化Value的方法通常通过reflect.ValueOf或reflect零值的间接操作获得// Kind 返回此Value所持有的值的类型种类。
func (v Value) Kind() Kind// Type 返回此Value所持有的值的具体类型信息。
func (v Value) Type() Type// Bool 获取bool类型的值,如果Value不是bool类型则会panic。
func (v Value) Bool() bool// Int 获取整数值,类型必须是整数类型,否则会panic。
func (v Value) Int() int64// Float 获取浮点数值,类型必须是浮点数类型,否则会panic。
func (v Value) Float() float64// String 获取字符串值,类型必须是string,否则会panic。
func (v Value) String() string// Interface 转换Value为interface{}类型,几乎所有类型都可以通过此方法获取。
func (v Value) Interface() interface{}// Set 设置Value的值,新值必须是可设置的并且类型匹配。
func (v Value) Set(x Value) // SetBool 设置bool类型的值,Value必须是可设置的bool类型。
func (v Value) SetBool(x bool)// SetInt 设置整数值,Value必须是可设置的整数类型。
func (v Value) SetInt(x int64)// SetFloat 设置浮点数值,Value必须是可设置的浮点数类型。
func (v Value) SetFloat(x float64)// SetString 设置字符串值,Value必须是可设置的string类型。
func (v Value) SetString(x string)// Call 对于函数或方法Value,执行调用并返回结果。
func (v Value) Call(in []Value) []Value// Elem 如果Value是一个指针,返回它指向的值的Value;否则返回自身。
func (v Value) Elem() Value// Field 获取结构体Value的第i个字段的Value。
func (v Value) Field(i int) Value// FieldByName 获取结构体Value的名为name的字段的Value。
func (v Value) FieldByName(name string) Value// Index 对于数组、slice或map的Value,返回索引i处的元素Value。
func (v Value) Index(i int) Value// MapIndex 对于map的Value,返回key对应的元素Value。
func (v Value) MapIndex(key Value) Value// CanSet 返回此Value是否可被设置,即是否可以更改其底层值。
func (v Value) CanSet() bool// IsZero 判断Value的底层值是否为零值。
func (v Value) IsZero() bool

⭐️ Type方法实列

type Person struct {Name stringAge  intSex  string
}func (this *Person) toString() string {return fmt.Sprintf("Nmae: %v,Age: %v,Sex: %v", this.Name, this.Age, this.Sex)
}func main() {p1 := Person{"张三", 18, "男"}p1_demo := reflect.TypeOf(p1)             //获取类型信息fmt.Println(p1_demo.Name())               //输出类名fmt.Println(p1_demo.Size())               //输出类型大小for i := 0; i < p1_demo.NumField(); i++ { //放回结构体字段的个数,然后输出遍历field := p1_demo.Field(i) //获取字段fmt.Println(field.Name, field.Type, field.Offset)}for i := 0; i < p1_demo.NumMethod(); i++ { //放回结构体方法的个数,然后输出遍历method := p1_demo.Method(i) //获取方法fmt.Println(method.Name, method.Type)}//数组p2 := [1]Person{Person{"张三", 18, "男"}}p2_demo := reflect.TypeOf(p2)fmt.Println(p2_demo.Len()) //输出数组长度}

⭐️ Value方法实现,可以使用ValueOf方法来修改值

package mainimport ("fmt""reflect"
)type Person struct {Name stringAge  intSex  string
}func main() {// 使用指针来确保可以通过反射修改值p1 := Person{"张三", 18, "男"}fmt.Println(p1)// 获取p1的反射值p1_demo := reflect.ValueOf(&p1)// 由于p1是指针,我们先获取其指向的值的反射值p1_val := p1_demo.Elem()// 检查是否可以设置值if p1_val.CanSet() {// 创建一个新的Person值并通过反射设置newPerson := Person{"李四", 20, "女"}p1_val.Set(reflect.ValueOf(newPerson))} else {fmt.Println("无法设置值")}// 打印修改后的值fmt.Printf("%#v\n", p1)     // 使用%#v格式化输出结构体细节fmt.Println(p1_demo.Kind()) // 输出类型信息
}

欢迎关注我,继续探讨技术,如果觉得写的不错动动小手点个小赞,如果觉得我还有哪些不足可以私信哦

相关文章:

十一、快速入门go语言之接口和反射

文章目录 接口:one: 接口基础:two: 接口类型断言和空接口:star2: 空接口实现存储不同数据类型的切片/数组:star2: 复制切片到空接口切片:star2: 类型断言 反射 &#x1f4c5; 2024年5月9日 &#x1f4e6; 使用版本为1.21.5 接口 十、Java类的封装和继承、多态 - 七点半的菜市…...

智能化图书馆导航系统方案之系统架构与核心功能设计

hello~这里是维小帮&#xff0c;点击文章最下方获取图书馆导航系统解决方案&#xff01;如有项目需求和技术交流欢迎大家私聊我们~撒花&#xff01; 针对传统图书馆在图书查找困难、座位紧张、空间导航不便方面的问题&#xff0c;本文深入剖析了基于高精度定位、3D建模、图书搜…...

学习嵩山版《Java 开发手册》:编程规约 - 命名风格(P13 ~ P14)

概述 《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结&#xff0c;他旨在提升开发效率和代码质量 《Java 开发手册》是一本极具价值的 Java 开发规范指南&#xff0c;对于提升开发者的综合素质和代码质量具有重要意义 学习《Java 开发手册》是一个提升 Jav…...

Qt关于padding设置不起作用的的解决办法

观察以下的代码&#xff1a; MyWidget::MyWidget(QWidget *parent): QWidget{parent},m_btn(new QToolButton(this)) {this->setFixedSize(500,500);m_btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);m_btn->setIcon(QIcon("F:tabIcon/person-white.s…...

Golang教程第10篇(语言循环语句-语言循环嵌套)

Go 语言循环嵌套 Go 语言循环语句Go 语言循环语句 Go 语言允许用户在循环内使用循环。接下来我们将为大家介绍嵌套循环的使用。 语法 以下为 Go 语言嵌套循环的格式&#xff1a; for [condition | ( init; condition; increment ) | Range] {for [condition | ( init; con…...

Python Web 开发:FastAPI 入门实战 —— HTTP 基础与 RESTful API 设计

Python Web 开发&#xff1a;FastAPI 入门实战 —— HTTP 基础与 RESTful API 设计 目录 &#x1f680; HTTP 协议概述&#x1f310; HTTP 请求与响应的工作原理&#x1f6e0;️ RESTful API 设计理念&#x1f5c2;️ JSON 格式数据的传输与解析 1. &#x1f680; HTTP 协议概…...

uniapp实现组件竖版菜单

社区图片页面 scroll-view scroll-view | uni-app官网 (dcloud.net.cn) 可滚动视图区域。用于区域滚动。 需注意在webview渲染的页面中&#xff0c;区域滚动的性能不及页面滚动。 <template><view class"pics"><scroll-view class"left"…...

osg、osgearth源码编译(二)

如果比较懒&#xff0c;也可以不看这篇文章&#xff0c;网上应该有很多编译好的库。也可以找我要。 本人还是建议学会编译&#xff0c;因为其他人电脑上编译好的&#xff0c;可能在你的电脑环境上&#xff0c;出现这样那样奇怪的问题&#xff0c;所以&#xff0c;最好还是自己能…...

从单一设备到万物互联:鸿蒙生态崛起的未来之路

目录 一、引言&#xff1a;开启智能时代的钥匙 二、鸿蒙生态概述&#xff1a;跨设备协同的核心价值 三、开发者机遇与挑战&#xff1a;抓住鸿蒙崛起的机会 四、鸿蒙生态崛起的前景&#xff1a;万物互联的未来 五、开发者在鸿蒙生态中的实践机遇与挑战 1. 跨设备开发的机遇…...

Kotlin的object修饰符定义类似Java的静态类/静态方法

Kotlin的object修饰符定义类似Java的静态类/静态方法 //类似Java的static类 object StaticCls {//类似Java静态变量private var num 0//类似Java的静态方法fun updateVal(n: Int) {num n}fun getVal(): Int {return num} }class MyTest() {fun setVal() {StaticCls.updateVal…...

html 中的 <code>标签

定义和用途 <code> 标签是HTML中的一个内联元素&#xff0c;用于定义计算机代码片段。当你需要在网页内容中展示代码&#xff0c;比如编程语言代码&#xff08;如JavaScript、Python、Java等&#xff09;、命令行指令、标记语言代码&#xff08;如HTML、XML等&#xff09…...

【Oracle11g SQL详解】GROUP BY 和 HAVING 子句:分组与过滤

GROUP BY 和 HAVING 子句&#xff1a;分组与过滤 在 Oracle 11g 中&#xff0c;GROUP BY 子句用于根据一个或多个列对查询结果进行分组&#xff0c;而 HAVING 子句用于对分组后的结果进行过滤。这两者常结合聚合函数使用&#xff0c;用以实现复杂的数据统计和分析。本文将系统…...

SSE基础配置与使用

什么是 Server-Sent Events (SSE) **Server-Sent Events (SSE) **是一种轻量的服务器向客户端推送消息的机制&#xff0c;基于 HTTP 协议实现单向通信&#xff0c;适用于需要实时更新的场景。 与 WebSocket 不同&#xff0c;SSE 只允许服务器向客户端发送数据&#xff0c;因此…...

Android -- 简易音乐播放器

Android – 简易音乐播放器 播放器功能&#xff1a;* 1. 播放模式&#xff1a;单曲、列表循环、列表随机&#xff1b;* 2. 后台播放&#xff08;单例模式&#xff09;&#xff1b;* 3. 多位置同步状态回调&#xff1b;处理模块&#xff1a;* 1. 提取文件信息&#xff1a;音频文…...

【开源免费】基于Vue和SpringBoot的技术交流分享平台(附论文)

博主说明&#xff1a;本文项目编号 T 053 &#xff0c;文末自助获取源码 \color{red}{T053&#xff0c;文末自助获取源码} T053&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

Python异步编程新写法:asyncio模块的最新实践

Python异步编程新写法&#xff1a;asyncio模块的最新实践 引言1. 异步编程基础2. 旧写法的问题3. 最新的写法4. 代码解析5. 最佳实践6. 总结7. 参考资料 引言 在现代编程中&#xff0c;异步编程已经成为提高程序性能和响应能力的重要手段。Python的asyncio模块为开发者提供了一…...

【Docker】Docker配置远程访问

配置Docker的远程访问&#xff0c;你需要按照以下步骤进行操作&#xff1a; 1. 在Docker宿主机上配置Docker守护进程监听TCP端口 Docker守护进程默认只监听UNIX套接字&#xff0c;要实现远程访问&#xff0c;需要修改配置以监听TCP端口。 ‌方法一&#xff1a;修改Docker服务…...

网络安全入门之网络安全工具分享-含初期所有工具(附百度网盘链接)

网络安全基础工具 抓包工具 burpsuite 这是一款十分经典的抓包改包工具&#xff0c;在全球范围内使用十分广泛&#xff0c;并且其内置各种插件&#xff0c;具有爆破&#xff0c;自动识别验证码&#xff0c;加解密发包等多种功能 专业版破解网盘链接&#xff1a; 通过百度网…...

玩转 uni-app 静态资源 static 目录的条件编译

一. 前言 老生常谈&#xff0c;了解 uni-app 的开发都知道&#xff0c;uni-app 可以同时支持编译到多个平台&#xff0c;如小程序、H5、移动端 App 等。它的多端编译能力是 uni-app 的一大特点&#xff0c;让开发者可以使用同一套代码基于 Vue.js 的语法编写程序&#xff0c;然…...

Docker 容器隔离关键技术:Seccomp

Docker 容器隔离关键技术&#xff1a;Seccomp 在 Docker 容器中&#xff0c;Seccomp&#xff08;Secure Computing Mode&#xff09; 是一种内核安全机制&#xff0c;用来限制容器内的程序可以调用哪些系统调用&#xff08;Syscalls&#xff09;。通过列清单的方式&#xff0c…...

【大模型】深度解析 NLP 模型5大评估指标及 应用案例:从 BLEU、ROUGE、PPL 到METEOR、BERTScore

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;无论是机器翻译、文本生成&#xff0c;还是问答系统开发&#xff0c;模型性能评估指标始终是开发者绕不开的工具。BLEU、ROUGE、PPL&#xff08;困惑度&#xff09;、METEOR 和 BERTScore 是五个最具代表性的指标&am…...

LinuxC高级

gdb调试工具 gdb调试的作用 gdb用于调试代码中逻辑错误&#xff0c;而非语法错误 gdb调试流程 生成可以使用gdb调试的执行文件 gcc -g xxx.c ---> 生成的文件可以使用gdb调试 进入gdb工具 gdb 可执行文件 ---> 使用gdb工具开始调试可执行文件 r/run&#xff1a;运行代码 …...

实现PDF文档加密,访问需要密码

01. 背景 今天下午老板神秘兮兮的来问我&#xff0c;能不能做个文档加密功能&#xff0c;就是那种用户下载打开需要密码才能打开的那种效果。boss都发话了&#xff0c;那必须可以。 需求&#xff1a;将pdf文档经过加密处理&#xff0c;客户下载pdf文档&#xff0c;打开文档需要…...

LangChain——加载知识库文本文档 PDF文档

文档加载 这涵盖了如何加载目录中的所有文档。 在底层&#xff0c;默认情况下使用 UnstructedLoader。需要安装依赖 pip install unstructuredpython导入方式 from langchain_community.document_loaders import DirectoryLoader我们可以使用 glob 参数来控制加载特定类型文…...

深度学习2:从零开始掌握PyTorch:数据操作不再是难题

文章目录 一、导读二、张量的定义与基本操作三、广播机制四、索引与切片五、内存管理六、与其他Python对象的转换本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,…...

MyBatis的if标签的基本使用

在MyBatis框架中&#xff0c;if标签用于在构建SQL语句时&#xff0c;根据参数条件判断的结果&#xff0c;动态地选择加入或不加where条件中。 一 常见使用 在使用MyBatis处理查询逻辑的时候&#xff0c;常用的是判断一些参数是否为空&#xff0c;列举常用的几种情况展示 1.1…...

【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成

问题描述 在Azure Redis的导出页面&#xff0c;突然不能配置Storage Account的SAS作为授权方式。 image.png 那么是否可以通过AZ CLI或者是Powershell来实现SAS的配置呢&#xff1f; 问题解答 可以的。使用 az redis export 可以实现 az redis export --container --prefix[--a…...

【微服务】Nacos

一、安装 1、官网地址&#xff1a;https://nacos.io/download/nacos-server/ 2、启动&#xff1a;找到bin目录下的startup.cmd双击启动&#xff0c;或者打开一个命令窗口输入&#xff1a; startup.cmd -m standalone双击启动后如下&#xff1a;可以访问控制台地址 访问后的…...

5、定义与调用函数

大家好,欢迎来到Python函数入门课程! 在编程中,函数就像一个可以重复使用的代码块,它接受输入(参数),执行特定的任务,并可能返回一个结果。想象一下,函数就像一个厨房里的搅拌机,你放入水果(参数),按下按钮(调用函数),它就会帮你制作出美味的果汁(返回值)。…...

Linux 网络编程之TCP套接字

前言 上一期我们对UDP套接字进行了介绍并实现了简单的UDP网络程序&#xff0c;本期我们来介绍TCP套接字&#xff0c;以及实现简单的TCP网络程序&#xff01; &#x1f389;目录 前言 1、TCP 套接字API详解 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 connect 2、…...

北京网站建设乐云seo/steam交易链接在哪

i.MX8MM开发板使用手册更新啦&#xff0c;最新版本为1.6版本。后续资料会不断更新&#xff0c;不断完善&#xff0c;帮助用户快速入门&#xff0c;大大提升研发速度。更新重点&#xff1a;1 Android源码更新维护&#xff0c;支持4G模块 2 Linux源码修复声卡声音过小问题&#x…...

怎么做网站规划书/北京网站优化平台

数据结构在生活中的应用 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 数据结构是指同一数…...

许昌北京网站建设/正规培训机构有哪些

未来物联网全栈开发的主流语言是什么&#xff1f;CSDN推出的讨论话题是&#xff1a;未来物联网全栈开发主流语言是什么&#xff1f;小虎老师&#xff0c;从考试角度来分析此题&#xff0c;也就是先要审题&#xff0c;抓住几个关键信息&#xff1a;1.未来的2.物联网3.全栈式开发…...

适合设计师的网站/网络优化软件有哪些

一、问题引入如果服务提供者响应非常缓慢&#xff0c;那么消费者对提供者的请求就会被强制等待&#xff0c;直到提供者响应或超时。在高负载场景下&#xff0c;如果不作任何处理&#xff0c;此类问题可能会导致服务消费者的资源耗尽甚至整个系统的崩溃。1.1、雪崩效应微服务架构…...

网站销售如何做业绩/淘宝客推广一天80单

来源《微观经济学19.1.5超级明星现象》&#xff1a; 好的木匠、管道工赚的钱和一些娱乐、体育明星相比不在一个数量级上&#xff0c;why&#xff1f; 1、市场上每位顾客都想享受最优生产者提供的物品&#xff1b; 2、使最有生产者以低成本向每位顾客提供物品成为可能的是生产这…...

网站建设大作业选题/开发外包网站

这几天在学校呆着&#xff0c;大家遇到了一些网络问题。在这里集中写一下。 客户端打不开 学校的客户端打不开&#xff0c;症状是双击之后&#xff0c;没有反应。这种问题有两种方法&#xff1a;1.重启电脑。一般这方法可以奏效&#xff0c;万能的重启。2.卸掉客户端&#xff0…...