kfp 发布的文章

在开发和调试过程中,确保每次运行测试时都能获取最新的测试结果是非常重要的。然而,Go 测试工具默认会使用缓存来加速测试执行,这可能导致你在修改代码后,测试结果并没有反映最新的变化。本文将介绍如何在 VS Code 中配置 go test 命令,以避免使用缓存。

遇到的问题

在运行 Go 测试时,可能会看到如下输出:

ok      seele/environment/xxx/ability      (cached)

这里的 (cached) 表示 Go 测试工具使用了之前的测试结果,而没有重新运行测试。这在某些情况下可能会导致误导,因为你希望看到的是最新的测试结果,而不是缓存的结果。

解决方法

为了确保每次运行 go test 命令时都不使用缓存,可以使用 -count=1 参数。具体步骤如下:

  1. 打开 VS Code。
  2. 按下 Ctrl + Shift + P(或 Cmd + Shift + P 在 macOS 上)打开命令面板。
  3. 输入并选择 Preferences: Open Settings (JSON) 以打开 settings.json 文件。
  4. settings.json 文件中,添加或修改以下配置:
{
    // 其他配置项...
    "go.testFlags": [
        "-count=1"
    ]
}

这将确保每次运行 go test 命令时都使用 -count=1 参数,从而避免使用缓存。

为什么这么操作管用

在 Go 的测试工具中,-count 标志用于指定每个测试函数应该运行的次数。默认情况下,Go 测试工具会使用缓存来加速测试执行。如果你希望每次运行测试时都重新执行,而不是使用缓存结果,可以使用 -count=1

具体来说:

  • -count=1:每个测试函数运行一次,并且不使用缓存结果。这是避免缓存的常用方法。
  • -count=N:每个测试函数运行 N 次。可以用于测试函数的稳定性或随机性。

例如,运行以下命令:

go test -count=1

这将确保所有测试在每次运行时都重新执行,而不是依赖缓存结果。

总结

在 VS Code 中通过配置 go.testFlags 来使用 -count=1,可以确保你在开发和调试过程中看到的是最新的测试结果,而不是缓存的结果。具体配置如下:

{
    // 其他配置项...
    "go.testFlags": [
        "-count=1"
    ]
}

保存文件后,VS Code 将会使用新的配置运行 go test,避免使用缓存。

通过这种方式,你可以确保每次运行测试时都能获取最新的测试结果,从而提高开发和调试的效率。

背景

最近考虑买房,在评估购房总费用和计划还款方案时,我发现市面上的房贷计算器通常只计算贷款部分,并不能提供一个全面的购房预算评估。不能完全满足我的需求,因为单纯的月供计算不能涵盖房款以外的一些费用,比如契税、中介费和装修费等,因此无法为我提供一个完整的购房预算评估。

问题

市面上的房贷计算器存在如下问题:

  1. 单一计算: 只计算房贷月供和总利息,不包含其他购房相关费用。
  2. 缺少全面评估: 无法提供包括首付款、各种税费、装修费用在内的整体预算评估。
  3. 有限的还款方案: 通常只支持一种贷款方式(如仅考虑商业贷款或公积金贷款),不能一次性全部展示出来,横向对比。

我的需求

为了真正了解购房的所有费用,我需要一个能够综合计算以下几项内容的工具:

  1. 房屋总价和首付款: 计算首付比例和首付款金额。
  2. 贷款金额和月供: 根据不同还款方式(等额本息、等额本金)计算每月还款额。
  3. 其他购房费用: 包括契税、中介费和装修费用。
  4. 总预算: 计算带装修和不带装修的总预算,以及总花费。

解决方案:开发一个定制化的房贷计算器

为了满足上述需求,我开发了一个能够综合计算购房预算和还款方案的项目。该项目不仅能够计算房贷月供,还能提供全面的购房预算评估,包括契税、中介费和装修费用等。

项目功能:
  1. 等额本息和等额本金的还款计算
  2. 公积金贷款和商业贷款的混合计算
  3. 全面的购房预算评估
  4. 结果输出到Excel和Markdown文件

以下是具体实现的功能说明:

项目实现详情

完整代码示例:GitHub 房贷计算器

1. 读取配置文件

通过 config.txt 文件读取购房相关的配置。这些配置项包含房屋总价、首付款比例、公积金贷款金额、公积金贷款利率、契税率、贷款期限、中介费比例、商业贷款利率以及装修费用等。

2. 计算等额本息月供

采用等额本息的方式计算每月还款金额:

def calculate_equal_interest_monthly_payment(principal, annual_rate, periods):
    monthly_rate = annual_rate / 100 / 12
    return principal * monthly_rate * (1 + monthly_rate) ** periods / ((1 + monthly_rate) ** periods - 1)

3. 计算等额本金月供

采用等额本金的方式计算首月、末月还款金额以及每月递减的金额:

def calculate_equal_principal_monthly_payment(principal, annual_rate, periods):
    monthly_rate = annual_rate / 100 / 12
    monthly_principal = principal / periods
    interest_first_month = principal * monthly_rate
    total_interest = 0
    for month in range(int(periods)):
        monthly_interest = (principal - month * monthly_principal) * monthly_rate
        total_interest += monthly_interest
    first_month_payment = monthly_principal + interest_first_month
    last_month_payment = monthly_principal + (monthly_principal * monthly_rate)
    monthly_decrease = monthly_principal * monthly_rate
    return first_month_payment, last_month_payment, monthly_decrease, total_interest / 10000

4. 完整的结果计算

根据读取的配置和还款方式,综合计算房屋总价、首付款、各种贷款金额及比例、契税、中介费、装修费等多项细节,并输出详细的预算结果:

def calculate_results(config, repayment_method):
    # 读取和计算各项配置和费用
    house_price = config['house_price']
    down_payment_ratio = config['down_payment_ratio'] / 100
    fund_loan_amount = config['fund_loan_amount']
    fund_loan_rate = config['fund_loan_rate']
    deed_tax_rate = config['deed_tax_rate'] / 100
    loan_years = config['loan_years']
    agent_fee_ratio = config['agent_fee_ratio'] / 100
    commercial_loan_rate = config['commercial_loan_rate']
    down_payment = house_price * down_payment_ratio
    total_loan_amount = house_price - down_payment
    commercial_loan_amount = total_loan_amount - fund_loan_amount
    periods = loan_years * 12

    ...  # 省略详细计算逻辑,见全文代码

    return details

5. 支持输出到Excel和Markdown文件

为了便于查看和保存计算结果,结果会被输出到Excel文件和Markdown文件中:

def save_markdown(views, output_path):
    with open(output_path, 'w', encoding='utf-8') as f:
        for view_name, results in views.items():
            f.write(f'## {view_name}\n')
            table = tabulate(results.items(), headers=['项目', '数值'], tablefmt='pipe', stralign='center', numalign='center')
            f.write(f"{table}\n\n")

项目总结:

这个定制化的房贷计算器帮助我在购房时能从更加全面的角度评估预算。通过详细计算房贷月供、总支付利息、公积金和商业贷款比例、契税、中介费以及装修费等多项费用,使得购房预算更加准确和透明。希望这篇博客和分享的代码能够帮助有相似需求的人更好地进行购房规划。

未来的工作:

接下来,我计划进一步优化这个项目,增加如下功能:

  1. 更多贷款方式支持: 比如一次性还本和分期还本等。
  2. 利率浮动计算: 支持贷款利率浮动的情况。
  3. 用户友好型界面: 提供图形界面,让用户可以更加方便地输入参数和查看结果。

欢迎大家提供建议和反馈,让我们一起完善这个房贷计算器项目。