做后期哪个网站素材好博纳网络科技有限公司

news/2025/9/25 23:57:43/文章来源:
做后期哪个网站素材好,博纳网络科技有限公司,dede 网站改宽屏代码,Wordpress 精确时间分钟函数是将具有独立功能的代码块组成一个整体#xff0c;使其具有特殊功能的代码集。它将复杂的算法过程分解为若干个小任务#xff0c;隐藏相关细节#xff0c;使得程序结构更加清晰#xff0c;易于维护。通过接收输入参数完成一段算法指令#xff0c;输出或存储相关结果。… 函数是将具有独立功能的代码块组成一个整体使其具有特殊功能的代码集。它将复杂的算法过程分解为若干个小任务隐藏相关细节使得程序结构更加清晰易于维护。通过接收输入参数完成一段算法指令输出或存储相关结果。因此函数还是代码复用和测试的基本单元。 关键字func用于定义函数 函数必须先定义后调用定义的过程为函数定义。 函数创建后并不是直接可以运行的需要手动使用后才执行该过程为函数调用。 函数定义 func 函数名(参数1 数据类型,参数2 数据类型...)(返回值1 返回值类型...){语句体return 返回值 }函数调用 函数调用时参数的数量与数据类型必须与函数定义中的相匹配。 普通格式调用 函数名形参列表)函数值格式调用 变量 : 函数名(形参列表)函数表达式格式调用 变量 : 类名.函数名(形参列表)函数的返回值通常会使用变量接收否则该返回值无意义。 package functionimport fmtfunc Function(a int, b int) int { // 定义函数function两个形参分别是a、b返回值类型是intreturn a b }func main() {// 普通格式调用Function(1, 2) // 调用function传入实参为1,2赋值给a、b// 函数值格式调用f : Function(1, 2)fmt.Println(f) }————————————————————————————分界线————————————————————————————package mainimport (function go_basics/func )func main() {// 函数表达式格式调用function.Function(1, 2) }函数只能判断是否为nil不支持其他比较操作。 func main() {fmt.Println(function01 nil)fmt.Println(function01 function02) // 无效运算: function01 function02 (在 func() 中未定义运算符 ) } func function01() {} func function02() {}函数中的变量是局部的函数外不生效。 func main() int {num : 1return num }num // 报错找不到num参数 基本类型和数组默认都是值传递实参将自己的地址值拷贝一份给形参。如果参数是引用类型那么就会改变实参的值。 形参和实参 形参是指函数定义中的参数实参则是函数调用时所传递的参数。形参相当于函数局部变量而实参则是函数外部对象可以是常量、变量、表达式或函数等。 形参 形参就是函数定义中的参数顾名思义就是只有一个形式没有具体的数值等同于变量定义格式。 例 // num只是一个形式num并没有赋值 func function(num int) {}实参 函数调用中的参数顾名思义就是有实际的参数数值等同于使用变量或常量。 例 func main() {num : 10function(num) // 这里的num就已经赋值了 }func function(num int) {}传递的形参即使在函数中操作也不会影响原来的数据值。 func main() {var a 1var b 2function(a, b)fmt.Println(a,a, b,b) }func function(a, b int) {a, b b, afmt.Println(a,a, b,b) }输出 a1,b2 a2,b1参数列表中相邻的同数据类型参数可以合并数据类型调用时必须按参数顺序传递指定类型的实参就算以“_”命名也不能忽略。 func main() {function(1, 2, abc) // 报错;function 调用中的实参不足给bool变量赋值就可以了 }func function(x, y int, s string, _ bool) *int {return nil }参数可视作函数的局部变量因此不能在函数内部再定义同名变量。 func main(x, y int) int {x : 100 // 错误: 的左侧没有新变量var y int // 错误此函数中重新声明了 yreturn x y }不管是指针、引用类型还是其他类型参数都是值拷贝传递无非是拷贝目标对象还是拷贝指针自身而已。在函数调用时会为形参和返回值分配内存空间并将实参数据拷贝到形参内存。 func main() {a : 0x100p : afmt.Println(p的内存地址, p, \tp的值, p)function(p) }func function(x *int) {fmt.Println(x的内存地址, x, \tx的值, x) }输出 p的内存地址 0x1400011c018 p的值 0x14000122008 x的内存地址 0x1400011c028 x的值 0x14000122008如果希望函数内的变量能修改函数外的变量(指的是默认以值传递的方式的数据类型)可以传入变量的地址函数内以指针的方式操作变量。 func main() {num : 20function(num)fmt.Println(main() num, num) }func function(num *int) {*num *num 10fmt.Println(function() num, *num) }输出 function() num 30 main() num 30Go不支持函数重载。 func function(n1 int) {} func function(n1 int, n2 int) {} // 此包中重新声明的 function函数也是一种数据类型可以赋值给一个变量那么这个变量就是一个函数类型的变量通过该变量可以对函数调用。 func main() {z : function // 直接把函数赋值给一个变量fmt.Printf(变量z的数据类型为%T\n,函数function的数据类型为%T\n,, z, function)num : z(1, 2) // 因为是赋值给变量了所以可以直接使用变量调用相当于原函数名本身把返回值赋值给num再输出fmt.Println(num, num) }func function(x, y int) int {return x y }输出 变量z的数据类型为func(int, int) int 函数function的数据类型为func(int, int) int num 3既然函数是一种数据类型那么函数也可以作为形参并且调用。 func main() {num : function(getSum, 20, 30)fmt.Println(num) //50 }func getSum(x, y int) int {return x y }// funcTest func(int, int) int是第一个参数 func function(funcTest func(int, int) int, num1, num2 int) int {return funcTest(num1, num2) }图解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yF1wpNRm-1671382906199)(/Users/itzhuzhu/Library/Application Support/typora-user-images/image-20221219000230020.png)] 可变参数 顾名思义函数中参个数是可以变化的写函数时如果不确定形参长度可以使用可变参数传递可变变参本质上就是一个切片它只能接收相同类型的参数值且必须放在参数列表的最后。 查看可变参数类型 func main() {function(abc, 1, 2, 3, 4) }func function(s string, a ...int) {fmt.Printf(%T, %v\n, a, a) }输出 []int, [1 2 3 4]可变参数的使用 func main() {function01(1, 2, 3, 4, 5)function02(111, 2, 3, 4, 5)}func function01(num ...int) {for i : 0; i len(num); i {fmt.Println(num[i])} }// 如果可变参数和其它参数一起作为形参时可变参数需要放在后面 func function02(a int, num ...int) {for i : 0; i len(num); i {fmt.Println(num[i])}fmt.Println(a) }变参是切片那么参数复制的仅是切片自身不包括底层数组因此我们可以修改原数据。 func main() {a : []int{10, 20, 30}function(a...)fmt.Println(a) }func function(a ...int) {for i : range a {a[i] 100} }输出 [10 20 30]返回值 Go支持多个返回值如果没有定义返回值但是写了return那么就相当于终止了函数跳出循环的意思。返回值不想接收时候可以使用下划线忽略_。返回值只有一个时可以不写括号有多个似必须写括号。 没定义返回值但写了return就会终止return后面的代码是不会执行的。 func main() {function(1, 2) // 结果为空 }func function(x, y int) {returnz : x yfmt.Println(z) }函数后面只有返回值类型没有给返回值命名。 func main() {f : function(1, 2)fmt.Println(f) }func function(x, y int) int {sum : x yreturn sum }命名返回值 func main() {f : function(1, 2)fmt.Println(f) // 3 }// 要在参数后面加上返回值和返回值的数据类型不需要在函数里再定义返回值 func function(x, y int) (sum int) {sum x yreturn // 函数返回值那里已经命名了在函数中可以省略返回值名直接return相当于return sum }函数返回多个返回值 func main() {x, y : function()fmt.Println(x , x, \ty , y) }func function() (int, int) {x : 1y : 2// 返回两个变量的值return x, y }有返回值的函数必须有明确的return终止语句。 func function(x int) int {if x 0 {return -1} else if x 0 {return -1} } // 错误函数末尾缺少 return 语句func function(x int) int {for {break} } // 错误函数末尾缺少 return 语句 相同类型的多返回值可用作调用实参或直接返回 func main() {log(test()) //多返回值直接用作实参。 }func log(x int, err error) {fmt.Println(x, err) }func test() (int, error) {return div(5, 0) //多返回值直接用作return结果。 }func div(x, y int) (int, error) {if y 0 {return 0, errors.New(error...)}return x / y, nil }匿名函数 匿名函数就是没有名字的函数如果某个函数只使用一次就可以使用匿名函数匿名函数也可以实现多次调用。 匿名函数除没有名字外其他和普通函数完全相同。最大的区别是我们可在函数内部定义匿名函数形成类似嵌套函数的效果。匿名函数可直接调用保存到变量作为参数或返回值 作用 匿名函数只有在被调用的时候才会开辟空间执行完毕就会被销毁可以节省内存减少重名的风险可以实现闭包 格式 func(形参)(返回值) {函数体 }(实参) // 在定义的时候就已经传入了参数无返回值匿名函数 func main() {func(s string) {fmt.Println(s)}(我是实参上面的s是形参我会被打印不) }输出 我是实参上面的s是形参我会被打印不有返回值匿名函数把匿名函数赋值给一个变量再通过变量调用函数 func main() {num : func(x, y int) int {return x y}fmt.Println(num(1, 2)) }全局匿名函数把匿名函数赋值一个全局变量那么这个匿名函数就成为一个全局匿名函数可以在程序有效。 var num func(x, y int) int { // 匿名函数把结果赋值给num然后调用num传入参数就可以了return x y }func main() {fmt.Println(num(1, 2)) }如果定义了匿名函数但是没有使用会报错在结尾传入参数就可以 func main() {func(x int) { // 报错func 已评估但未使用fmt.Println(x)} }闭包 闭包closure是在函数和其引用环境的组合体匿名函数引用了匿名函数外部的数据如变量、常量、函数等。闭包让我们不用传递参数就可读取或修改环境状态传入一次就可以反复使用 ClosePackage返回的匿名函数会引用匿名函数外部的变量x这种现象就称作闭包不管是变量还是其它数据只要是匿名函数引用了外部的数据那么就会称为闭包因为变量x只初始化一次所以连续调用时候结果就会累计 func main() {num : ClosePackage()fmt.Println(num(1)) // 传入一个值为1这个1会赋给匿名函数中的yfmt.Println(num(2))fmt.Println(num(3)) }func ClosePackage() func(int) int { // 定义一个函数无形参返回值是一个函数var x int 1return func(y int) int { // ClosePackage函数的返回值是一个匿名函数x y 1 // 在这里使用匿名函数外的变量xreturn x} }输出 2 3 4通过输出指针闭包直接引用了原环境变量。所以说闭包是函数和引用环境组合体更加确切 func main() {f : ClosePackage(0x100)f() }func ClosePackage(x int) func() {println(x)return func() {println(x, x)} }输出 0xc82000a100 0xc82000a100 256闭包应用 func main() {f : FileTest(.pdf)fmt.Println(f(Go语言学习笔记))fmt.Println(f(Go语言学习笔记.韩顺平))fmt.Println(f(.pdf)) }func FileTest(FileName string) func(string) string {return func(name string) string {// 判断传入的name开头是否有指定的后缀(FileName)不等于就加上后缀如果等于就返回nameif !strings.HasPrefix(name, FileName) {return name FileName}return name} }输出 Go语言学习笔记.pdf Go语言学习笔记.韩顺平.pdf .pdf内置函数 make为切片map、通道类型分配内存并初始化对象。 len计算数组、切片、map、通道的长度。 cap计算数组、切片、通道的容量。 delete删除 map 中对应的键值对。 append将数据添加到切片的末尾。 copy将原切片的数据复制到新切片中。 new除切片、map、通道类型以外的类型分配内存并初始化对象返回的类型为指针。 complex生成一个复数。 real获取复数的实部。 imag获取复数的虚部 print将信息打印到标准输出没有换行。 println将信息打印到标准输出并换行。 close关闭通道。 panic触发程序异常。 recover捕捉 panic 的异常信息。 len用来计算长度的string、arr、slice、map、channel都可以 func main() {s : itzhuhzufmt.Println(长度为,len(s)) }new用来分配值内存的int、float32、struct返回值是指针 func main() {num : 100fmt.Printf(num的类型%Tnum的值%vnum的内存地址%v\n, num, num, num)num2 : new(int)*num2 100fmt.Printf(num2的类型%Tnum2的值%vnum2的内存地址%vnum2指向地址存储的数据%v, num2, num2, num2, *num2) }输出 num的类型intnum的值100num的内存地址0x1400012c008 num2的类型*intnum2的值0x1400012c020num2的内存地址0x14000126020num2指向地址存储的数据100直接定义变量的流程是 开辟内存空间 - 将数据存储到内存空间适用new定义变量的流程是 开启指针内存空间 - 指向数据的内存地址make用来分配引用类型内存的slice、map、channel defer defer用于向当前函数注册稍后执行的函数调用。这些调用被称作延迟调用它们直到当前函数执行结束前才被执行常用于资源释放、错误处理等操作 func main() {defer fmt.Println(第1个defer)defer fmt.Println(第2个defer)defer fmt.Println(第3个defer)fmt.Println(第1个输出)fmt.Println(第2个输出)fmt.Println(第3个输出) }输出defer的结果是倒叙的原因是进入main函数发现了defer就把defer抓走放在了一个独立的栈中等待执行压栈然后继续执行下面的直到所有的程序执行完才执行defer弹栈而栈内存是先进后出就像弹夹一样先放的子弹是最后才打出去的所以是先输出了第3个defer 第1个输出 第2个输出 第3个输出 第3个defer 第2个defer 第1个defer循环处理多个日志文件defer导致文件关闭时机延长 func main() {for i : 0; i 10000; i {path : fmt.Sprintf(./log/%d.txt, i)f, err : os.Open(path)if err ! nil {log.Println(err)continue}defer f.Close()// 这个关闭操作在main函数结束时才会执行而不是当前循环。// 延长了逻辑结束时间和f生命周期平白多消耗了内存等资源。 // 编译器也会提醒可能发生资源泄漏在 for 循环中调用 defer } }应该直接调用或重构为函数让循环和处理算法分离 func main() {//日志处理算法。do : func(n int) {path : fmt.Sprintf(./log/%d.txt, n)f, err : os.Open(path)if err ! nil {log.Println(err)return}defer f.Close() // 该延迟调用在此匿名函数结束时执行而非main}for i : 0; i 10000; i {do(i)} }init init 函数最主要的作用就是完成一些初始化的工作每一个源文件都可以包含一个init函数该函数会在main函数执行前被调用 var name itzhuzhu var age 24func main() {fmt.Println(main方法执行) }func init() {fmt.Println(init方法执行)fmt.Println(name, name, age, age) }输出 init方法执行 name itzhuzhu age 24 main方法执行如果一个文件同时包含全局变量定义init函数和main 函数则执行的流程是 全局变量定义 init main var num test()func test() int {fmt.Println(test方法执行)return 2022 } func init() {fmt.Println(init方法执行) } func main() {fmt.Println(main方法执行) }输出 test方法执行 init方法执行 main方法执行如果 main.go引用了utils.go但是两个文件都含有定义变量、init、main执行的流程是怎么样的 先执行utils.go再执行utils.go下的变量 init main再回去执行main.go下的变量 init main 如果是mian.go文件中的一个函数引用了utils.go下的函数则流程是 先执行mian.go然后走到引用utils.go的代码才会进入utils.go文件中执行 递归 递归指的是一个函数在函数体内调用了自己当一个函数执行完毕或者遇到 return就会返回给调用者同时当函数执行完毕或者返回时该函数本身也会被系统销毁 递归注意事项 递归一定要有出口。否则内存溢出(出口什么时候不再调用自己)递归虽然有出口但是递归的次数也不宜过多 否则内存溢出 演示 func main() {test(4) }func test(n int) {if n 2 {n--test(n)}fmt.Println(n) }输出 2 2 3递归案例过程分析 // main调用test现在N4 func test(4 int) {if 4 2 {4--test(3)}fmt.Println(3) }func test(3 int) {if 3 2 {3--test(2)}fmt.Println(2) }func test(2 int) {if 2 2 {不成立if执行完以后就会把n的值返回给调用者会往上面传}fmt.Println(2) }// 这段代码是在栈中完成的栈的特点是先进后出所以打印的结果是2、2、3斐波那契数 给你一个整数n请使用递归的方式求出它的斐波那契数是多少 斐波那契数1,1,2,3,5,8,13…从第三个数开始是前两个的和 func main() {res : test(6)fmt.Println(res) }func test(n int) (result int) {if n 1 || n 2 {return 1} else {return test(n-1) test(n-2)} }递归求阶乘 var s 1func main() {recursion(5)fmt.Println(s) }func recursion(num int) {if num 1 {return // 终止函数的意思}s * numrecursion(num - 1) }

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

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

相关文章

防城港网站seo免费申请网站 主机 空间

软件架构之计算机网络 第 4 章 计算机网络4.1 网络架构与协议4.1.1 网络互联模型4.1.2 常见的网络协议4.1.3 IPv6 4.2 局域网与广域网4.2.2 无线局域网4.2.3 广域网技术4.2.4 网络接入技术 4.3 网络互连与常用设备4.4 网络工程4.4.1 网络规划4.4.2 网络设计4.4.3 网络实施 4.5 …

9.25学习笔记

环境速览( 节点 新装组件 端口 备注 node1 Hive3.1.3 + MySQL 8.0 + Spark3.5.0 3306/10000/8080 HiveServer2 WebUI node2 Spark HistoryServer 18080 日志持久化到 HDFS node3 Kafka 3.7.0 + ZooKeeper(复用) 9092 …

新学期每日总结(第4天)

相较昨日复习了Java知识

wordpress 邮箱 通知成都网站优化哪家好

多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.M…

外贸长尾关键词挖掘网站关键词排名点击软件网站

目录 前言 1、文件目录 2、安装依赖 3、POM项目实战-案例:打开指定页面 目录结构: pages中的代码: cases中的代码: 4、解决登录问题 问题: 解决方案: 获取登录的用户信息(cookie&a…

网站怎么做边框网页版微信会留下记录吗

【判断题】在竞争激烈的市场环境中,职业生的就业优势是证书【简答题】请把今天的语文作业拍照、语音上传,谢谢!【简答题】请把今天的语文作业拍照上传,今日古诗语音上传,谢谢!【简答题】请把今天的作业拍照、语音上传,谢谢!【判断题】职业纵向发展只体现在技术和职务提升。【判…

VSCode 升级 C++支持版本

下载最新版本mingw:https://github.com/niXman/mingw-builds-binaries/releases 解压,覆盖原mingw路径 修改vscode c++插件配置 执行gcc -v -E -x c++ - 添加 starts here后的路径到系统include path中 指定C/C++版本…

太原模板建站定制网站爱站网工具包

软件架构是任何软件项目成功的关键。良好的架构不仅能够支撑软件的功能实现,还能确保其性能、可维护性、可扩展性和安全性。在软件工程领域,经过多年的研究和实践,已经总结出了许多宝贵的原则和模式,用以指导软件架构的设计。以下…

怎样将自己做的网站给别人看制作网架厂家

一、ubuntu下安装docker 1、命令行终端内直接输入docker 可以看到安装docker的命令提示 2、安装需要注意的几个点 (1)需要管理员权限 (2)更新软件源后再进行安装 命令行输入命令 sudo apt-get update #更新软件源 sudo apt install docker.io #安装docker 如图所示 二…

25.9.25

学习了MyBatis的基础知识,配置环境,明天跟敲代码,加速

网站如何做那种诱导广告珠海企业网站建设价格

题主的意思,搭建的自动化测试框架要包括API测试,UI测试,APP测试三类。以上三类其实可以简化为两类,那就是: 1)接口自动化测试框架搭建 2)UI自动化测试框架搭建。 没问题,安排&#x…

在electron-vite使用ShadCN

集成tailwind 这一步较为简单,仅需按照官网步骤即可~ 这里不再赘述! 稍微需要注意的是,你的集成配置都需要在 electron.vite.config.ts! 补全tsconfig.json{// ..."compilerOptions": {"composite&q…

苏州企业门户网站工信部域名备案管理系统

文章目录 概要整体架构流程 概要 把公共的部分单独拆出来&#xff0c;封装到一个新的vue文件夹中&#xff0c; 里面的数据通过父传子的方式传递&#xff0c;子通过props接受&#xff08;静态代码实现的树状图细看代码展示&#xff09; 整体架构流程 <template><!-- …

沈阳学网站制作学校营销型集团网站

学习MySQL数据库&#xff0c;MySQL自增字段是最基础的部分之一&#xff0c;下面为您介绍一些MySQL自增字段的常用语句&#xff0c;希望对您学习MySQL自增字段能些许帮助。1、创建表格时添加&#xff1a; create table table1(id int auto_increment primary key,...)2、创建表格…

每日博客(补)

今天做什么:今天上午上离散数学和马原课,下午睡觉后去洗澡洗衣服 遇到的问题:暂无

如何使用极限网关实现 Elasticsearch 集群迁移至 Easysearch

之前有博客介绍过通过 Reindex 的方法将 Elasticsearch 的数据迁移到 Easysearch 集群,今天再介绍一个方法,通过 极限网关(INFINI Gateway) 来进行数据迁移。 测试环境软件 版本Easysearch 1.12.0Elasticsearch 7.…

北京平面设计网站企业管理软件销售工程师

随着时间的积累&#xff0c;电脑内部可能会堆积起大量的垃圾文件、缓存数据和无用程序。因此&#xff0c;定期清理电脑是很有必要的。为了让你的电脑重新焕发生机&#xff0c;提高工作效率&#xff0c;本文将为你介绍4招实用的清洁法&#xff0c;助你轻松清理电脑死角&#xff…

文档抽取技术:实现金融保险业务流程自动化

金融保险行业是高度依赖文档和信息流转的典型领域。从投保申请书、理赔单据到复杂的保险合同、财务报告,海量非结构化的文档数据构成了行业运营的基础,但也带来了处理效率低下、信息提取困难、人为错误风险高等挑战。…

算法作业

C++核心规范:变量小写下划线,类名首字母大写,四空格缩进,一行别超八十字符,内存配对释放优先用智能指针,关键代码写清“为什么”,裸指针少用,关键代码增加注释。《数学之美》读后感: 原来公式背后藏着优雅逻辑…

网站项目设计书机关单位网站建设的重要性

JAVA种有两种保证线程安全的方式&#xff0c;分别叫懒汉式Lazy Initialization和饿汉式Eager Initialization&#xff0c;以下是他们的区别&#xff1a; 线程安全性&#xff1a; 懒汉式本身是非线程安全的&#xff0c;因为多个线程可能同时检查实例是否为null&#xff0c;并尝…