Go 语言入门指南(3):基础语法和常用特性解析| 青训营

63 阅读2分钟

九.函数

在Go语言中,函数是一种非常重要的概念,因为它可以将代码组织成可重用的逻辑单元。本篇文章将详细介绍Go语言函数的各种特性和用法,包括函数定义、参数传递、返回值、作用域、闭包、defer语句和函数类型等。 结构 在Go语言中,使用关键字func定义函数。函数名和参数列表放在括号中,函数体放在花括号内。

func 函数名(参数)
{
数据定义
方法
return ...
}

举例 实现两个变量相加的函数。

Go语言和其他很多语言不一样的是,变量类型是后置的。

Go里面的函数原生支持返回多个值。在实际的业务逻辑代码里面几乎所有的函数都返回两个值,第一个是真正的返回结果,第二个值是一个错误信息。

func add(a  int , b int) int ,err 
{//a int , b int == a , b int俩种方式都一样
	return a + b		//后面的是返回值
}
func add(a , b int)(int , error){ //可返回多个值
	return a + b , nil
}

func Tmp(a , b int){
	func() int {//还可以在函数内部定义一个匿名函数,类似别的语言lambda函数
		return 5
	}()//加上()表示直接调用
}

函数的参数传递

在Go语言中,函数参数可以是值参数或引用参数。值参数是复制传递,而引用参数是传递指针。

函数的返回值

在Go语言中,使用关键字return返回一个或多个值。如果函数没有返回值,则可以省略return语句。

十.指针

定义:指针存储的是数据的地址

Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。

指针数组

func main(){
	var list = [3] int {1,2,3}
	var str [3] *int
	for i := 0; i < 3; i++{
		str[i]  = &list[i]
	}
	for i := 0; i < 3; i++{
		fmt.Println(*str[i])
	}
}

指针使用流程

  • 定义指针变量。
  • 为指针变量赋值。
  • 访问指针变量中指向地址的值。

在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。

Go 空指针

当一个指针被定义后没有分配到任何变量时,它的值为 nil。

nil 指针也称为空指针。

nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。

一个指针变量通常缩写为 ptr。

十一.结构体

结构体是一种用户自定义的数据类型,它由一组字段组成,每个字段可以是任意基本类型或其他结构体类型。结构体在Go语言中被广泛使用,它可以用来表示复杂的数据结构,比如二叉树、链表、图等。

定义结构体

func main(){
	type student struct{
		name string
		age int
		address string
	}
	stu1 := student{"jack", 15, "西安"}
	stu2 := student{name: "jack", age: 15, address: "西安"}
	fmt.Println(stu1.name)
	fmt.Println(stu2.name)
}

结构体函数

与相比其他语言,结构体成员函数是在外面定义的

type person struct {
	name, city string
	age        int8
}
//	(接收者变量 接收者类型) 方法名(参数列表) (返回参数)
//	不可修改成员的值
// 方法与函数的区别是,函数不属于任何类型,方法属于特定的类型。
func (p person) Dream() { 
	fmt.Printf("%s的梦想是学好Go语言!\n", p.name)
}
// 可修改成员的值
func (p *person) SetAge(newAge int8) {
	p.age = newAge
}

结构体作为函数参数

func show_Student(stu Student){
	if stu != (Student{}){
		fmt.Println("学生的姓名是:",stu.name)
		fmt.Println("学生的年龄是:",stu.age)
		fmt.Println("学生的地址是:",stu.address)
	}
}
func main(){

	var stu3 Student
	stu3 = Student{"jack", 23, "西安"}
	show_Student(stu3)
}

结构体的访问

在Go语言中,我们可以通过结构体变量的字段名来访问结构体中的成员。

结构体的方法

Go语言中的结构体还支持方法,方法是一种特殊的函数,它可以与结构体类型关联。方法与函数的区别在于,方法必须在结构体类型上定义,而函数可以在任何地方定义。另外,方法可以访问结构体的成员,而函数只能访问其参数。

十二.错误处理

errors.New()和panic //自定义错误

func test(){
	defer func() {
		err := recover() //recover内置函数,可以捕获到异常
		if err != nil{  //说明捕获到异常
			fmt.Println("err=", err)
		}
	}()
	num1 := 10
	num2 := 0
	result := num1/ num2
	fmt.Println(result)
	fmt.Println("执行到这里了")
}
func main() {
	test()
	fmt.Println("执行到这里了")
}