package main
import (
"fmt"
"math"
"math/rand"
"time"
"example.com/go-demo-01/mascot"
)
/*
函数外的每个语句都必须用var 或者 func 来开头
但是在函数体内 可以用 := 在类型明确的地方代替 var 赋值
用 var 时候,初始化值已存在时可以省略类型
*/
var c, java, python bool
var 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
}