Skip to content

函数

  • 函数是一块执行特定任务的代码。

格式

  • func functionName()
go
func functionName(){

}

参数

无参数

  • 无参数函数,不需要在函数名后面添加参数列表。
go
func test1() {

}

固定参数

  • 设置固定的参数
go

//可以传多个参数 必须指定类型
func test1(a int, b int) {

}

可变参数

  • 可变参数函数,参数数量是可变的。
  • 可变参数只能在最后一位
go
func test2(a int, b ...int) {

}

函数选项

  • 函数参数可以是命名参数,也可以是位置参数。
go

// 定义 结构体
type Person struct {
	Name string
	Age  int
	Sex  string
}

// 已定义 选项函数 类型
type Options func(*Person)

// 定义 选项函数
func WithName(name string) Options {
	return func(p *Person) {
		p.Name = name
	}
}

// 定义 选项函数
func WithAge(age int) Options {
	return func(p *Person) {
		p.Age = age
	}
}
// 定义 选项函数
func WithSex(sex string) Options {
	return func(p *Person) {
		p.Sex = sex
	}
}

func NewPerson(opts ...Options) *Person {
	p := &Person{}
	for _, opt := range opts {
		opt(p)
	}
	return p
}

func main() {
	p := NewPerson(WithName("张三"), WithAge(18), WithSex("男"))
	fmt.Println(p)
}

返回值

  • 函数可以返回一个或多个值。
go
func test3(a int, b int) (int, error) {
	return a + b, nil
}

特殊函数init

  • init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等。
  • 每个包可以拥有多个init函数
  • 包的每个源文件也可以拥有多个init函数
  • init函数不能被其他函数调用,而是在main函数执行之前,自动被调用
go
func init (){
    // 干一些初始化操作
}

特殊函数main

go
// 程序默认入口函数, 每个程序只能有一个main函数
func main (){

}

注意事项

  • 首字母小写的函数,只能本包使用。
  • 首字母大写的函数,其他包能使用。