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

寺庙网站开发南京微网站开发

寺庙网站开发,南京微网站开发,龙岗区住房和建设局网站打不开,做网站推广的联系方式函数是什么#xff1f; 学过编程的 xdm 对于函数自然不会陌生#xff0c;那么函数是什么呢#xff1f; 函数是一段可以重用的代码块#xff0c;可以被多次调用#xff0c;我们可以通过使用函数#xff0c;提高咱们代码代码的模块化#xff0c;提高程序的可读性和可维护…函数是什么 学过编程的 xdm 对于函数自然不会陌生那么函数是什么呢 函数是一段可以重用的代码块可以被多次调用我们可以通过使用函数提高咱们代码代码的模块化提高程序的可读性和可维护性 对 GO 语言中的函数入参可以有多个返回值也可以有多个此处建议入参不大于 5 个如果超过 5 个最好使用传入结构的方式来进行处理 程序的初始化顺序 要了解 GO 语言中程序的初始化顺序就要先明白整个程序初始化流程中都会涉及到哪一些内容 GO 语言中以包 package 作为 程序逻辑封装的基本单元每一个包我们可以理解为他是独立的封装良好的并且对外暴露了接口的基本单元 然而咱们的 GO 程序就是由这些包组成的那么这个包里面一般又包含着 基本的常量变量函数类型方法和接口等等 那么对于上述这些元素我们就要弄明白在包里面他们是如何有序的进行初始化的 本章主要分享函数GO 语言中除了 main 函数还有一个特殊的函数就是 init 函数 fun init() {// 具体的实现// 具体的初始化 }这里可以看到init 函数是没有入参也没有返回值的函数 init 函数用于在本包中进行初始化和做一些程序初始状态的检查工作例如我们会把一些单例数据库句柄各种连接句柄放到 init 函数中进行初始化init 函数在整个程序生命周期只会被调用一次 且这里我们需要注意一个包里面会有多个 GO 语言源文件这些源文件中都可以定义 init 函数但是在程序执行 init 函数时是一个一个的去执行的而不是并发的去执行的那么此处的执行顺序我们就不要去过度依赖按照我们使用惯例来看过度依赖 init 函数的执行顺序可能会出现意想不到的问题 所以此处我们就需要注意如果不同的 init 函数实现中相互有依赖那么可能就会导致程序出现我们不期望的结果 那么整个程序的初始化流程和顺序我们要知道是这样子的 对于一个包而言初始化顺序如下 包内的包级常量包内的包级变量包内的 init 函数 对于一个程序里面从 main 函数开始必然是包含了其他的子包那么初始化的时候是怎么样的呢 先是初始化子包若子包里面还有子包那么就继续从最深一层的子包开始按照包里面的初始化顺序进行最深一层的子包按照顺序初始化完毕之后就到了他的父级包开始按照顺序初始化走到 main 包中的 包级常量包级变量 init 函数进行初始化最终执行 main 函数 通过上图是不是对于 GO 程序初始化顺序更加清晰了呢如果有表述不当的地方还请多多评论留言多多指教 我们可以写一个 demo 来看看效果 demo 的目录结构如下 main.go 文件的内容如下 package mainimport fmt import _ ttt/p1 import _ ttt/p2var (_ checkConst()c varInit(4)d varInit(5) )const (a 2b 3 )func init() {fmt.Println(main : init)}func checkConst() int {if a 2 {fmt.Println(main : const a)}if b 3 {fmt.Println(main : const b)}return 0 }func varInit(x int) int {fmt.Println(main : var , x)return x }func main() {fmt.Println(main : main ) }main 包中我们导入了 p1 和 p2 包main 包中定义了 const 常量和变量以及 对应的 init 函数p1 和 p2 包的内容和 main 的大体一直 运行程序之后我们可以看到打印的结果如下 通过这个 demo 我们就可以看到程序的初始化顺序正如上所述 p1 : const a p1 : const b p1 : var 4 p1 : var 5 p1 : init p2 : const a p2 : const b p2 : var 4 p2 : var 5 p2 : init main : const a main : const b main : var 4 main : var 5 main : init main : main具体的 demo 仓库可以查看如下地址 GO 语言程序初始化顺序 demo 函数在 GO 语言中的地位 在 GO 中我们可以看到没有那些高级语言面向对象的语法例如 Class 类继承对象等等内容 GO 语言中可以通过函数或者方法的方式进行各种组合完成我们想做的一切事项 此处就体现了函数在 GO 语言中是极其的重要函数在 GO 语言中是 一等公民 的存在。 如何体现 一等公民呢函数在 GO 中可以像普通类型的值一样被创建和被使用使用起来非常灵活和自由 例如创建的函数可以存储在变量中也可以做为其他函数的返回值在函数内部创建了函数变量之后通过返回值返回还可以作为其他函数的参数进行传递 那么我们就来写一些 demo 查看这个 一等公民 是有多么的自由吧 正常写一个 函数简单实现 func helloworld() string{name : 阿兵云原生return name }函数作为入参 func add(a, b int) int {return a b }func cal(a int, f func(int, int) int) int {return a f(a, a) }函数作为返回值返回出去 func add(a, b int) int {return a b }func getFunc() func(int, int) int{return add }将函数存储在变量中使用 type TestFunc struct {f func(int, int) intname string }func add(a, b int) int {return a b }func main() {tt : TestFunc{f: add, name: 阿兵云原生}fmt.Println(tt.f(1,2))}函数作为类型来使用 type PFunc func(int) int综上所述对于使用 GO 语言中的函数还是相当方便的用起来是相当的顺手 那么对于普通类型的数据我们可以进行显示的类型转换那么对于函数是不是也可以 自然是可以的我们可以来看一个 一般类型的 demo var x int 10 var y int32 20 fmt.Println(x y)上述代码很明显 x 的类型和 y 的类型是不同的 GO 语言是不会编译通过的我们需要将其中一个变量的类型显示的转换才可例如 fmt.Println(int32(x) t) 再来看看显示转换函数的 demo 写一个 Processer 接口有一个 Do(int) int 接口定义一个 PFunc 类型对应 func(int) int写一个普通函数和 func playfootball(x int) int在 main 函数中我们直接将 playfootball 赋值给 Processer 看看效果 type Processer interface {Do(int) int }type PFunc func(int) intfunc (f PFunc) Do(x int) int {return f(x) }func playfootball(x int) int {return x }func main() {var i Processer playfootballfmt.Println(i.Do(20)) }运行上述代码很明显是编译不过的因为 playfootball 的类型和并没有实现 Do 接口虽然入参和返回值的类型和个数都一样 我们只需要将上述代码将 playfootball 显示转换写成 PFunc(playfootball) 即可顺利通过编译正常看到打印 因为上述 PFunc 类型实现了 Processer 接口因此对于 i 需要接收的是 PFunc 的实例这个时候对 playfootball 进行显示转换后实际上最终调用的函数 playfootball 函数 GO 语言中的 defer 使用过 GO 语言的 xdm 对于 defer 不会陌生对于那些我们需要在函数退出前释放或者需要关闭的资源我们就可以使用到 defer 这里用起来就相当的省心哪怕函数中出现了 panicdefer 也能给你守护的明明白白的 func test() {defer func() {if e : recover(); e ! nil {fmt.Println(e)fmt.Println(recover ... )}}()panic(panic ...) }func main() {test() }例如上述 demo 会正常输出不会 panic 因为已经被捕获和处理了 使用 defer 能大大的减少我们的开发人员的心智负担例如我们以前在使用锁的时候加锁之后我们可能会忘记写解锁的语句可使用了 defer 你完全可以是在加锁的时候使用 defer 让函数关闭的时候解锁即可当然具体逻辑还是要看具体的实现 关于 defer 的原理以及使用 defer 的注意事项就不在过多赘述可以查看如下文章获得答案 GO 中的 defer 有哪些注意事项下GO 中的 defer 有哪些注意事项上GO 中 defer的实现原理 总结 本次分享了函数相关的基本知识以及 GO 程序的初始化顺序对于 defer 的使用有想法的欢迎点击上述连接查看具体 defer 的分享细节 欢迎点赞关注收藏 朋友们你的支持和鼓励是我坚持分享提高质量的动力 好了本次就到这里 技术是开放的我们的心态更应是开放的。拥抱变化向阳而生努力向前行。 我是阿兵云原生欢迎点赞关注收藏下次见~ 可以进入地址进行体验和学习https://xxetb.xet.tech/s/3lucCI
http://www.hkea.cn/news/14380560/

相关文章:

  • 东莞信科网站建设珠海市区工商年报在哪个网站做
  • 企业自助建站网河北廊坊建设局网站
  • 网页设计与网站的关系网站界面设计应遵循的原则
  • 折扣网站搭建网络管理app
  • 青羊网站建设计算机培训机构排名
  • 上海建设工程协会网站网站建设情况自查报告
  • qq空间做宣传网站韶关微网站建设
  • 网站应该怎么做高端网站首页
  • 石油大学网页设计与网站建设简单网站模板
  • 天工网官方网站企业服务账号怎么查询
  • 金融网站源码 asp建设网站范文
  • 中冶建设网站湖北企业模板建站开发
  • 佛山英文网站建设幻灯片wordpress
  • 昭通网站开发网站建设和维护方案
  • 台州市城乡建设规划局网站地方门户网站盈利模式
  • 无锡网站建设培训班开发公司工程部年终工作总结
  • 可以随意建国际商城的网站吗图片加文字在线制作
  • 西部数据网站备案流程建筑工程网格化管理实施方案2024最新版
  • 长沙企业网站建设价格厦门网站建设招标
  • 做公司网站推广网站备案信息保护
  • 网站聚合页做动漫图片的网站
  • 合肥网站建设首选 晨飞网络家政服务公司网站建设方案策划书
  • 河南企业网站建设公司中卫网架钢结构设计
  • 江苏做电缆桥架的公司网站科凡建站
  • 宁波品牌网站建设公司91号卡分销平台
  • 珠海网站推广排名中国第一营销网
  • 工信部网站验证码买空间网官网
  • 门户网站 集成 移动app 方案wordpress 手机登录
  • wordpress设置网站主题WordPress开源项目
  • 手机搭建网站教程视频网站建设搭建环境