前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >09.Go语言-函数

09.Go语言-函数

原创
作者头像
面向加薪学习
发布2022-09-04 10:23:18
3720
发布2022-09-04 10:23:18
举报
文章被收录于专栏:面向加薪学习面向加薪学习

第 9 章 函数

函数 是基于功能或逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。由于 Go 语言是编译型语言,所以函数编写的顺序是无关紧要的。

9.1 函数的声明

在 Go 语言中,函数声明语法如下:

代码语言:go
复制
func function_name(parameter_list) (result_list) {
    //函数体
}

函数的声明使用 func 关键词,后面依次接 function_name(函数名)parameter_list(参数列表)result_list(返回值列表) 以及 函数体

  • 形式参数列表:函数的参数名以及参数类型,这些参数作为局部变量,其值由参数调用者提供,函数中的参数列表和返回值并非是必须的。
  • 返回值列表:函数返回值的变量名以及类型,如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。
  • 如果有连续若干个参数的类型一致,那么只需在最后一个参数后添加该类型。
代码语言:go
复制
package main

import "fmt"

// 函数返回一个无名变量,返回值列表的括号省略
func sum(x int, y int) int {
	return x + y
}

// 无参数列表和返回值
func printBookName() {
	fmt.Println("《Go语言极简一本通》")
}

// 参数的类型一致,只在最后一个参数后添加该类型
func sub(x , y int) int {
	return x - y
}

func main() {
	fmt.Println("56 + 1 = ", sum(56, 1))
	printBookName()
	fmt.Println("58 - 2 =", sub(58, 2))
}

9.2 可变参数

上面的程序参数个数都是固定的,在 Go 语言 中也可以使用可变参数的函数。

9.2.1 多个类型一致的参数

在参数类型前面加 ... 表示一个切片,用来接收调用者传入的参数。注意,如果该函数下有其他类型的参数,这些其他参数必须放在参数列表的前面,切片必须放在最后。

代码语言:go
复制
package main

import "fmt"

func show(args ...string) int {
	sum := 0
	for _, item := range args {
        fmt.Println(item)
		sum += 1
	}
	return sum
}

func main() {
	fmt.Println(show("Go语言极简一本通","Go语言微服务架构核心22讲","从0到Go语言微服务架构师"))
}

9.2.2 多个类型不一致的参数

如果传多个参数的类型都不一样,可以指定类型为 ...interface{} ,然后再遍历。

代码语言:go
复制
package main

import "fmt"

func PrintType(args ...interface{}) {
	for _, arg := range args {
		switch arg.(type) {
		case int:
			fmt.Println(arg, "type is int.")
		case string:
			fmt.Println(arg, "type is string.")
		case float64:
			fmt.Println(arg, "type is float64.")
		default:
			fmt.Println(arg, "is an unknown type.")
		}
	}
}

func main() {
	PrintType(57, 3.14, "从0到Go语言微服务架构师")
}

9.3 解序列

使用 ... 可以用来解序列,能将函数的可变参数(即切片)一个一个取出来,传递给另一个可变参数的函数,而不是传递可变参数变量本身。

代码语言:go
复制
package main

import "fmt"

func main() {
	var s []string
	s = append(s, []string{"Go语言极简一本通", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"}...)
	fmt.Println(s)
}

9.4 函数的返回值

当函数没有返回值时,函数体可以使用 return 语句返回。在 Go 中一个函数可以返回多个值。

代码语言:go
复制
package main

import "fmt"

func showBookInfo(bookName, authorName string) (string, error) {
	if bookName == "" {
		return "", errors.New("图书名称为空")
	}
	if authorName == "" {
		return "", errors.New("作者名称为空")
	}
	return bookName + ",作者:" + authorName, nil
}

func main() {
	bookInfo, err := showBookInfo("《Go语言极简一本通》", "欢喜")
	fmt.Printf("bookInfo = %s, err = %v", bookInfo, err)
}

当然,在 Go 中支持返回带有变量名的值。可以将上面的函数修改如下:

代码语言:go
复制
func showBookInfo2(bookName, authorName string) (info string, err error) {
	info = ""
	if bookName == "" {
		err = errors.New("图书名称为空")
		return
	}
	if authorName == "" {
		err = errors.New("作者名称为空")
		return
	}
    // 不使用 := 因为已经在返回值那里声明了
	info = bookName + ",作者:" + authorName
  	// 直接返回即可
	return
}

9.5 匿名函数

没有名字的函数就叫 匿名函数 ,它只有函数逻辑体,而没有函数名。匿名函数只拥有短暂的生命,一般都是定义后立即使用。

代码语言:go
复制
func (parameter_list) (result_list) {
	body
}

9.6 内部方法与外部方法

在 Go 语言中,函数名通过首字母大小写实现控制对方法的访问权限。

  • 当方法的首字母为 大写 时,这个方法对于 所有包 都是 Public ,其他包可以随意调用。
  • 当方法的首字母为 小写 时,这个方法是 Private ,其他包是无法访问的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第 9 章 函数
    • 9.1 函数的声明
      • 9.2 可变参数
        • 9.2.1 多个类型一致的参数
        • 9.2.2 多个类型不一致的参数
      • 9.3 解序列
        • 9.4 函数的返回值
          • 9.5 匿名函数
            • 9.6 内部方法与外部方法
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档