【Golang】第五弹----函数
笔上得来终觉浅,绝知此事要躬行
🔥 个人主页:星云爱编程
🔥 所属专栏:Golang
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
![]()
目录
一、函数
1.1基本介绍
1.2基本语法
1.3函数调用机制
1.4函数使用细节
二、常见函数
2.1 init函数
2.1.1基本介绍
2.1.2案例
2.1.3使用细节
2.2匿名函数
2.2.1基本介绍
2.2.2使用方式
2.2.3全局匿名函数
2.3字符串函数
2.3.1函数列举
2.3.2使用案例
2.4时间和日期函数
2.4.1基本介绍
2.4.2时间常量
2.4.3时间戳
2.4.4案例
2.5内置函数
结语
一、函数
1.1基本介绍
为完成某一功能的程序指令(语句)的集合,称为函数。
在Go中函数分为:系统函数、自定义函数。
1.2基本语法
func 函数名称(参数名 参数类型)返回类型{执行语句return 返回值列表
}
说明:
有些函数可以没有return语句
1.3函数调用机制
先看下图代码,有个add函数,我们来分析下该函数是怎么执行的
func add(n1,n2 int)int{return n1+n2
}func main(){n1:=10n2:=5sum:=add(n1,n2)fmt.Printf("sum=%d\n",sum)
}
说明:
(1)当程序执行到函数时,就会开辟一个独立的空间,也就是栈空间;
(2)当函数执行完毕,或者执行到return语句时,就会返回
(3)返回到调用方法的地方
(4)返回后,继续执行方法后面的代码
(5)当main函数(栈)执行完毕,整个程序退出
1.4函数使用细节
- 函数的形参可以有多个,返回值也可以有多个
- 形参列表和返回值列表的数据类型可以是值,也可以是引用类型
- 函数的命名遵循标识符命名规则,首字母不能是数字,首字母大写表示其他包可以使用(即首字母大写为public),首字母小写其他包不能使用(首字母小写为private)
- 函数内的变量只能在函数内使用
- 基本数据类型和数组默认是值传递,即进行值拷贝,在函数内修改,不会影响到原来的值
- Go函数不支持函数重载
- 在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量数据类型就为函数类型,通过该变量可以对函数进行调用
- 在Go中,因为函数是一种数据类型,所以函数可以作为形参,并且调用
- Go支持自定义类型,使用type对函数取别名,目的是简化数据类型定义
- 使用_标识符,忽略返回值
二、常见函数
2.1 init函数
2.1.1基本介绍
每一个源文件丢可以包含一个init函数,该函数会在main函数前被Go运行框架调用,即init函数在main函数前先执行,可以用来作初始化处理。
2.1.2案例
案例1:
func init(){fmt.Println("init()执行...")
}func main(){fmt.Println("main()执行...")
}
说明:运行上面代码可以看到 init函数的确在main函数前执行
案例2:
var n int=test()func init(){fmt.Println("init()执行...")
}func main(){fmt.Println("main()执行...")
}func test() int{fmt.Println("test()执行...")return 10
}
说明:这次可以看到执行顺序:test()>init()>main(),无论怎么变换他们三个的位置,结果都是一样的,则全局变量的声明在init()前执行
2.1.3使用细节
- 如果一个文件同时包含全局变量定义、init函数和main函数,则执行的流程是:全局变量定义>init函数>main函数
- init最主要的用法是完成初始化工作
2.2匿名函数
2.2.1基本介绍
Go支持匿名函数,匿名函数就是没有名字的函数,如果我们某个函数只使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用
2.2.2使用方式
- 方式一:在定义匿名函数时直接调用
func main(){//使用匿名函数实现求和sum:=func (n1,n2 int) int{return n1+n2}(10,20);fmt.Printf("sum=%d",sum)
}
- 方式二:将匿名函数赋给一个变量,在通过变量来调用匿名函数
//匿名函数赋给变量f:=func (n1,n2 int) int{return n1-n2}//此时f为 函数类型变量,可以通过f调用函数num1:=f(100,10)num2:=f(6,3)fmt.Printf("num1=%d\n",num1)fmt.Printf("num2=%d\n",num2)
2.2.3全局匿名函数
将匿名函数赋给一个全局变量,那么这个匿名函数就成为了全局匿名函数,在程序中全局有效
//定义全局匿名函数
var(f2=func (n1,n2 int)int{return n1*n2}
)func main(){//使用匿名函数实现求和sum:=func (n1,n2 int) int{return n1+n2}(10,20);fmt.Printf("sum=%d\n",sum)//匿名函数赋给变量f:=func (n1,n2 int) int{return n1-n2}//此时f为 函数类型变量,可以通过f调用函数num1:=f(100,10)num2:=f(6,3)num3:=f2(2,5)fmt.Printf("num1=%d\n",num1)fmt.Printf("num2=%d\n",num2)fmt.Printf("num3=%d\n",num3)}
2.3字符串函数
在这里列举一些常用的字符串函数
2.3.1函数列举
- len:统计字符串的长度,按字节统计
- []rune(str):字符串遍历,同时处理中文字符,使其正常输出
- strconv.Atoi(str):字符串转整数
- strconv.Itoa(int):整数转字符串
- []byte(str):字符串转[]byte
- string([]byte):[]byte转字符串
- strconv.FormatInt():将整数转成指定进制的字符串
- strconv.ParseInt():字符串转任一进制的整数
- strings.Contains():查看子串是否在字符串中,返回bool值
- strings.Count():统计字符串中指定子串的数目
- strings.Index():返回子串在字符串中第一次出现的位置,没有则返回-1
- strings.Replace():将指定的子串替换为另一个子串
- strings.Split():按照指定的字符分割字符串,返回字符串数组
- strings.ToLower():将字符串的字母全替换为小写
- strings.ToUpper():将字符串的字母全替换为大写
- strings.TrimSpace():将字符串左右两边的空格去除
- strings.Trim():将字符串左右两边指定的字符去除
- strings.TrimLeft():将字符串左边指定的字符去除
- strings.TrimRight():将字符串右边指定的字符去除
- strings.HasPrefix():判断字符串是否以指定的字符串开头
- strings.HasSuffix():判断字符串是否以指定的字符串结尾
2.3.2使用案例
案例一:1~4函数使用
import ("fmt""strconv"
)
//字符串函数使用
func main(){//(1)len:统计字符串的长度,按字节统计var str string="hello,world"n:=len(str)fmt.Printf("str的长度为:%d\n",n)//11//Go统一使用utf-8编码,一个英文字母1byte,一个中文3byte//(2)[]rune(str):字符串遍历,同时处理中文字符,使其正常输出str2:="hello,李星云"for i:=0;i<len(str2);i++{fmt.Printf("%c",str2[i])//有中文,直接输出会有乱码}fmt.Println("")str3:=[]rune(str2)for i:=0;i<len(str3);i++{fmt.Printf("%c",str3[i])//此时没有乱码}fmt.Println("")//(3)//strconv.Atoi(str):字符串转整数//strconv.Itoa(int):整数转字符串str4:="52354"num1,_:=strconv.Atoi(str4)fmt.Printf("str4的类型为%T,值为%v\n num1的类型为%T,值为%v\n",str4,str4,num1,num1)str5:=strconv.Itoa(num1)fmt.Printf("str5的类型为%T,值为%v\n num1的类型为%T,值为%v\n",str5,str5,num1,num1)
}
案例二:5~8
func main(){//(5)[]byte(str):字符串转[]bytestr1:="hello,Go"var bytes =[]byte(str1)fmt.Printf("bytes的类型为%T,值为%v\n",bytes,bytes)//(6)string([]byte):[]byte转字符串str2:=string(bytes)fmt.Printf("str2的类型为%T,值为%v\n",str2,str2)//(7)strconv.FormatInt()://func FormatInt(i int64, base int) string//返回i的base进制的字符串表示。// base 必须在2到36之间,结果中会使用小写字母'a'到'z'表示大于10的数字str3:=strconv.FormatInt(4329,10)fmt.Printf("str3的类型为%T,值为%v\n",str3,str3)//(8)func ParseInt(s string, base int, bitSize int) (i int64, err error)//返回字符串表示的整数值,接受正负号。// base指定进制(2到36),如果base为0,则会从字符串前置判断,// "0x"是16进制,"0"是8进制,否则是10进制;// bitSize指定结果必须能无溢出赋值的整数类型,// 0、8、16、32、64 分别代表 int、int8、int16、int32、int64;// 返回的err是*NumErr类型的,如果语法有误,err.Error = ErrSyntax;// 如果结果超出类型范围err.Error = ErrRange。str4:="58023"n3,_:=strconv.ParseInt(str4,10,64)fmt.Printf("n3的类型为%T,值为%v\n",n3,n3)
}
2.4时间和日期函数
2.4.1基本介绍
- 使用时间和日期函数,需要导入time包
- 时间变量的类型为time.Time类型
- 通过time.Now获到当前时间
- 通过now可以获取独立的时间元素
- 可以用Format对时间进行格式化输出
- 可以使用time.Sleep进行程序休眠
2.4.2时间常量
Nanosecond 纳秒
Microsecond 微秒=1000纳秒
Millisecond 毫秒=1000微秒
Second 秒=1000毫秒
Minute 分
Hour 时
2.4.3时间戳
- 时间戳(Timestamp)是用于标识特定时间点的数据,通常表示从某一固定时间点(如1970年1月1日00:00:00 UTC,即Unix纪元)到当前时间的秒数或毫秒数。
- 时间戳的作用是可以用来获取随机数
- 有两种方式获取时间戳,分别是Unix()和UnixNano(),二者区别如下
2.4.4案例
案例一:
import ("fmt""time"
)func main(){now:=time.Now() //获取当前时间fmt.Printf("now为%T类型,值为%v\n",now,now)//通过now可以获取到具体时间fmt.Printf("年=%v\n",now.Year())fmt.Printf("月=%v\n",now.Month())fmt.Printf("日=%v\n",now.Day())fmt.Printf("时=%v\n",now.Hour())fmt.Printf("分=%v\n",now.Minute())fmt.Printf("秒=%v\n",now.Second())
}
案例二:格式化输出时间
func main(){now:=time.Now() //获取当前时间fmt.Printf("now为%T类型,值为%v\n",now,now)//格式化时间日期//方式一:fmt.Printf("当前时间:%v年%v月%v日%v时%v分%v秒\n",now.Year(),int(now.Month()),now.Day(),now.Hour(),now.Minute(),now.Second())//方式二:fmt.Printf(now.Format("2006/01/02 15:04:05"))//说明:"2006/01/02 15:04:05"数字是固定的,不过其结构可以自定义
}
案例三:休眠sleep的使用
func main(){now:=time.Now() //获取当前时间fmt.Printf(now.Format("15:04:05\n"))time.Sleep(1000*time.Millisecond)//休眠1秒now2:=time.Now()fmt.Printf(now2.Format("15:04:05"))}
案例四:时间戳使用
func main(){now:=time.Now() //获取当前时间fmt.Println(now.Unix())//Unix时间戳fmt.Println(now.UnixNano())//UnixNano时间戳
}
2.5内置函数
- len:用来求长度,例如string 、array、slice、map、channel
- new:用来分配内存,主要用来分配值类型
- make:用来分配内存,主要用来分配引用类型
new使用案例
func main(){n:=new(int)fmt.Printf("n的类型为%T,值为%v,地址为%v\n",n,n,&n)
}
结语
感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!
路漫漫其修远兮,吾将上下而求索。
相关文章:
【Golang】第五弹----函数
笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:Golang 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一、函数 1.1基本介绍…...
适合二次开发的Web组态软件推荐
在选择适合二次开发的Web组态软件时,需要考虑多个因素,包括开源与否、功能、社区支持、文档完整性等。以下是一些适合二次开发的Web组态软件: 1. Node-RED 简介: Node-RED 是一个基于流的编程工具,最初由IBM开发,现为…...
三、Docker 集群管理与应用
(一)项目案例 1、准备主机 (1)关闭防火墙,或者开放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于节点之间的通信)、UDP端口4789(用于overlay网络流…...
Spring 注解解析
一、Import 1、核心作用 Import 是 Spring 模块化配置的核心注解,用于将外部配置类、组件或动态逻辑导入当前 Spring 上下文。其核心功能包括: 配置类聚合:整合多个分散的 Configuration 类,解决大型项目中配置分散的问题。动态…...
DeepSeek-R1思路训练多模态大模型-Vision-R1开源及实现方法思路
刚开始琢磨使用DeepSeek-R1风格训练多模态R1模型,就看到这个工作,本文一起看看,供参考。 先提出问题,仅靠 RL 是否足以激励 MLLM 的推理能力? 结论:不能,因为如果 RL 能有效激励推理能力&#…...
mysql select distinct 和 group by 哪个效率高
在有索引的情况下,SELECT DISTINCT和GROUP BY的效率相同;在没有索引的情况下,SELECT DISTINCT的效率高于GROUP BY。这是因为SELECT DISTINCT和GROUP BY都会进行分组操作,但GROUP BY可能会进行排序,触发filesort&…...
阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台
阿里云操作系统控制台评测:国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展,企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具,正逐步成为企业高效管理…...
Linux基础开发工具—vim
目录 1、vim的概念 2、vim的常见模式 2.1 演示切换vim模式 3、vim命令模式常用操作 3.1 移动光标 3.2 删除文字 3.3 复制 3.4 替换 4、vim底行模式常用命令 4.1 查找字符 5、vim的配置文件 1、vim的概念 Vim全称是Vi IMproved,即说明它是Vi编辑器的增强…...
11 应用层的域名知识点
一、DNS 1、理解 定义:DNS(Domain Name System,域名系统)是互联网的一项核心服务,它将人类可读的域名(也叫网址,如 www.example.com)转换为机器可读的IP地址(如 192.0.…...
5-24 色彩与风格——T2IA自适应
前言: 上一节我们介绍了ControlNet中的inpaint局部重绘 主要介绍ControlNet中的T2IA自适应。 色彩风格的参考和借鉴能力,有点类似于5-17 reference参考图 或者 5-16 画面风格迁移-shuffle洗牌 。当然在硬件的要求,软件的算法实现和使用方式…...
JAVA-Thread类实现多线程
引言: 本章博客涉及进程线程内容,如果不了解的可以看:什么是进程线程-CSDN博客 线程是操作系统的概念,操作系统提供的API供程序员使用操作。但是不同的操作系统(Winodws、Linux、Unix……差别很大),但是做为JAVA程序员就不需要担心…...
顺序表,单链表,双链表,循环链表(01星球)
文章目录 数据结构前导------C语言复习程序为什么要被编译器编译之后才能运行编译器把C语言程序转换成可以执行的机器码的过程做了什么宏定义typedef 关键字全局变量和局部变量常量字符的输入输出运算符冯诺依曼架构存储器容量数据类型指针指针本质为什么需要指针 数组数组指针…...
代码社区开源协议
开源协议是一种法律文件,用于规定开源软件的使用、修改和分发条件。它平衡了开发者和使用者的权益,同时推动开放协作与技术创新。以下是常见的开源协议及其特点和适用场景: 常见开源协议列表及介绍 1. MIT License 特点:非常宽…...
[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版),分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…...
树莓派:更新源
发行版本 Debian 一直维护着至少三个发行版本:“稳定版(stable)”,“测试版(testing)”和“不稳定版(unstable)”。 发行版目录 下一代 Debian 正式发行版的代号为 bullseye — 发布…...
树与二叉树的遍历
我们平时用的树都是二叉树 一、一些基础概念 1. 树就是一种:一对多的数据结构。树离不开递归,因为“树”就是“树”中有“树”。 二叉树就是 :空树 或者 每个结点的子结点个数小于等于2。 满二叉树: 除叶子结点外所有结点的…...
Web基础:HTML快速入门
HTML基础语法 HTML(超文本标记语言) 是用于创建网页内容的 标记语言,通过定义页面的 结构和内容 来告诉浏览器如何呈现网页。 超文本(Hypertext) 是一种通过 链接(Hyperlinks) 将不同文本、图像…...
异常(8)
今天补充一些异常的细节,帮助大家更好的理解异常. 注:关于异常的处理方式 异常的种类有很多,我们要根据不同的业务场景来决定. 对于比较严重的问题(例如和算钱相关的场景),应该让程序直接崩溃,防止造成更严重的结果 对于不太严重的问题(大多数场景),可以记录错误日志,并通过…...
平时作业
java作业 package zuoye; public class zuoye02 {public static int Random(int n) {return (int)(n * Math.random());}public static void main(String[] args) {int n 100;//System.out.println(Random(n));int[]random new int[50];for(int i 0; i <50; i) {rand…...
宇树人形机器人开源模型
1. 下载源码 https://github.com/unitreerobotics/unitree_ros.git2. 启动Gazebo roslaunch h1_description gazebo.launch3. 仿真效果 H1 GO2 B2 Laikago Z1 4. VMware: vmw_ioctl_command error Invalid argument 这个错误通常出现在虚拟机环境中运行需要OpenGL支持的应用…...
**ResNet-SE + MFCC** 训练框架,包括 **数据加载、训练流程**,以及 **混淆矩阵** 可视化示例
1. 依赖库安装 如果你还没安装相关库,请先执行: pip install torch torchaudio torchvision scikit-learn matplotlib tqdm2. 数据加载 这里假设你有一个 音频分类数据集,其文件结构如下: dataset/ │── train/ │ ├──…...
Golang | 每日一练 (5)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Golang | 每日一练 (5)题目参考答案线程与协程线程切换…...
搞定python之四----函数、lambda和模块
本文是《搞定python》系列专栏的第四篇,通过代码演示列python自定义函数、lambda和模块的用法。本文学习完成后,python的基础知识就完了。后面会学习面向对象的内容。 1、自定义函数 # 测试python自定义函数# 有参数,没有返回值 def say_he…...
算法分享———进制转换通用算法
模板一:任意(K)进制转10进制 将k进制的x转化为10进制的x ll x0; for(int i1;i<n;i) { xx*ka[i]; } cout<<x<<endl;模板二:十进制转m进制 ll x; cin>>x; while(x) { a[cnt]x%k; x/k; } reverse(a1,a1cnt);…...
Proser:新增指令批次发送功能
Proser中的批次发送功能,是通过指令集进行管理的。 起初设计时,希望指令集窗口自身包含指令的编辑功能,这部分功能与传输窗口的功能重合度高,所以设计上进行了简化,由用户在传输窗口输入指令,添加到指令集窗…...
rpc grpc
RPC Remote Procedure Call,远程过程调用,是用来屏蔽分布式计算中的各种调用细节,使得调用远端的方法就像调用本地的一样。 客户端与服务端沟通的过程 客户端发送数据(以字节流的方式);(编码)服务端接受…...
AI赋能铁道安全巡检探索智能巡检新时代,基于YOLOv7全系列【tiny/l/x】参数模型开发构建铁路轨道场景下轨道上人员行为异常检测预警系统
在交通强国的战略引领下,中国铁路网如巨龙般纵贯大江南北,将五湖四海紧密相连,极大地促进了人员出行与物流运输的便捷性。然而,随着铁路线路的不断扩展,管理层面的安全问题也日益凸显。历史上,多起与铁路相…...
Kubernetes安全:集群保护的最佳实践
随着容器化技术的广泛应用,Kubernetes已经成为企业IT基础设施的重要组成部分。然而,Kubernetes集群的复杂性也带来了独特的安全挑战。如何在动态变化的云原生环境中保障集群的安全性,成为每一位运维工程师和安全专家关注的焦点。本文将详细探…...
R+VIC模型融合实践技术应用及未来气候变化模型预测
在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用。目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然,这些软件有各自的优点;但是&am…...
前端开发:混合技术栈的应用
目录 前言 混合技术栈的优势 移动端开发嵌入H5 1、场景描述 2、实现方法 3、源码示例 OC项目嵌入Swift的使用 1、场景描述 2、实现方法 3、源码示例 HarmonyOS开发中嵌入WebView 1、权限配置 2、加载网页 结束语 前言 随着技术的不断进步,软件开发领域…...
Machine Learning: 十大基本机器学习算法
机器学习算法分类:监督学习、无监督学习、强化学习 基本的机器学习算法: 线性回归、支持向量机(SVM)、最近邻居(KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维、梯度增强。 机器学习算法大致可以分为三类: 监督学习算法 (Sup…...
react实现一个列表的拖拽排序(react实现拖拽)
需求场景: 我的项目里需要实现一个垂直列表的拖拽排序,效果图如下图: 技术调研: 借用antd Table实现: 我的项目里使用了antd,antd表格有一个示例还是挺像的,本来我想用Table实现࿰…...
通过mybatis的拦截器对SQL进行打标
1、背景 在我们开发的过程中,一般需要编写各种SQL语句,万一生产环境出现了慢查询,那么我们如何快速定位到底是程序中的那个SQL出现的问题呢? 2、解决方案 如果我们的数据访问层使用的是mybatis的话,那么我们可以通过…...
【MySQL】MySQL服务器——mysqld
1.MySQL服务器 是名为 mysqld 的数据库服务器程序,和“主机”(host)不一样是一个多线程的单进程管理对磁盘和内存中数据库的访问支持并发的客户端连接支持多个存储引擎,常见的存储引擎包括InnoDB、MyISAM、Memory、Archive支持事…...
JAVA面试_进阶部分_Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)
在什么时候: 首先需要知道,GC又分为minor GC 和 Full GC(major GC)。Java堆内存分为新生代和老年代,新生代 中又分为1个eden区和两个Survior区域。 一般情况下,新创建的对象都会被分配到eden区ÿ…...
【探秘海洋伤痕】海洋环境污染损害的警世启示
在地球这个蓝色星球上,广袤无垠的海洋孕育了无数生命,支撑着地球的生态平衡与人类的生存发展。然而,随着工业化和现代化的加速,海洋环境遭受的伤害日益严重,海洋环境污染损害成为了我们必须直面的严峻问题。本文将带您…...
过滤器(Filter)与拦截器(Interceptor)
在Java Web开发中,**拦截器(Interceptor)和过滤器(Filter)**都用于在请求处理过程中拦截和处理HTTP请求或响应,但它们有不同的应用场景和工作原理。下面将详细解释它们的区别,并提供代码演示。 …...
智慧城市运行管理服务平台建设方案
随着城市化的快速发展,城市运行管理面临着前所未有的挑战。智慧城市的概念应运而生,旨在通过信息技术手段提升城市管理效率和居民生活质量。智慧城市运行管理服务平台作为智慧城市建设的核心组成部分,其建设方案的科学性和前瞻性至关重要。 …...
Java是怎么解决并发问题的?
Happens-Before规则(前言) Happens-Before规则 是 Java 内存模型(JMM)中用于定义线程间操作可见性和有序性的一种规范。它的核心目的是:确保一个线程的某些操作结果对其他线程是可见的,并且这些操作在时间上的顺序不会被重排序破…...
使用 Chrome Flags 设置(适用于 HTTP 站点开发)
使用 Chrome Flags 设置(适用于 HTTP 站点开发) 在 Chrome 地址栏输入:chrome://flags/在搜索框输入 “Insecure origins” 或 “Allow invalid certificates”。找到 “Insecure origins treated as secure” 选项(或者 #allow-…...
解锁 AI 开发的无限可能:邀请您加入 coze-sharp 开源项目
大家好!今天我要向大家介绍一个充满潜力的开源项目——coze-sharp!这是一个基于 C# 开发的 Coze 客户端,旨在帮助开发者轻松接入 Coze AI 平台,打造智能应用。项目地址在这里:https://github.com/zhulige/coze-sharp&a…...
【Swift】面向协议编程之HelloWorld
定义一个协议(protocol),swift 中可以对protocol 进行扩展(extension)通过协议的扩展可以对函数有默认的实现 protocol Sleepable {func sleep() } protocol Eatable {func eat() } extension Eatable {func eat() {print("eat food")} }在类(class)或结…...
图神经网络学习笔记—纯 PyTorch 中的多 GPU 训练(专题十二)
对于许多大规模的真实数据集,可能需要在多个 GPU 上进行扩展训练。本教程将介绍如何通过 torch.nn.parallel.DistributedDataParallel 在 PyG 和 PyTorch 中设置多 GPU 训练管道,而无需任何其他第三方库(如 PyTorch Lightning)。请注意,此方法基于数据并行。这意味着每个 …...
Linux云计算SRE-第二十周
完成ELK综合案例里面的实验,搭建完整的环境 一、 1、安装nginx和filebeat,配置node0(10.0.0.100),node1(10.0.0.110),node2(10.0.0.120),采用filebeat收集nignx日志。 #node0、node1、node2采用以下相同方式收集ngin…...
springcloud gateway搭建及动态获取nacos注册的服务信息信息
前言 Spring Cloud Gateway 通过集成 Nacos 服务发现,可以动态获取注册到 Nacos 的微服务实例信息,并根据服务名(Service Name)自动生成路由规则或手动配置路由规则,实现请求的动态路由和负载均衡。 一个最简单的网关就…...
SSM基础专项复习6——Spring框架AOP(3)
系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架(1)-CSDN博客 3、SSM基础专项复习3——Spring框架(2)-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具(1ÿ…...
【嵌入式linux】网口和USB热插拔检测
在Linux常常需要对网口和USB等外设接口进行插拔检测,从而执行部分初始化操作。下面简要介绍Linux的Netlink机制,并在C程序中使用Linux的Netlink机制完成网口和USB口插拔检测。 Netlink 是 Linux 内核与用户空间进程通信的一种机制,主要用于内…...
C++(13)—类和对象(中) ③拷贝构造函数
文章目录 一、拷贝构造函数的基本概念1.1 什么是拷贝构造函数?1.2 拷贝构造函数的调用场景 二、拷贝构造函数的核心特性2.1 拷贝构造函数的参数2.2 默认拷贝构造函数 三、深拷贝与浅拷贝3.1 浅拷贝的问题 四、拷贝构造函数的实际应用4.1 何时需要显式定义拷贝构造函…...
【GPT入门】第17课 RAG向量检索分类、原理与优化
【GPT入门】第16课 RAG向量检索分类、原理与优化 1.向量检索概念1.1 文本检索的两类方式1.2 向量的定义1.3 文本向量(Text Embeddings)1.4 文本向量如何得到1.5 向量间相似度计算1.6 向量数据库功能对比1.7 open ai发布的两个向量模型2.向量数据库1.8 向量检索的优化3.检索后…...
Operator <=> (spaceship operator)
operator <>动机 在C20以前定义比较运算符:其他比较运算符基于<和实现 struct Type {int value;// 相等运算符friend bool operator(const Type& a, const Type& b) {return a.value b.value;}// 不等运算符friend bool operator!(const Type&a…...