package main

import (
	"fmt"
	"math/rand"
) //引入math/rand标准库包，并以rand作为引入名

const MaxRand = 16 // 声明一个具名整型常量
// 一个函数声明
/* StatRandomNumbers生成一些不大于MaxRand的非负
随机整数，并统计和返回小于和大于MaxRand/2的随机数
个数。输入参数numRands指定了要生成的随机数的总数。
*/
func StatRandomNumbers(numRands int) (int, int) {
	// 声明了两个变量（类型都为int，初始值都为0）
	var a, b int
	// 一个for循环代码块
	for i := 0; i < numRands; i++ {
		// 一个if-else条件控制代码块
		if rand.Intn(MaxRand) < MaxRand/2 {
			a = a + 1
		} else {
			b++ // 等价于：b = b + 1
		}
	}
	return a, b // 此函数返回两个结果
}

func SquareesofSumAndDiff(a, b int64) (s, d int64) {
	// return (a + b) * (a + b), (a - b) * (a - b)
	s = (a + b) * (a + b)
	d = (a - b) * (a - b)
	return

}

// main函数，或主函数，是一个程序的入口函数。
func main() {
	{
		// part1
		// var num = 100
		// 调用上面声明的StatRandomNumbers函数，
		// 并将结果赋给使用短声明语句声明的两个变量。

		// x, y := StatRandomNumbers(num)

		// 调用两个内置函数（print和println）。

		// print("Result: ", x, " + ", y, " = ", num, "? ")

		// println(x+y == num)

		// println(reflect.TypeOf("num").Name())
	}

	{
		// 函数声明与调用
		// x, y := SquareesofSumAndDiff(1, 2)
		// fmt.Printf("%d,%d", x, y)
	}
	{
		// //匿名函数
		// x, y := 1, 2
		// a, b := func(x, y int) (int, int) {
		// 	x = 4
		// 	print(x + y)
		// 	return x, y
		// }(x, y)
		// func() {
		// 	println("hello")
		// }()
		// fmt.Printf("%d,%d", a, b)
		// //在函数体后面跟上()表示声明后立即执行

	}
	{
		x, y := "炸", "煎鱼"
		fmt.Println(&x)
		_, _ = func(x, y string) (s string, err error) {
			x = "吃"
			fmt.Println(&x)
			return x + y, nil
		}(x, y)
		fmt.Println(&x)
		fmt.Println(x, y)
	}
}
