package main import( "fmt" "strings" "project04/utils" //这个引入包,从环境变量GOPATH或者GOROOT起须要一个src目录; ) type myfunc func(int, int) int //自定义类型myfunc //全局匿名函数 var ( FuncGlobalAnonymous = func(n1 int, n2 int) int { return n1 - n2 } ) func main() { //变量的定义以及switch语句的使用 var num1 float64 = utils.Test(1, 2, '+') var num2 float64 = utils.Test(1, 2, '-') var num3 float64 = utils.Test(1, 2, '*') var num4 float64 = utils.Test(1, 3, '/') var num5 float64 = utils.Test(1, 1, '&') fmt.Println("num1 = ", num1) fmt.Println("num2 = ", num2) fmt.Println("num3 = ", num3) fmt.Printf("num4 = %.2f\r\n", num4) fmt.Println("num5 = ", num5) //函数的使用 sub,sum := getSubAndSum(1, 2) fmt.Printf("sub = %v\r\n", sub) fmt.Printf("sum = %v\r\n", sum) //返回值有两个,第一个值忽略 _,sum = getSubAndSum(2, 2) fmt.Printf("sum = %v\r\n", sum) //测试递归 testRecursion(4);//2,2,3 //for语句的使用 i := 1这种写法自动判断类型; for i := 1; i <= 3; i++ { fmt.Printf("test for i = %d\r\n", i) } //指针类型 var n1 int = 10; testZhizhen(&n1);//传入n1地址 fmt.Printf("testzz n1 = %d\r\n", n1)//n1 为20了; //函数赋值给变量 fval := funcValue; fmt.Printf("fval 类型是%T,funcValue类型是%T\r\n", fval, funcValue) res := fval(1, 3) fmt.Println("res=", res) //函数做为一个参数传递 sub,sum,val := funcParams(fval, 1, 2) fmt.Println("sub=", sub) fmt.Println("sum=", sum) fmt.Println("val=", val) //使用type自定义类型(定义在外围) mytype := funcCustomType(fval, 2, 3) fmt.Println("mytype=", mytype) //可变参数 total := daynamicParams(10, 1, 2, 3, 4, -1) fmt.Println("total=", total) //init 函数,每一个包都有一个init 函数;能够用于初始化一些全局变量,在 main函数以前执行 fmt.Println("name=",utils.Name, ",age=", utils.Age) //匿名函数 test := func(n1 int, n2 int) int { return n1 + n2 }(2, 4) fmt.Println("test=", test) test2 := FuncGlobalAnonymous(3, 2) fmt.Println("test2=", test2) test3 := func(n1 int, n2 int) int { return n1 + n2 } test3Val := test3(1, 2) fmt.Println("test3Val=", test3Val) //闭包 tc := testClosure(); tc(1);//11 tc(1);//12 tc(1);//13 f := testClosure2(".jpg") fmt.Println(f("test1")) fmt.Println(f("test2.jpg")) //defer的应用;主要用于关闭资源(数据库建立连接以后立马用defer关闭,打开文件以后立马用defer关闭) tf := testDefer(10, 11) fmt.Println("tf=", tf); //4 } func funcValue(n1 int, n2 int) int { return n1 + n2 } func testDefer(n1 int, n2 int) int { defer fmt.Println("defer1 n1=", n1)//入栈 3 defer fmt.Println("defer2 n2=", n2)//入栈 2 n1++ n2++ fmt.Println("ok!!!!") //这个最早输出 1 return n1 + n2 } //闭包 func testClosure() func (int) int { var n int = 10 return func (n1 int) int { n = n + n1 fmt.Println("testClosure=", n); return n } } func testClosure2(suff string) func (string) string { return func (name string) string { if !strings.HasSuffix(name, suff) { return name + suff } return name } } ///参数是一个函数, 以及返回值能够定义 func funcParams(funvar func(int, int) int, n1 int, n2 int) (sub int, sum int, val int) { sub = n1 - n2 sum = n1 + n2 val = funvar(n1, n2) return } //使用自定义类型 func funcCustomType(funvar myfunc, n1 int, n2 int) int { return funvar(n1, n2) } func daynamicParams(n1 int, args... int) int { sum := n1 for i := 0; i < len(args); i++ { sum += args[i] } return sum } //函数的定义 func getSubAndSum(n1 int, n2 int) (int, int) { sub := n1 - n2 sum := n1 + n2 return sub, sum } //至关于php中的引用传递 func testZhizhen(n1 *int) { *n1 = *n1 + 10 fmt.Printf("testzz n1 = %d\r\n", *n1) } //递归 func testRecursion(n int) { if (n > 2) { n-- testRecursion(n) } fmt.Println("testRecursion n=", n) }
package utils import "fmt" var Name string var Age int func init() { Name = "wangwu" Age = 20 } func Test(n1 float64, n2 float64, operate byte) float64 { var res float64 switch operate { case '+': res = n1 + n2 break; case '-': res = n1 - n2 break case '*': res = n1 * n2 break case '/': res = n1 / n2 break default: fmt.Printf("操做符有误 %v\r\n", operate) } return res }