go学习part5(1)

本章进行函数学习

1.函数基本规范

如果返回值列表只有一个,可以省略括号。如果没有返回值,返回值类型可以不写。

(1)格式:

 func  函数名(形参列表)  (返回值类型列表){

        return 返回值列表

    }

package main

import "fmt"

/*
如果返回值列表只有一个,可以省略括号
格式
	func  函数名(形参列表)  (返回值类型列表){
		return 返回值列表
	}

*/
func cal2(num1 int) int {
	return num1
}

//函数
func cal(num1 int, num2 int) int {
	return num1 + num2
}

func main() {
	fmt.Println(cal(3, 4))
}

tips:访问控制权之前提到过,通过首字母大小来限定,首字母大写,包外可访问,首字母小写,本包package访问

(2)多返回值和接收 

(3)内存分区

(4)go不支持重载

重载是指函数名相同但是形参列表不同的多个函数,go不支持

(5)可变参数args...

package main

import "fmt"

/*
可变参数符号...
args...int就是任意多int参数
*/

//函数
func test(args ...int) {
	//处理可变参数可以当成切片 args相当于数组
	for i := 0; i < len(args); i++ {
		fmt.Println(args[i])
	}
}

func main() {
	test()
	fmt.Println("------")
	test(3)
	fmt.Println("------")
	test(1, 2, 3, 4)
}

 (6)传参(传值,传指针)

(7)函数类型

package main

import "fmt"

/*
go里变量可以指代一个函数,作为函数类型
也可以作为形参

*/
func test(num int) {
	fmt.Println("01")
}

func test2(Func func(int), num int) {
	fmt.Println("02")
}

func main() {
	a := test ///函数类型,指代该函数
	//a的类型:func(int)  test函数的类型:func(int)
	fmt.Printf("a的类型:%T  test函数的类型:%T", a, test)

	// a等价于test
	a(10) // 相当于test(10)

	//作为参数调用
	test2(test, 10)
	test2(a, 10)
}

(8)类型别名(类似cpp的typedef)

 虽然本质是一个类型,但是改名前后类型的两个变量不能直接相互赋值,系统认为是不同类型,除非强制类型转换

 

(9)函数返回值列表的补充

/* 普通返回*/
func test3(num1 int,num2 int) (int,int){
	sub := num1-num2
	sum := num1+num2
	return sum,sub
}
/* 在返回值列表里相当于已经定义了两个变量,并且固定其作为返回值 */
func test4(num1 int,num2 int) (sum int,sub int){
	sub = num1-num2
	sum = num1+num2
	return
}
package main

import "fmt"

/*
go里变量可以指代一个函数,作为函数类型
也可以作为形参

*/
func test(num int) {
	fmt.Println("01")
}

func test2(Func func(int), num int) {
	fmt.Println("02")
}

/* 普通返回*/
func test3(num1 int,num2 int) (int,int){
	sub := num1-num2
	sum := num1+num2
	return sum,sub
}
/* 在返回值列表里相当于已经定义了两个变量,并且固定其作为返回值 */
func test4(num1 int,num2 int) (sum int,sub int){
	sub = num1-num2
	sum = num1+num2
	return
}


func main() {
	a := test ///函数类型,指代该函数
	//a的类型:func(int)  test函数的类型:func(int)
	fmt.Printf("a的类型:%T  test函数的类型:%T", a, test)

	// a等价于test
	a(10) // 相当于test(10)

	//作为参数调用
	test2(test, 10)
	test2(a, 10)
	
	//
	//var m,b,c,d int
	m,b := test3(2,1)
	c,d := test4(2,1)
	fmt.Println(m,b,c,d)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值