函数
函数是执行特定任务的代码块。函数接受输入,对输入执行一些计算,然后生成输出。
函数声明
在 go 中声明函数的语法是:
func name(parameter) (result-list){
//body
}
函数声明以func关键字开头,后跟name(函数名)。在括号中指定参数,后面为函数返回值result-list。参数和返回类型在函数中是可选的。因此,以下语法也是有效的函数声明。
func name() {
//body
}
单返回值函数
func plus(a, b int) (res int) {
c := a + b
return c
}
func main() {
a, b := 90, 6
sumAll := plus(a, b)
fmt.Println("sum", sumAll)
}
上面程序,函数plus 接受两个 int 类型的值,并返回最终和。输出结果如下:sum 96
多返回值函数
func plus(a, b int) (int, int) {
c := a + b
d := a - b
return c, d
}
func main() {
a, b := 90, 6
sumAll, subAll := plus(a, b)
fmt.Println("sum", sumAll)
fmt.Println("sub", subAll)
}
输出结果如下:
sum 96
sub 84
命名返回值
如果返回值被命名,相当由于在函数的第一行被声明为变量。
func plus(a, b int) (res int) {
res = a + b
return
}
func main() {
a, b := 90, 6
sumAll := plus(a, b)
fmt.Println("sum", sumAll)
}
输出结果如下:sum 96
参数可变函数
func sum(nums ...int) (res int) {
fmt.Println("len of nums is : ", len(nums))
res = 0
for _, v := range nums {
res += v
}
return
}
func main() {
fmt.Println(sum(1))
fmt.Println(sum(1, 2))
fmt.Println(sum(1, 2, 3))
}
输出结果如下:
len of nums is : 1
1
len of nums is : 2
3
len of nums is : 3
6
匿名函数
func main() {
func(name string) {
fmt.Println(name)
}("初辰ge")
}
指针
指针是存储另一个变量的内存地址的变量。
指针的声明
func main() {
a := 255
b := &a
fmt.Println(b)
fmt.Println(*b)
}
& 操作符获取一个变量的指针地址。* 操作符获取指针地址的值。程序的输出为:
0xc00000a0d8
255
结构体
结构体是由零个或多个任意类型的值聚合成的实体,它可以用于将数据分组为一个单元而不是将它们中的每一个作为单独的值。
声明结构体
用关键字 type 和 struct 用来定义结构体,语法如下:
type StructName struct{
FieldName type
}
声明结构体并赋值
type Student struct {
age int
name string
}
func main() {
stu := Student{
age: 18,
name: "初辰ge",
}
fmt.Println(stu)
}
上述代码输出如下:
{18 初辰ge}
获取结构的各个字段
点.
运算符用于访问结构的各个字段。
type Student struct {
age int
name string
}
func main() {
stu := Student{
age: 18,
name: "初辰ge",
}
fmt.Println(stu.name)
}
上述代码输出如下:
初辰ge
嵌套结构体
一个结构可能包含一个字段,而该字段又是一个结构。这些类型的结构称为嵌套结构。
type Student struct {
age int
name string
dog Dog
}
type Dog struct {
age int
name string
}
func main() {
stu := Student{
age: 18,
name: "初辰ge",
dog: Dog{
age: 2,
name: "小白",
},
}
fmt.Println(stu.dog.name)
}
上述代码输出如下:
小白