package main

import (
	"flag"
	"fmt"
)

func main() {
	// a := 10
	// b := 20
	// c := sum(a, b)
	// println("a + b =", c)

	// // 使用指针作为函数参数
	// // 0x14000108020
	// var result int

	// // &result (类型安全的指针) 东西叫指针 有类型约束，首GC印象的 地址
	// fmt.Println("result 地址 =", &result)
	// sumWithPointer(a, b, &result)
	// println("a + b =", result)

	// // uintptr 是无类型指针，可以存放任意指针的地址值, 裸内存地址, 不安全指针, 可能随时被回事，成为一个无效地址
	// // 非法使用 uintptr 导致程序崩溃
	// fmt.Println("result 地址 uintptr =", uintptr(unsafe.Pointer(&result)))

	// 获取用户输入
	// var i int
	// fmt.Println("请输入一个整数：")
	// fmt.Scan(&i) // 把输入写入 i
	// fmt.Println("你输入的整数是：", i)

	// 命令行参数解析
	// --port 9090
	var port int
	flag.IntVar(&port, "port", 8080, "server port") // 命令行参数绑定到变量
	flag.Parse()
	fmt.Println("服务器端口号是：", port)
}

func sum(a int, b int) int {
	return a + b
}

// 这个函数没有Retrun
// *int 就是指针类型, 传递是 int这种类型的变量的地址
func sumWithPointer(a int, b int, c *int) {
	*c = a + b
}
