การอ่านไฟล์การกำหนดค่า
โหลด 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/viperimport "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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านไฟล์การกำหนดค่า
- ตัวแปรสภาพแวดล้อม
- ค่าเริ่มต้นและการเฝ้าดู
- การผูกกับสตรักต์