0Pricing
Go Academy · บทเรียน

การอ่านไฟล์การกำหนดค่า

โหลด YAML, JSON, TOML

การอ่านไฟล์การกำหนดค่า เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

การกำหนดค่าอยู่นอกโค้ด

การกำหนดค่าอย่างพอร์ต ชื่อโฮสต์ และระยะหมดเวลาไว้โดยตรงในโปรแกรม Go นั้นเปราะบาง Viper เป็นไลบรารีการกำหนดค่าของ Go ที่ถือเป็นมาตรฐานโดยพฤตินัย โดยอ่านการตั้งค่าจากไฟล์ ตัวแปรสภาพแวดล้อม แฟล็ก และแหล่งจัดเก็บระยะไกลได้

ในบทเรียนนี้ คุณจะโหลดการกำหนดค่าจากไฟล์บนดิสก์

รูปแบบใดบ้างที่ Viper อ่านได้

Viper รองรับหลายรูปแบบตั้งแต่เริ่มต้น:

  • YAML (.yaml / .yml)
  • JSON (.json)
  • TOML (.toml)
  • ไฟล์คุณสมบัติรูปแบบ HCL, INI และ Java

คุณเลือกรูปแบบด้วย SetConfigType หรือ Viper จะอนุมานรูปแบบจากนามสกุลไฟล์

การติดตั้งและนำเข้า Viper

เพิ่ม Viper ลงในโมดูลของคุณแล้วนำเข้า:

  • go get github.com/spf13/viper
  • import "github.com/spf13/viper"

เนื่องจาก Viper เป็นส่วนพึ่งพาภายนอก ตัวอย่างโค้ดที่นำเข้า Viper จึงไม่สามารถรันในตัวเล่นบทเรียนนี้ได้ เราจำลองพฤติกรรมด้วยไลบรารีมาตรฐานเท่าที่ทำได้

import "github.com/spf13/viper"

บอก Viper ว่าควรค้นหาที่ใด

คุณต้องกำหนดชื่อไฟล์ ประเภท และเส้นทางค้นหาก่อนอ่านไฟล์:

  • viper.SetConfigName("config") กำหนดชื่อพื้นฐานโดยไม่มีนามสกุล
  • viper.SetConfigType("yaml") กำหนดรูปแบบ
  • viper.AddConfigPath(".") เพิ่มไดเรกทอรีที่จะค้นหา
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
viper.AddConfigPath("/etc/myapp")

การอ่านไฟล์

เรียก viper.ReadInConfig() เพื่อโหลดไฟล์ โดยจะคืนค่าข้อผิดพลาดที่คุณต้องตรวจสอบ:

  • หากไม่พบไฟล์ จะคืนค่า ConfigFileNotFoundError
  • หากไฟล์มีรูปแบบไม่ถูกต้อง จะคืนค่าข้อผิดพลาดในการแยกวิเคราะห์
if err := viper.ReadInConfig(); err != nil {
    log.Fatalf("failed to read config: %v", err)
}

ตัวอย่างการกำหนดค่า YAML

ลองนึกภาพ config.yaml ในลักษณะนี้ Viper จะทำให้คีย์ที่ซ้อนกันเป็นคีย์แบบแบนโดยใช้จุด ดังนั้นพอร์ตจึงกลายเป็น server.port

server:
  port: 8080
  host: "localhost"
debug: true

การรับค่าแบบมีชนิดข้อมูล

Viper มีตัวอ่านค่าที่ระบุชนิดข้อมูล ทำให้คุณไม่ต้องแปลงค่าด้วยตนเอง:

  • viper.GetInt("server.port")
  • viper.GetString("server.host")
  • viper.GetBool("debug")
port := viper.GetInt("server.port")
host := viper.GetString("server.host")
debug := viper.GetBool("debug")
fmt.Println(host, port, debug)

JSON ทำงานในลักษณะเดียวกัน

การเปลี่ยนไปใช้ JSON จะเปลี่ยนเพียงเนื้อหาไฟล์และประเภทการกำหนดค่าเท่านั้น เส้นทางคีย์และตัวอ่านค่าเดิมยังใช้ได้ ความสามารถในการย้ายรูปแบบนี้คือเหตุผลที่ Viper ได้รับความนิยม เพราะโค้ดของคุณไม่ต้องสนใจว่าทีมปฏิบัติการเลือกรูปแบบใด

{
  "server": { "port": 8080, "host": "localhost" },
  "debug": true
}

รองรับ TOML เช่นกัน

TOML เป็นรูปแบบที่พบได้ทั่วไปในระบบนิเวศของ Go (เครื่องมือบรรทัดคำสั่งจำนวนมากใช้รูปแบบนี้) คีย์ที่ซ้อนกันจะจับคู่กับเส้นทางที่คั่นด้วยจุดในลักษณะเดียวกัน

[server]
port = 8080
host = "localhost"

debug = true

การแยกวิเคราะห์ JSON ด้วยไลบรารีมาตรฐาน

เพื่อดูแนวคิดนี้ทำงานจริง นี่คือตัวอย่าง Go ธรรมดาที่แยกวิเคราะห์การกำหนดค่า JSON โดยไม่ใช้ Viper แต่ใช้เพียง encoding/json กับแผนที่ (เบื้องหลัง Viper เองก็ทำงานกับแผนที่ทั่วไปเช่นกัน)

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := "{\"port\":8080,\"host\":\"localhost\"}"
    var c map[string]any
    if err := json.Unmarshal([]byte(raw), &c); err != nil {
        panic(err)
    }
    fmt.Printf("%v:%v\n", c["host"], c["port"])
}

รันได้: การอ่านลงในแผนที่

โปรแกรมที่ทำงานได้ในตัวเองนี้จะแยกวิเคราะห์การกำหนดค่า JSON ลงในแผนที่ทั่วไปและพิมพ์ค่าออกมา ซึ่งจำลองสิ่งที่ Viper ทำอยู่เบื้องหลังสำหรับ JSON

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := "{\"port\":8080,\"host\":\"localhost\"}"
    var m map[string]any
    json.Unmarshal([]byte(raw), &m)
    fmt.Println("host:", m["host"])
    fmt.Println("port:", m["port"])
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับการอ่านไฟล์การกำหนดค่าด้วย Viper

สรุปทบทวน

คุณได้เรียนรู้วิธีที่ Viper อ่านไฟล์การกำหนดค่า:

  • รองรับ YAML, JSON และ TOML โดยไม่ต้องจัดการความแตกต่างเอง
  • กำหนดค่าด้วย SetConfigName, SetConfigType, AddConfigPath
  • ReadInConfig() โหลดไฟล์และคืนค่าข้อผิดพลาด
  • ตัวอ่านค่าแบบมีชนิดข้อมูล เช่น GetInt และ GetString อ่านค่าตามคีย์ที่คั่นด้วยจุด

ถัดไป: การแทนที่การกำหนดค่าด้วยตัวแปรสภาพแวดล้อม

คำถามที่พบบ่อย

บทเรียน “การอ่านไฟล์การกำหนดค่า” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การอ่านไฟล์การกำหนดค่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การอ่านไฟล์การกำหนดค่า”

โหลด YAML, JSON, TOML คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การอ่านไฟล์การกำหนดค่า” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การอ่านไฟล์การกำหนดค่า
  2. ตัวแปรสภาพแวดล้อม
  3. ค่าเริ่มต้นและการเฝ้าดู
  4. การผูกกับสตรักต์
← กลับไปที่ Go Academy