4

Go 学习笔记5-Go函数

 1 year ago
source link: https://codeshellme.github.io/2022/06/go5/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

函数在 Go 语言中属于“一等公民”,拥有“一等公民”待遇的语法元素可以存储在变量中,可以作为参数传递给函数,可以在函数内部创建并可以作为返回值从函数返回。

1,函数的定义

Go 函数样式:

在这里插入图片描述

函数的变量声明形式:

在这里插入图片描述

在 Go 语言中,每个函数声明所定义的函数,仅仅是对应的函数类型的一个实例,即函数也是变量,函数名就是变量名,等号后边就是对应的函数的类型。

比如上面函数的类型就是:

func(io.Writer, string, ...interface{}) (int, error)

... 是 Go 中的变长参数变长参数是通过切片来实现的。所以,在函数体中,就可以使用切片支持的所有操作来操作变长参数

Go 语言支持函数多返回值:

func foo() // 无返回值
func foo() error // 仅有一个返回值
func foo() (int, string, error) // 有 2 或 2 个以上返回值
func foo() func() // 函数的返回值类型是一个函数
func foo(func()) // 函数的参数类型是一个函数

函数返回值可以声明变量名,这种带有名字的返回值被称为具名返回值,其可以像函数体中声明的局部变量一样在函数体内使用。

Go 标准库以及大多数项目代码中的函数,都选择了使用普通的非具名返回值形式。但在一些特定场景下,具名返回值也会得到应用。

比如,当函数的返回值个数较多时,每次显式使用 return 语句时都会接一长串返回值,这时,我们用具名返回值可以让函数实现的可读性更好一些。

基于函数自定义类型

// $GOROOT/src/net/http/server.go
type HandlerFunc func(ResponseWriter, *Request)
// $GOROOT/src/sort/genzfunc.go
type visitFunc func(ast.Node) ast.Visitor

2,设计健壮函数的三原则

  • 不要相信任何外部输入的参数:对输入做合法性校验
  • 不要忽略任何一个错误:判断每一个调用的返回值
  • 不要假定异常不会发生:对可能发生异常的地方做异常处理

3,fmt.Print 函数

format 分类:

format 含义
一般类型
%v 值的默认格式,输出结构体
%+v 输出结构体显示字段名
%#v 输出结构体源代码片段
%T 输出值的类型
布尔类型
%t 输出布尔类型值
整数类型
%b 输出标准的二进制格式化
%c 输出对应的unicode码的一个字符
%d 输出标准的十进制格式化
%o 输出标准的八进制格式化
%q 要输出的值是双引号输出就是双引号字符串;另外一种是自转义的 unicode 单引号字符
%x 输出十六进制编码,字母形式为小写 a-f
%X 输出十六进制编码,字母形式为大写 A-F
%U 输出Unicode格式
浮点数与复数
%b 无小数部分、二进制指数的科学计数法
%e 科学计数法(小写e)
%E 科学计数法(小写E)
%f 十进制小数
%F 和 %f 一样
%g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
%G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)
字符串和 []byte
%s 输出字符串
%q 源代码中那样带有双引号的输出
%x 每个字节用两字符十六进制数表示(使用a-f)
%X 每个字节用两字符十六进制数表示(使用A-F)
指针
%p 输出十六进制,并加上前导的 0x

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK