go语言学习(八、函数和方法)

函数是基本的代码块,用于执行一个任务

函数定义
func:函数由 func 开始声明
function_name:函数名称,函数名和参数列表一起构成了函数签名。
parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
函数体:函数定义的代码集合

func function_name( [parameter list] ) [return_types] {
   函数体
}
package main

import "fmt"

func main() {
	// 调用普通函数
	fmt.Println(swapString("大熊", "犀利的"))
	// 值传递 输出 1 0
	a := 0
	fmt.Println(add(a))
	fmt.Println(a)
	// 引用传递 输出1 1
	fmt.Println(add2(&a))
	fmt.Println(a)
	// 函数作为值传递
	fmt.Println(testFunctionParam(a, add))
	// 闭包函数 输出1 1 2 2
	cl1 := testClosure()
	cl2 := testClosure()
	fmt.Println(cl1())
	fmt.Println(cl2())
	fmt.Println(cl1())
	fmt.Println(cl2())
}

// 方法名swapString 接收两个参数 str1 str2
// 函数体是对两个字符做了反转操作 返回两个返回值
func swapString(str1, str2 string) (string, string) {
	return str2, str1
}

/*
函数参数可以使用值传递、引用传递两种方式
*/
// 值传递 在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
func add(int1 int) int {
	int1++
	return int1
}

// 引用传递
func add2(int2 *int) int {
	*int2++ // 该内存地址里的值 ++
	return *int2
}

/*
函数用法
*/
// 函数作为另外一个函数的参数
// 先声明一个函数类型
type fu func(int) int

// 该方法接收fu类型的参数
func testFunctionParam(a int, f fu) int {
	return f(a)
}

// 闭包函数
func testClosure() func() int {
	i := 0
	return func() int {
		i++
		return i
	}
}

方法 就是一个包含了接受者的函数

方法定义
一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。语法格式如下:(类似于java和php的类中的方法)

func (variable_name variable_data_type) function_name() [return_type]{
   /* 函数体*/
}
package main

import "fmt"

type Circle struct {
	radius float64
}

func main() {
	var cc1 Circle
	cc1.radius = 10.0
	fmt.Println(cc1.getArea())
}

// 方法声明 增加接受者定义 也就是方法属于哪个结构体
// go没有面向对象 struct就是其实现oop的方式
func (c Circle) getArea() float64 {
	return c.radius * c.radius * 3.14
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章