#717 Viper: Go 项目配置管理

2022-07-22
  • main.go

    package main
    
    import (
        "fmt"
        "os"
    
        "github.com/spf13/pflag"
        "github.com/spf13/viper"
    )
    
    func main() {
        // 1. 设置 Viper 配置
        viper.SetConfigName("config") // 配置文件名(不带后缀)
        viper.AddConfigPath(".")      // 配置文件路径
        viper.SetConfigType("yaml")   // 配置文件类型
        viper.AutomaticEnv()          // 自动读取环境变量
    
        // 2. 设置命令行参数
        pflag.String("name", "", "project name")
        pflag.String("host", "", "host address")
        pflag.String("port", "", "port number")
        pflag.String("config", "./config.yaml", "config file") // 配置文件参数
        pflag.Parse()
        viper.BindPFlags(pflag.CommandLine) // 将命令行参数绑定到 Viper
    
        // 3. 读取配置文件
        if configFile := viper.GetString("config"); configFile != "" {
            fmt.Println(configFile)
            if err := viper.ReadInConfig(); err != nil {
                fmt.Fprintf(os.Stderr, "读取配置文件失败:%v\n", err)
                os.Exit(1)
            }
        }
    
        // 4. 读取配置项
        projectName := viper.GetString("name")
        port := viper.GetInt("port")
        fmt.Printf("ProjectName: %s, Port: %d\n", projectName, port)
    }
    
  • config.yaml

    name: hello
    host: 10.10.0.172
    port: 9090
    
  • 支持环境变量、命令行参数、YAML 配置文件。

#716 Pytest setup 和 teardown 方法

2022-07-12
  • 全局
    • setup_module(module) / teardown_module(module) 引入包的时候执行
    • setup_function(function) / teardown_function(function)
  • 模块级别
    • setup() / teardown() 测试模块载入的时候执行
  • 类级别
    • setup_class(cls) / teardown_class(cls)
    • setup_method(self, method) / teardown_method(self, method)
    • setup(self) / teardown(self) nose 语法,会被上面两个方法覆盖

Supported nose Idioms

  • setup() and teardown() at module/class/method level: any function or method called setup will be called during the setup phase for each test, same for teardown.
  • SkipTest exceptions and markers
  • setup/teardown decorators
  • __test__ attribute on modules/classes/functions
  • general usage of nose utilities

#714 冯·诺依曼的故事

2022-07-01

本周的《科技爱好者周刊》讲了冯·诺依曼的故事。

学计算机的,应该没有人不知道冯·诺依曼架构,冯·诺依曼也被称为现代计算机的发明人。他结合了数理逻辑、信息论和生物学,开创了自动机理论,并希望在这个领域做出更大贡献。但是他总是插入其他相对不重要的工作,比如政府相关事务,以致于最后并没有为自动机理论的发展做出应有的贡献。

他本人并非不知道这一点,但就是这种性格,喜欢同时研究很多事情,一旦对某件事情产生了兴趣,就会放下手头的工作,推说稍后再回来接着做,可惜人生并没有为他留出"回过头再做"的时间

尤其是这句话,我感觉扎心了,妥妥的就是在说我。

我感兴趣的事情实在太多,以致总是被各种事情打断而很少能实现预定目标。我一直就有一种感觉,感觉自己是一只在追赶沙丁鱼群的、“没有经验”的小旗鱼,悲哀!

我要安静下来,仔细思考我的目标到底是什么,它们有一个怎样的优先级。

#708 winget: Windows 包管理工具

2022-06-04
winget list
winget list -?
winget search xxx     # 搜索
winget install xxx    # 安装
winget upgrade        # 列出 upgradable 包
winget upgrade xxx    # 升级指定包
winget upgrade --all  # 升级
winget
Windows 程序包管理器 v1.3.2691
版权所有 (C) Microsoft Corporation。保留所有权利。

WinGet 命令行实用工具可从命令行安装应用程序和其他程序包。

使用情况: winget [<命令>] [<选项>]

下列命令有效:
  install    安装给定的程序包
  show       显示包的相关信息
  source     管理程序包的来源
  search     查找并显示程序包的基本信息
  list       显示已安装的程序包
  upgrade    显示并执行可用升级
  uninstall  卸载给定的程序包
  hash       哈希安装程序的帮助程序
  validate   验证清单文件
  settings   打开设置或设置管理员设置
  features   显示实验性功能的状态
  export     导出已安装程序包的列表
  import     安装文件中的所有程序包

如需特定命令的更多详细信息,请向其传递帮助参数。 [-?]

下列选项可用:
  -v,--version  显示工具的版本
  --info        显示工具的常规信息

可在此找到更多帮助: https://aka.ms/winget-command-help

#707 常见的程序设计语言

2022-06-03

根据最新的 TIOBE 数据, 分析前面 50 中语言。
具体排名的意义对我们来说到不大,只是用来做一个比较热门语言的清单。

#703 Edge 浏览器快捷键

2022-05-15
  • Microsoft Edge 中的键盘快捷方式

  • Ctrl + R / F5 刷新

  • Ctrl + Shift + R / Shift + F5 强制刷新
  • Ctrl + Shift + B 隐藏收藏夹栏
  • Ctrl + Shift + N 打开隐私窗口
  • Ctrl + F 在页面上查找
  • Ctrl + H 历史记录
  • Ctrl + J 下载
  • Ctrl + K 搜索
  • Ctrl + Shift + O 收藏夹管理
  • F12
  • Ctrl + 加号 / Ctrl + 减号 / Ctrl + 0 缩放与还原
  • Ctrl + D 聚焦地址栏