脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - 一文了解Go语言中的函数与方法的用法

一文了解Go语言中的函数与方法的用法

2022-07-05 14:08孙琦Ray Golang

与大部分语言一致,Go语言中的函数与方法定义与其他语言基本一致,但也有一定的差别。本文将通过示例详细讲讲Go语言中函数与方法的用法,感兴趣的可以学习一下

函数定义语法

与大部分语言一致,Go语言中的函数定义与其他语言基本一致

?
1
2
3
4
5
6
7
8
9
10
11
func function_name(Parameter-list) {
    // function body...
}
 
func function_name(Parameter-list) Return-Type {
    // function body...
}
 
func function_name(Parameter-list) (Multiple Return-Types){
    // function body..
}

func: 函数定义关键字

function_name: 函数名称,Go语言主要使用camel-case(驼峰)命名的方式,还根据函数的性质,用首字母大小写区分作用,具体会在后面专门的章节讲解Go语言的规范

Parameter-list: 参数列表,如果没有可以忽略

Return-Type/Multiple Return-Types: 返回值的类型,即return返回值的类型,这里特别将三种形式进行了区分:

  • 无返回值/单一返回值/多返回值
  • 另外两种的细小的区别在于括号的使用,单一返回类型一般不再添加括号,而多返回值则需要添加括号
  • 另外为了美观,参数列表后面的括号,建议与返回类型之间有一个空格

函数定义示例

无返回值函数

?
1
2
3
func HelloFunc() {
    fmt.Println("Hello, World")
}

单一返回值函数

本示例中演示了参数定义方法和返回值类型定义方法

?
1
2
3
func HelloFunc(msg string) string {
    return "Hello, " + msg
}

多返回值函数

第二个返回值的类型通常用于回传错误,这样方便程序进行异常处理

?
1
2
3
func HelloFunc(msg string) (string, error) {
    return "Hello, " + msg, nil
}

我们再来看一下完整的代码实现,主函数中调用HelloFunc时,也需要两个变量接收相应的值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main
 
import "fmt"
 
func HelloFunc(msg string) (string, error) {
    return "Hello, " + msg, nil
}
 
func main() {
    printString, err := HelloFunc("World")
    if err == nil {
        fmt.Println(printString)
    }
}

方法(Method)定义

Go语言中并没有类,所以在Go语言中提供了一种类似函数定义的方法定义,通过在函数名称前增加Reciever类型,实现一种类似类中方法的定义,方法可以使用Reciver的属性。我们来看一下语法:

?
1
2
3
func (Reciever-Name Type) function_name(Parameter-list) (Multiple Return-Types){
    // function body..
}

由于大部分定义内容与上述函数定义相同,这里就不再赘述,只介绍一下新增的部分:

Reciever-Name:类型必须是自定义类型,不能是内置的int, string等,使用的话,在编译阶段就会报错

方法(Method)示例

基本类型

我们来看一个通过基本类型实现的方法,这里使用到了一个未曾学习到的知识点——自定义类型type,后面还会详细讲解,不用在此处纠结。这句含义就是通过自定义类型mystring再次定义的变量,本质上与string同一类型。

?
1
type mystring string

这里注意我们的函数定义,在函数名前,多了(msg mystring)的定义,而在函数体内,我们也可以直接使用msg

?
1
2
3
4
func (msg mystring) HelloFunc() {
    str := "Hello, " + msg
    fmt.Println(str)
}

而在main函数中进行调用时,与上面的函数调用不同,我们直接使用调用mymsg的方法HelloFunc,实现了与上面例子类似的方法

?
1
2
3
var mymsg mystring
mymsg = "World"
mymsg.HelloFunc()

完整代码如下所示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import "fmt"
 
type mystring string
 
func (msg mystring) HelloFunc() {
    str := "Hello, " + msg
    fmt.Println(str)
}
 
func main() {
    var mymsg mystring
    mymsg = "World"
    mymsg.HelloFunc()
}

结构体类型

其实从各个项目的源代码来看,方法还是更多的与结构体(struct)和接口(interface)一起使用,这些都会在后面进行详细讲解,这里只需要了解即可。这里介绍一个简单的例子,我们来计算长方形的面积。

  • 定义了一个结构体rect,其中包含长和宽两个属性
  • 计算面积的方法area(),Reciver定义为结构体类型,这样方法体内,就可以使用长和宽计算面积
  • 主函数中,定义了一个结构体,并且初始化长和宽分别为3和4
  • 调用自定义结构体的r.area()完成面积计算
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
 
import "fmt"
 
type rect struct {
    width float64
    height float64
}
 
func (r rect) area() float64 {
    return r.width * r.height
}
 
func main() {
    r := rect{3, 4}
    rectArea := r.area()
    fmt.Printf("Rect area is %v\n", rectArea)
}

到此这篇关于一文了解Go语言中的函数与方法的用法的文章就介绍到这了,更多相关Go语言 函数 方法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/xiaoquqi/article/details/125592623

延伸 · 阅读

精彩推荐
  • GolangGo html/template 模板的使用实例详解

    Go html/template 模板的使用实例详解

    这篇文章主要介绍了Go html/template 模板的使用实例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    big_cat5362020-05-25
  • Golang详解golang开发中select多路选择

    详解golang开发中select多路选择

    这篇文章主要介绍了golang开发中select多路选择,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参...

    二十四桥明月夜335332020-09-27
  • Golang使用go的interface案例实现多态范式操作

    使用go的interface案例实现多态范式操作

    这篇文章主要介绍了使用go的interface案例实现多态范式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    涛歌依旧5022021-03-19
  • GolangGo语言快速入门图文教程

    Go语言快速入门图文教程

    Go是 Goolge 开发的一种静态型、编译型、并发型,并具有垃圾回收功能的语言,Go 语言上手非常容易,它的风格类似于 C 语言,Go 语言号称是互联网时代的...

    异常编程3992021-06-26
  • GolangGo 使用Unmarshal将json赋给struct出错的原因及解决

    Go 使用Unmarshal将json赋给struct出错的原因及解决

    这篇文章主要介绍了Go 使用Unmarshal将json赋给struct出错的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    y思无邪11342021-04-21
  • GolangGo并发编程中sync/errGroup的使用

    Go并发编程中sync/errGroup的使用

    本文主要介绍了Go并发编程中sync/errGroup的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    深度思维者7592022-01-22
  • Golang浅谈golang类型断言,失败类型断言返回值问题

    浅谈golang类型断言,失败类型断言返回值问题

    这篇文章主要介绍了浅谈golang类型断言,失败类型断言返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    ehooww11952021-03-18
  • GolangGolang中数据结构Queue的实现方法详解

    Golang中数据结构Queue的实现方法详解

    这篇文章主要给大家介绍了关于Golang中数据结构Queue的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    脚本之家4052020-05-09