1. package main
    2. import (
    3. "fmt"
    4. "math"
    5. "math/rand"
    6. "time"
    7. "example.com/go-demo-01/mascot"
    8. )
    9. /*
    10. 函数外的每个语句都必须用var 或者 func 来开头
    11. 但是在函数体内 可以用 := 在类型明确的地方代替 var 赋值
    12. 用 var 时候,初始化值已存在时可以省略类型
    13. */
    14. var c, java, python bool
    15. var i, j int = 0, 1 //初始化值已存在,可以省略类型 或者可以理解成从右值来推导出来
    16. /*
    17. Go 的基本数据类型--int,uint,uintptr 看机器来定宽度
    18. bool
    19. string
    20. int int8 16 32(rune,表示一个Unicode码点) 64
    21. unit unit8(byte) 16 32 64
    22. unitptr
    23. float32 64 // 没float这个写法
    24. complex64 complex128
    25. */
    26. func main() {
    27. /*
    28. 在其他包下的方法名必须大写才能够调用
    29. */
    30. fmt.Println(mascot.BestMasco())
    31. fmt.Println(rand.Intn(10))
    32. fmt.Println(mascot.Add(10, 20))
    33. /*
    34. 多值返回
    35. */
    36. a, b := mascot.Exchange("hello", "world")
    37. fmt.Println(a, b)
    38. fmt.Println(mascot.Split(10))
    39. fmt.Println(split(20)) //试了一下该包下的方法
    40. var i int
    41. var j int = 5
    42. k := 1
    43. /*
    44. 强制转换
    45. */
    46. var x, y = 3, 4
    47. var f float64 = 1.32342
    48. fmt.Println(float64(f)) //
    49. fmt.Println(math.Sqrt(float64(x*x + y*y)))
    50. /*
    51. for 循环
    52. */
    53. for i := 0; i < 3; i++ {
    54. x += i
    55. }
    56. fmt.Println("最后的值为:", x)
    57. /*
    58. for循环可以缺省
    59. 缺省的值必然在前面有过定义,所以作用域是全局的
    60. */
    61. var sum = 1
    62. for x < 8 {
    63. sum += x
    64. x++
    65. }
    66. fmt.Println("缺省for循环的值为:", sum)
    67. /*
    68. go中的while循环
    69. */
    70. for sum < 100 {
    71. sum += sum
    72. }
    73. fmt.Println("while中的sum", sum)
    74. /*
    75. 无限循环..
    76. */
    77. // for{
    78. // }
    79. /*
    80. 条件分支
    81. */
    82. if sum == 128 {
    83. fmt.Println("yes,it is 128.")
    84. }
    85. /*
    86. 条件分支还能像for一样定义一个临时变量
    87. */
    88. if temp := 1; temp < sum {
    89. fmt.Println(temp + sum)
    90. }
    91. /*
    92. 带else的条件分支
    93. */
    94. fmt.Println("test",
    95. pow(3, 2, 10),
    96. pow(3, 3, 20),
    97. )
    98. /*
    99. 牛顿迭代法的题目
    100. */
    101. /*
    102. 关于defer 调用栈
    103. */
    104. defer fmt.Println(i, c, java, python, j) // defer 最后调用 且能看出 数值类型,布尔类型,字符串类型的默认赋值
    105. defer fmt.Println(k + k) //倒数第二个被调用,且因为k是形参,所以下面的k*3对其不影响
    106. defer fmt.Println(k * 3)
    107. // 测试switch
    108. t := time.Now()
    109. switch {
    110. case t.Hour() < 12:
    111. fmt.Println("Morning")
    112. case t.Hour() < 18:
    113. fmt.Println("Afternoon")
    114. default:
    115. fmt.Println("Evening")
    116. }
    117. /*
    118. 没有条件的switch
    119. */
    120. switch {
    121. case t.Hour() < 12:
    122. fmt.Println("上午")
    123. case t.Hour() < 18:
    124. fmt.Println("下午")
    125. default:
    126. fmt.Println("晚上")
    127. }
    128. }
    129. func split(sum int) (x, y int) {
    130. x = sum * 2
    131. y = x - sum
    132. return
    133. }
    134. func pow(x, n, lim float64) float64 {
    135. if v := math.Pow(x, n); v < lim {
    136. return v
    137. } else {
    138. fmt.Printf("%g >= %g \n", v, lim) //这个地方为什么不能放到其他
    139. }
    140. return lim
    141. }