💜 想真正擅长编程? 从一门课程开始,100% 免费

《笔记》第十七篇 函数测试

第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智能控制:

  1. 打开 Windows设置
  2. 进入 隐私和安全性 → Windows安全中心
  3. 找到 应用和浏览器控制
  4. 在 智能屏幕筛选器 中选择 关闭
  5. 重新启动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智能拦截 系统升级后可能开启,需手动关闭

八、课后练习

  1. 编写一个函数 getYear(),返回当前年份(提示:time.Now().Year())
  2. 编写一个函数 getTimeInfo(),同时返回格式化时间字符串和Unix时间戳
  3. 调用上面的函数,用 _ 忽略其中一个返回值
  4. 尝试使用 time.Format() 用不同的模板格式化时间
  5. 如果IDE无法运行程序,检查是否是Windows智能拦截导致的问题