package mainimport ( "fmt" "math" "math/rand" "time" "example.com/go-demo-01/mascot")/* 函数外的每个语句都必须用var 或者 func 来开头 但是在函数体内 可以用 := 在类型明确的地方代替 var 赋值 用 var 时候,初始化值已存在时可以省略类型*/var c, java, python boolvar i, j int = 0, 1 //初始化值已存在,可以省略类型 或者可以理解成从右值来推导出来/* Go 的基本数据类型--int,uint,uintptr 看机器来定宽度 bool string int int8 16 32(rune,表示一个Unicode码点) 64 unit unit8(byte) 16 32 64 unitptr float32 64 // 没float这个写法 complex64 complex128*/func main() { /* 在其他包下的方法名必须大写才能够调用 */ fmt.Println(mascot.BestMasco()) fmt.Println(rand.Intn(10)) fmt.Println(mascot.Add(10, 20)) /* 多值返回 */ a, b := mascot.Exchange("hello", "world") fmt.Println(a, b) fmt.Println(mascot.Split(10)) fmt.Println(split(20)) //试了一下该包下的方法 var i int var j int = 5 k := 1 /* 强制转换 */ var x, y = 3, 4 var f float64 = 1.32342 fmt.Println(float64(f)) // fmt.Println(math.Sqrt(float64(x*x + y*y))) /* for 循环 */ for i := 0; i < 3; i++ { x += i } fmt.Println("最后的值为:", x) /* for循环可以缺省 缺省的值必然在前面有过定义,所以作用域是全局的 */ var sum = 1 for x < 8 { sum += x x++ } fmt.Println("缺省for循环的值为:", sum) /* go中的while循环 */ for sum < 100 { sum += sum } fmt.Println("while中的sum", sum) /* 无限循环.. */ // for{ // } /* 条件分支 */ if sum == 128 { fmt.Println("yes,it is 128.") } /* 条件分支还能像for一样定义一个临时变量 */ if temp := 1; temp < sum { fmt.Println(temp + sum) } /* 带else的条件分支 */ fmt.Println("test", pow(3, 2, 10), pow(3, 3, 20), ) /* 牛顿迭代法的题目 */ /* 关于defer 调用栈 */ defer fmt.Println(i, c, java, python, j) // defer 最后调用 且能看出 数值类型,布尔类型,字符串类型的默认赋值 defer fmt.Println(k + k) //倒数第二个被调用,且因为k是形参,所以下面的k*3对其不影响 defer fmt.Println(k * 3) // 测试switch t := time.Now() switch { case t.Hour() < 12: fmt.Println("Morning") case t.Hour() < 18: fmt.Println("Afternoon") default: fmt.Println("Evening") } /* 没有条件的switch */ switch { case t.Hour() < 12: fmt.Println("上午") case t.Hour() < 18: fmt.Println("下午") default: fmt.Println("晚上") }}func split(sum int) (x, y int) { x = sum * 2 y = x - sum return}func pow(x, n, lim float64) float64 { if v := math.Pow(x, n); v < lim { return v } else { fmt.Printf("%g >= %g \n", v, lim) //这个地方为什么不能放到其他 } return lim}