### TOML 简介

TOML（Tom's Obvious, Minimal Language）是一种配置文件格式，旨在易于阅读和编写。它的语法类似于INI文件，但更强大和灵活。

#### 基本语法

1. **键值对**：
   ```toml
   key = "value"
   ```

2. **字符串**：
   ```toml
   string = "Hello, World!"
   multi_line_string = """
   This is a
   multi-line string.
   """
   ```

3. **数字**：
   ```toml
   integer = 42
   float = 3.14
   ```

4. **布尔值**：
   ```toml
   boolean = true
   ```

5. **数组**：
   ```toml
   array = [1, 2, 3]
   ```

6. **表（嵌套结构）**：
   ```toml
   [table]
   key = "value"
   ```

7. **数组表**：
   ```toml
   [[array_table]]
   name = "Alice"
   [[array_table]]
   name = "Bob"
   ```

### 使用 Go 的 Viper 解析 TOML

在go中，有很多的库可以解析Toml,在这里我推荐使用Viper来进行处理。Viper 是一个强大的 Go 库，用于处理配置文件，支持多种格式，不仅仅是TOML。
#### 示例代码

1. **创建 TOML 文件**（`config.toml`）：
   ```toml
   app_name = "Class"
   port = 8080

   [database]
   host = "localhost"
   port = 3306
   user = "yzk_study"
   password = "yzk722923"
   ```

2. **使用 Viper 解析 TOML**：
   ```go
   package main

   import (
       "fmt"
       "github.com/spf13/viper"
   )

   func main() {
       // 设置配置文件名和路径
       viper.SetConfigName("config") // 文件名（不带扩展名）
       viper.SetConfigType("toml")   // 文件类型
       viper.AddConfigPath(".")      // 查找路径

       // 读取配置文件
       if err := viper.ReadInConfig(); err != nil {
           panic(fmt.Errorf("Fatal error config file: %s \n", err))
       }

       // 获取配置值
       appName := viper.GetString("app_name")
       port := viper.GetInt("port")
       dbHost := viper.GetString("database.host")
       dbPort := viper.GetInt("database.port")

       fmt.Printf("App Name: %s\n", appName)
       fmt.Printf("Port: %d\n", port)
       fmt.Printf("Database Host: %s\n", dbHost)
       fmt.Printf("Database Port: %d\n", dbPort)
   }
   ```

#### 运行结果

```bash
App Name: MyApp
Port: 8080
Database Host: localhost
Database Port: 5432
```

### 总结

- **TOML** 是一种易于阅读和编写的配置文件格式。
- **Viper** 是一个强大的 Go 库，支持多种配置文件格式，包括 TOML。
- 通过 Viper，可以轻松读取和解析 TOML 文件中的配置项。
