AI时代下的go语言!
AI编程工具的性能提升令人印象深刻!如今再去努力记忆编程语法知识已经没有了意义!我们只需要去大概的了解一下语法知识,再结合AI便可以运用到企业级的项目中去!这意味着学习编程的方式正在发生根本性改变。
·
AI时代下应该如何去学习编程语言
AI编程工具的性能提升令人印象深刻!如今再去努力记忆编程语法知识已经没有了意义!我们只需要去大概的了解一下语法知识,再结合AI便可以运用到企业级的项目中去!这意味着学习编程的方式正在发生根本性改变。
AI时代编程学习的新策略
编程语言上的改变
从语法记忆转向概念理解,从代码编写转向代码审查,从独立编程转向人机协作
程序员的核心
算法和数据结构,系统设计能力,问题分解能力
AI时代下的学习思想
项目驱动学习(从实际项目开始,边做边学,使用AI工具辅助,但要理解每行代码的含义,关注项目的整体架构和设计思路)
AI辅助学习(让AI解释代码逻辑,帮助理解复杂概,让AI快速生成代码框架)
码审查技能(识别AI生成代码的问题,掌握代码重构和优化技巧,培养对代码质量的敏感度)
go语言语法(了解,去项目中学习)
项目驱动学习
AI代码生成
我这里用的AI是Claude(下一篇文章会教如何去注册使用Claude)!说好的超详解!!!(每天token限制,可以去用国内的通义千问,通义灵码)
大家可以看到我让AI给我生成了一个个人记账系统!!
项目代码如下:
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
"strconv"
"strings"
"time"
)
// 交易类型
type TransactionType string
const (
Income TransactionType = "收入"
Expense TransactionType = "支出"
)
// 交易记录
type Transaction struct {
ID int `json:"id"`
Type TransactionType `json:"type"`
Amount float64 `json:"amount"`
Category string `json:"category"`
Description string `json:"description"`
Date time.Time `json:"date"`
}
// 记账系统
type ExpenseTracker struct {
transactions []Transaction
nextID int
filename string
}
// 创建新的记账系统
func NewExpenseTracker(filename string) *ExpenseTracker {
et := &ExpenseTracker{
transactions: make([]Transaction, 0),
nextID: 1,
filename: filename,
}
et.loadData()
return et
}
// 添加交易记录
func (et *ExpenseTracker) AddTransaction(transType TransactionType, amount float64, category, description string) error {
if amount <= 0 {
return fmt.Errorf("金额必须大于0")
}
transaction := Transaction{
ID: et.nextID,
Type: transType,
Amount: amount,
Category: category,
Description: description,
Date: time.Now(),
}
et.transactions = append(et.transactions, transaction)
et.nextID++
return et.saveData()
}
// 获取所有交易记录
func (et *ExpenseTracker) GetAllTransactions() []Transaction {
return et.transactions
}
// 获取收入总额
func (et *ExpenseTracker) GetTotalIncome() float64 {
var total float64
for _, t := range et.transactions {
if t.Type == Income {
total += t.Amount
}
}
return total
}
// 获取支出总额
func (et *ExpenseTracker) GetTotalExpense() float64 {
var total float64
for _, t := range et.transactions {
if t.Type == Expense {
total += t.Amount
}
}
return total
}
// 获取余额
func (et *ExpenseTracker) GetBalance() float64 {
return et.GetTotalIncome() - et.GetTotalExpense()
}
// 按类别统计支出
func (et *ExpenseTracker) GetExpenseByCategory() map[string]float64 {
categoryExpense := make(map[string]float64)
for _, t := range et.transactions {
if t.Type == Expense {
categoryExpense[t.Category] += t.Amount
}
}
return categoryExpense
}
// 删除交易记录
func (et *ExpenseTracker) DeleteTransaction(id int) error {
for i, t := range et.transactions {
if t.ID == id {
et.transactions = append(et.transactions[:i], et.transactions[i+1:]...)
return et.saveData()
}
}
return fmt.Errorf("找不到ID为 %d 的交易记录", id)
}
// 保存数据到文件
func (et *ExpenseTracker) saveData() error {
file, err := os.Create(et.filename)
if err != nil {
return fmt.Errorf("无法创建文件: %v", err)
}
defer file.Close()
encoder := json.NewEncoder(file)
encoder.SetIndent("", " ")
return encoder.Encode(et.transactions)
}
// 从文件加载数据
func (et *ExpenseTracker) loadData() error {
file, err := os.Open(et.filename)
if err != nil {
// 如果文件不存在,返回nil(使用空数据)
if os.IsNotExist(err) {
return nil
}
return fmt.Errorf("无法打开文件: %v", err)
}
defer file.Close()
decoder := json.NewDecoder(file)
err = decoder.Decode(&et.transactions)
if err != nil {
return fmt.Errorf("无法解析JSON: %v", err)
}
// 更新nextID
maxID := 0
for _, t := range et.transactions {
if t.ID > maxID {
maxID = t.ID
}
}
et.nextID = maxID + 1
return nil
}
// 应用程序结构
type App struct {
tracker *ExpenseTracker
scanner *bufio.Scanner
}
// 创建新应用
func NewApp() *App {
return &App{
tracker: NewExpenseTracker("expenses.json"),
scanner: bufio.NewScanner(os.Stdin),
}
}
// 运行应用
func (app *App) Run() {
fmt.Println("===============================")
fmt.Println(" 欢迎使用个人记账系统")
fmt.Println("===============================")
for {
app.showMenu()
choice := app.getUserInput("请选择操作 (1-7): ")
switch choice {
case "1":
app.addIncome()
case "2":
app.addExpense()
case "3":
app.viewTransactions()
case "4":
app.viewSummary()
case "5":
app.viewCategoryReport()
case "6":
app.deleteTransaction()
case "7":
fmt.Println("感谢使用记账系统,再见!")
return
default:
fmt.Println("无效选择,请重新输入")
}
fmt.Println("\n按回车键继续...")
app.scanner.Scan()
}
}
// 显示菜单
func (app *App) showMenu() {
fmt.Println("\n=============== 主菜单 ===============")
fmt.Println("1. 添加收入")
fmt.Println("2. 添加支出")
fmt.Println("3. 查看交易记录")
fmt.Println("4. 查看财务摘要")
fmt.Println("5. 查看分类报告")
fmt.Println("6. 删除交易记录")
fmt.Println("7. 退出")
fmt.Println("====================================")
}
// 获取用户输入
func (app *App) getUserInput(prompt string) string {
fmt.Print(prompt)
app.scanner.Scan()
return strings.TrimSpace(app.scanner.Text())
}
// 添加收入
func (app *App) addIncome() {
fmt.Println("\n--- 添加收入 ---")
amountStr := app.getUserInput("请输入收入金额: ")
amount, err := strconv.ParseFloat(amountStr, 64)
if err != nil {
fmt.Println("无效的金额格式")
return
}
category := app.getUserInput("请输入收入类别 (如: 工资, 奖金, 投资): ")
if category == "" {
category = "其他"
}
description := app.getUserInput("请输入描述 (可选): ")
err = app.tracker.AddTransaction(Income, amount, category, description)
if err != nil {
fmt.Printf("添加失败: %v\n", err)
return
}
fmt.Printf("成功添加收入: %.2f 元\n", amount)
}
// 添加支出
func (app *App) addExpense() {
fmt.Println("\n--- 添加支出 ---")
amountStr := app.getUserInput("请输入支出金额: ")
amount, err := strconv.ParseFloat(amountStr, 64)
if err != nil {
fmt.Println("无效的金额格式")
return
}
category := app.getUserInput("请输入支出类别 (如: 餐饮, 交通, 购物): ")
if category == "" {
category = "其他"
}
description := app.getUserInput("请输入描述 (可选): ")
err = app.tracker.AddTransaction(Expense, amount, category, description)
if err != nil {
fmt.Printf("添加失败: %v\n", err)
return
}
fmt.Printf("成功添加支出: %.2f 元\n", amount)
}
// 查看交易记录
func (app *App) viewTransactions() {
fmt.Println("\n--- 交易记录 ---")
transactions := app.tracker.GetAllTransactions()
if len(transactions) == 0 {
fmt.Println("暂无交易记录")
return
}
fmt.Printf("%-4s %-8s %-10s %-12s %-20s %s\n",
"ID", "类型", "金额", "类别", "描述", "日期")
fmt.Println(strings.Repeat("-", 80))
for _, t := range transactions {
fmt.Printf("%-4d %-8s %-10.2f %-12s %-20s %s\n",
t.ID,
t.Type,
t.Amount,
t.Category,
t.Description,
t.Date.Format("2006-01-02 15:04"),
)
}
}
// 查看财务摘要
func (app *App) viewSummary() {
fmt.Println("\n--- 财务摘要 ---")
totalIncome := app.tracker.GetTotalIncome()
totalExpense := app.tracker.GetTotalExpense()
balance := app.tracker.GetBalance()
fmt.Printf("总收入: %.2f 元\n", totalIncome)
fmt.Printf("总支出: %.2f 元\n", totalExpense)
fmt.Printf("当前余额: %.2f 元\n", balance)
if balance > 0 {
fmt.Println("💰 很好,您有盈余!")
} else if balance < 0 {
fmt.Println("⚠️ 警告:您的支出超过了收入!")
} else {
fmt.Println("📊 收支平衡")
}
}
// 查看分类报告
func (app *App) viewCategoryReport() {
fmt.Println("\n--- 支出分类报告 ---")
categoryExpense := app.tracker.GetExpenseByCategory()
if len(categoryExpense) == 0 {
fmt.Println("暂无支出记录")
return
}
fmt.Printf("%-15s %s\n", "类别", "金额")
fmt.Println(strings.Repeat("-", 25))
for category, amount := range categoryExpense {
fmt.Printf("%-15s %.2f 元\n", category, amount)
}
// 找出最大支出类别
maxCategory := ""
maxAmount := 0.0
for category, amount := range categoryExpense {
if amount > maxAmount {
maxAmount = amount
maxCategory = category
}
}
if maxCategory != "" {
fmt.Printf("\n💡 最大支出类别: %s (%.2f 元)\n", maxCategory, maxAmount)
}
}
// 删除交易记录
func (app *App) deleteTransaction() {
fmt.Println("\n--- 删除交易记录 ---")
// 先显示所有交易记录
app.viewTransactions()
idStr := app.getUserInput("请输入要删除的交易ID: ")
id, err := strconv.Atoi(idStr)
if err != nil {
fmt.Println("无效的ID格式")
return
}
confirm := app.getUserInput("确认删除吗?(y/N): ")
if strings.ToLower(confirm) != "y" && strings.ToLower(confirm) != "yes" {
fmt.Println("取消删除")
return
}
err = app.tracker.DeleteTransaction(id)
if err != nil {
fmt.Printf("删除失败: %v\n", err)
return
}
fmt.Println("交易记录删除成功!")
}
// 主函数
func main() {
app := NewApp()
app.Run()
}
我们去运行一下代码,不知道怎么运行go语言的同学可以去看下上节内容:
完美运行! 基本代码流程及核心代码详解见下章(超快更新)。
总结
这将是一个长系列的模块,从下载到项目的落地都会在此板块更新!!记录项目从无到有的过程,出现问题!有兴趣的盆友可以一起交流学习!留个关注,蟹蟹!!
更多推荐
所有评论(0)