Go语言函数、结构体、方法和接口怎么用


本篇内容介绍了“Go语言函数、结构体、方法和接口怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Go语言的函数属于“一等公民”(first-class),也就是说:函数本身可以作为值进行传递。支持匿名函数和闭包(closure)。函数可以满足接口。函数使用命名返回值时,可以在return中不填写返回值列表,如果填写也是可行的Go语言中传入和返回参数在调用和返回时都使用值传递,这里需要注意的是指针、切片和map等引用型对象指向的内容在参数传递中不会发生复制,而是将指针进行复制,类似于创建一次引用。在Go语言中,函数也是一种类型,可以和其他类型一样被保存在变量中Go语言支持匿名函数,即在需要使用函数时,再定义函数,匿名函数没有函数名,只有函数体,函数可以被作为一种类型被赋值给函数类型的变量,匿名函数也往往以变量方式被传递匿名函数可以在声明后调用,例如:匿名函数体可以被赋值,例如:使用时再定义匿名函数,不使用先在被调用函数里面进行声明,这就是回调精髓所有参数都是可变参数:fmt.Printlnfmt.Println在使用时,传入的值类型不受限制,例如:当可变参数为interface{}类型时,可以传入任何类型的值部分参数是可变参数:fmt.Printffmt.Printf的第一个参数为参数列表,后面的参数是可变参数:闭包可以理解成定义在函数内部的一个函数。本质上,闭包是函数内部和函数外部连接起来的桥梁。简单来说,闭包=函数+引用环境defer语句将其后面跟随的语句进行延迟处理,被defer的语句按先进后出的方式执行(最先defer的语句最后执行,后被defer的语句先执行)。特性:关键字defer用于注册延迟调用直到调用return之前才执行(故可用来作资源清理)多个defer语句,FILO方式执行defer中的变量,在defer声明时就定义了用途:关闭文件句柄锁资源释放数据库连接释放Go语言的错误处理思想及设计包含以下特征:一个可能造成错误的函数,需要返回值中返回一个错误接口(error)。如果调用是成功的,错误接口将返回nil,否则返回错误。在函数调用后需要检查错误,如果发生错误,进行必要的错误处理。错误接口的定义格式error是Go系统声明的接口类型,代码如下:所有符合Error() string格式的接口都能实现错误接口。定义一个错误在Go语言中,使用errors包进行错误的定义,格式如下:错误字符串由于相对固定,一般在包作用域声明,应尽量减少在使用时直接使用errors.New返回。宕机(panic)——程序终止运行手动触发宕机Go语言可以在程序中手动触发宕机,让程序崩溃,这样开发者可以及时地发现错误,同时减少可能的损失。Go语言程序在宕机时,会将堆栈和goroutine信息输出到控制台,所以宕机也可以方便地知晓发生错误的位置。panic()的参数可以是任意类型,当panic()触发的宕机发生时,panic()后面的代码将不会被运行,但是在panic()函数前面已经运行过的defer语句依然会在宕机发生时发生作用,无论是代码运行错误由Runtime层抛出的panic崩溃,还是主动触发的panic崩溃,都可以配合defer和recover实现错误捕捉和恢复,让代码在发生崩溃后允许继续运行。Go没有异常系统,其使用panic触发宕机类似于其他语言的抛出异常,那么recover的宕机恢复机制就对应try/catch机制。panic和recover的关系:有panic没recover,程序宕机。有panic也有recover捕获,程序不会宕机。执行完对应的defer后,从宕机点退出当前函数后继续执行。提示:虽然panic/recover能模拟其他语言的异常机制,但并不建议代表编写普通函数也经常性使用这种特性。结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。字段有以下特性:字段拥有自己的类型和值。字段名必须唯一。字段的类型也可以是结构体,甚至是字段所在结构体的类型。Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言的结构体与“类”都是复合结构体,但Go语言中结构体的内嵌配合接口比面向对象具有更高的扩展性和灵活性。Go语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法。基本形式:结构体的定义只是一种内存布局的描述,只有当结构体实例免费云主机域名化时,才会真正地分配内存创建指针类型的结构体:取结构体的地址实例化:使用键值对填充结构体:Go语言中的方法(Method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收器(Receiver)。如果将特定类型理解为结构体或“类”时,接收器的概念就类似于其他语言中的this或者self。创建一个背包Bag结构体为其定义把物品放入背包的方法insert(b*Bag)表示接收器,即Insert作用的对象实例。每个方法只能有一个接收器。接收器是方法作用的目标接收器根据接收器的类型可分:指针接收器非指针接收器两种接收器在使用时会产生不同的效果。根据效果的不同,两种接收器会被用于不同性能和功能要求的代码中。由于指针的特性,调用方法时,修改接收器指针的任意成员变量,在方法结束后,修改都是有效的。当方法作用于非指针接收器时,Go语言会在代码运行时将接收器的值复制一份。在非指针接收器的方法中可以获取接收器的成员值,但修改后无效指针接收器和非指针接收器的使用:指针和非指针接收器的使用在计算机中,小对象由于值复制时的速度较快,所以适合使用非指针接收器。大对象因为复制性能较低,适合使用指针接收器,在接收器和参数间传递时不进行复制,只是传递指针。接口是双方约定的一种合作协议。接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节。接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式、类型及结构。Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有字符串功能的接口叫Stringer,有关闭功能的接口叫Closer等方法名:当方法名首字母是大写时,且这个接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问。io包中提供的Writer接口:实现接口的条件:接口的方法与实现接口的类型方法格式一致接口中所有方法均被实现例:为了抽象数据写入的过程,定义Data Writer接口来描述数据写入需要实现的方法。Go语言的接口实现是隐式的,无须让实现接口的类型写出实现了哪些接口。这个设计被称为非侵入式设计。“Go语言函数、结构体、方法和接口怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: vue3中cookie如何使用

本篇内容主要讲解“vue3中cookie如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就免费云主机域名让小编来带大家学习“vue3中cookie如何使用”吧!cookie使用最多的地方想必是保存用户的账号与密码,可以避免用户每次…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/06 18:02
Next 05/06 18:17

相关推荐