package main
import "fmt"
func cal(num1 int,num2 int) (int){
return num1+num2
}
func cal2(num1 int,num2 int) int{ //一个参数可以省略返回列表的括号
return num1+num2
}
func cal3(num1 int,num2 int) {//没有返回类型可以省略返回类型和括号
fmt.Printf("%v\n", num1+num2)
}
func cal4(num1 int,num2 int) (){//没有返回类型可以省略返回类型和括号
fmt.Printf("%v\n", num1+num2)
}
func Cal5(num1 int,num2 int) (){//驼峰命名,如果首字母大写相当于public.小写相当于 protected 只能包内使用
fmt.Printf("%v\n", num1+num2)
}
func Cal6(num1 int,num2 int) (int,int){//可以返回多个结果
return num1+num2,num1-num2
}
func Cal7(num1 int,num2 int) (sum int,sub int){//对函数返回类型进行命名
sum = num1 + num2
sub = num1 - num2
return
}
func ExchangeByValue(num1 int,num2 int) (){//函数不支持重载,即函数名相同
var temp int =num1
num1=num2
num2=temp
}
func ExchangeByRef(num1 *int,num2 *int) (){
var temp int =0
temp =*num1
*num1=*num2
*num2=temp
}
func dynamicFunc(args...int){
for i:=0;i<len(args);i++{
fmt.Printf("%v\t",args[i])
}
}
func add( a int,b int) (int) {
return a+b
}
func sub( a int,b int) (int) {
return a+b
}
func calByFunc(a int,b int ,ff func(int,int) (int)) (int){
return ff(a,b)
}
//定义函数类型
type funType func(int,int) (int)
//应用函数类型
func calByFunc2(a int,b int ,ff funType) (int){
return ff(a,b)
}
func main(){
fmt.Printf("%v+%v=%v\n",10,30,cal(10,30))
var a int =10
var b int =20
fmt.Printf("%v+%v=%v\n",a,b,cal(a,b))
sum:=cal(a,b)
fmt.Printf("%v\n",sum)
sum1:=cal2(a,b)
fmt.Printf("%v\n",sum1)
cal3(a,b)
cal4(a,b)
sum6,sub6:=Cal6(50,30)
fmt.Printf("%v\t%v\n",sum6,sub6)
sum7,_:=Cal6(50,30) //只关心前面一个返回值,后面的可以用_省略
fmt.Printf("只关心第一个%v\n",sum7)
_,sub7:=Cal6(50,30) //只关心后面一个返回值,前面的可以用_省略
fmt.Printf("只关心前面的:%v\n",sub7)
sum8,sub8 := Cal7(60,20)
fmt.Printf("sum8 %v\t ,sub8 %v\n",sum8,sub8)
var e1 int =10
var e2 int =20
fmt.Printf("原始值 e1 值 :%v \t e2 值: %v\n",e1,e2)
ExchangeByValue(e1,e2)
fmt.Printf("ExchangeByValue e1 值 :%v \t e2 值: %v\n",e1,e2)
ExchangeByRef(&e1,&e2)
fmt.Printf("ExchangeByRef e1 值 :%v \t e2 值: %v\n",e1,e2)
//函数式一种数据类型,可以赋予一个变量
var ff func(*int,*int) () = ExchangeByRef
ff(&e1,&e2)
fmt.Printf("ff e1 值 :%v \t e2 值: %v\n",e1,e2)
f := ExchangeByRef
fmt.Printf("f的类型 :%T \t ExchangeByRef的类型: %T\n",f,ExchangeByRef)
f(&e1,&e2)
fmt.Printf("ExchangeByRef e1 值 :%v \t e2 值: %v\n",e1,e2)
fmt.Println("\n------0-------")
dynamicFunc()
fmt.Println("\n-----1--------")
dynamicFunc(45)
fmt.Println("\n-------4------")
dynamicFunc(34,2,5,3)
var addr int=calByFunc(30,10,add)
var subr int=calByFunc(30,10,sub)
fmt.Printf("\n 函数调用 函数变量 addr :%v \t subr : %v \n ",addr,subr)
addr =calByFunc2(30,10,add)
subr =calByFunc2(30,10,sub)
fmt.Printf("\n 函数调用 函数别名 函数变量 addr :%v \t subr : %v \n ",addr,subr)
//自定义数据类型
type myInt int
var num4 myInt = 70
var num5 int = 10
//num5=num4 //报错,被认为是不同的类型,如果需要转换需要墙砖类型
num5= int(num4) //强转类型
fmt.Printf("myInt num4 类型 :%T \t int num5 类型: %T num5的值 :%v \n",num4,num5,num5) //myInt num4 值 :main.myInt int num5 值: int
num5=30
num4=myInt(num5) //强转类型
fmt.Printf("myInt num4 类型 :%T \t int num5 类型: %T num4的值 :%v \n",num4,num5,num4) //myInt num4 值 :main.myInt int num5 值: int
}
go函数常用模式
于 2023-01-12 02:50:10 首次发布