第17讲 函数测试
本讲基于视频实际讲解内容整理
一、本讲概述
本讲通过实际编写代码来练习函数的定义和调用。老师在课程中演示了如何定义函数获取当前时间,并遇到了Windows系统智能拦截导致程序无法运行的问题。
二、导入必要的包
编写函数需要用到 fmt 和 time 两个标准库包:
Go
package main
import (
"fmt"
"time"
)
| 包名 | 作用 |
|---|---|
fmt |
格式化输入输出(打印、扫描) |
time |
时间相关操作(获取时间、格式化等) |
三、定义函数获取当前时间
老师在课程中演示了如何定义一个函数来获取并返回当前时间:
Go
package main
import (
"fmt"
"time"
)
// 定义函数,返回当前时间
func getCurrentTime() time.Time {
return time.Now()
}
func main() {
// 调用函数获取当前时间
now := getCurrentTime()
fmt.Println("当前时间:", now)
}
3.1 time.Now() 函数
time.Now() 是Go标准库 time 包提供的函数,返回当前的本地时间,类型为 time.Time。
Go
now := time.Now()
fmt.Println(now)
// 输出示例: 2026-07-08 14:30:25.123456 +0800 CST
3.2 格式化时间
可以使用 Format() 方法对时间进行格式化:
Go
func getCurrentTimeFormatted() string {
now := time.Now()
// Go的时间格式化使用固定的参考时间: 2006-01-02 15:04:05
return now.Format("2006-01-02 15:04:05")
}
注意:Go的时间格式化模板比较特殊,必须使用
2006-01-02 15:04:05这个固定值(这是Go的诞生时间),不能用YYYY-MM-DD这种格式。
四、Windows智能拦截问题
老师在课程中遇到了一个实际开发中的常见问题:Windows智能拦截(Windows SmartScreen)导致IDE和程序无法正常运行。
4.1 问题描述
- 电脑系统升级后,Windows会自动开启智能拦截功能
- 智能拦截会阻止IDE(如LiteIDE、GoLand等)运行程序
- 表现为程序无法正常启动或运行
4.2 解决方案
关闭Windows智能控制:
- 打开 Windows设置
- 进入 隐私和安全性 → Windows安全中心
- 找到 应用和浏览器控制
- 在 智能屏幕筛选器 中选择 关闭
- 重新启动IDE
老师提醒:关闭智能拦截后程序即可正常运行。这是Windows系统升级后常见的问题,很多初学者会以为是代码或环境配置出了问题。
五、函数定义实践
5.1 无参函数
Go
// 无参数、返回time.Time
func getCurrentTime() time.Time {
return time.Now()
}
5.2 带参数函数
Go
// 接收一个string参数,返回string
func greet(name string) string {
return "Hello, " + name + "!"
}
5.3 多返回值函数
Go
// 返回格式化后的时间和时间戳
func getTimeInfo() (string, int64) {
now := time.Now()
formatted := now.Format("2006-01-02 15:04:05")
timestamp := now.Unix()
return formatted, timestamp
}
六、完整代码示例
Go
package main
import (
"fmt"
"time"
)
// 获取当前时间
func getCurrentTime() time.Time {
return time.Now()
}
// 获取格式化后的当前时间
func getCurrentTimeFormatted() string {
now := time.Now()
return now.Format("2006-01-02 15:04:05")
}
// 获取时间信息(多返回值)
func getTimeInfo() (string, int64) {
now := time.Now()
formatted := now.Format("2006-01-02 15:04:05")
timestamp := now.Unix()
return formatted, timestamp
}
func main() {
// 调用无参函数
now := getCurrentTime()
fmt.Println("当前时间(原始):", now)
// 调用格式化函数
formatted := getCurrentTimeFormatted()
fmt.Println("当前时间(格式化):", formatted)
// 调用多返回值函数
timeStr, timestamp := getTimeInfo()
fmt.Println("时间字符串:", timeStr)
fmt.Println("时间戳:", timestamp)
// 用下划线忽略不需要的返回值
_, ts := getTimeInfo()
fmt.Println("只需要时间戳:", ts)
}
七、本讲小结
| 知识点 | 要点 |
|---|---|
| fmt包 | 格式化输入输出 |
| time包 | 时间相关操作 |
| time.Now() | 获取当前时间 |
| time.Format() | 格式化时间,模板为 2006-01-02 15:04:05 |
| 函数定义 | func 函数名() 返回类型 { ... } |
| 多返回值 | 函数可以返回多个值 |
| Windows智能拦截 | 系统升级后可能开启,需手动关闭 |
八、课后练习
- 编写一个函数
getYear(),返回当前年份(提示:time.Now().Year()) - 编写一个函数
getTimeInfo(),同时返回格式化时间字符串和Unix时间戳 - 调用上面的函数,用
_忽略其中一个返回值 - 尝试使用
time.Format()用不同的模板格式化时间 - 如果IDE无法运行程序,检查是否是Windows智能拦截导致的问题