یکی از بخشهای کاربردی در برنامهنویسی، تعامل با فایلها، کار با دادههای JSON و دریافت ورودی از کاربر است. در زبان Go ابزارهای ساده و قویای برای این کار وجود داره که تو این بخش باهاشون آشنا میشیم.
کتابخانه os و io/ioutil برای مدیریت فایلها استفاده میشن.
نوشتن در فایل:
import ("os")func main() {file, err := os.Create("test.txt")if err != nil {panic(err)}defer file.Close()file.WriteString("سلام دنیا!\n")}
خواندن از فایل:
import ("fmt""os")func main() {data, err := os.ReadFile("test.txt")if err != nil {panic(err)}fmt.Println(string(data))}
در Go با استفاده از پکیج encoding/json میتونیم به راحتی دادههامون رو به فرمت JSON تبدیل کنیم یا از JSON به ساختارهای Go برگردونیم.
مارشال (تبدیل به JSON):
import ("encoding/json""fmt")type Person struct {Name stringAge int}func main() {p := Person{Name: "Ali", Age: 30}jsonData, _ := json.Marshal(p)fmt.Println(string(jsonData)) // {"Name":"Ali","Age":30}}
آنمارشال (خواندن JSON به struct):
func main() {jsonStr := `{"Name":"Ali","Age":30}`var p Personjson.Unmarshal([]byte(jsonStr), &p)fmt.Println(p.Name, p.Age) // Ali 30}
encoding/jsonپکیج encoding/json برای تبدیل دادهها بین ساختارهای Go و فرمت JSON استفاده میشه. از تگهای json در تعریف struct هم میتونیم استفاده کنیم تا کلیدهای JSON سفارشی کنیم:
type Person struct {Name string `json:"full_name"`Age int `json:"age"`}
خواندن ورودی کاربر از CLI
برای دریافت ورودی از کاربر، میتونیم از fmt.Scanln استفاده کنیم:
var name stringfmt.Print("اسمت چیه؟ ")fmt.Scanln(&name)fmt.Println("سلام،", name)
همچنین برای دریافت چند مقدار:
var a, b intfmt.Scan(&a, &b)
برای پروژههای خط فرمانی میتونیم از پکیج flag استفاده کنیم که ورودیهای CLI رو با پارامترهای مشخص دریافت کنه:
import ("flag""fmt")func main() {name := flag.String("name", "کاربر", "نام شما")age := flag.Int("age", 25, "سن شما")flag.Parse()fmt.Printf("سلام %s، سن شما %d سال است\n", *name, *age)}
اجرا:
go run main.go -name=Ali -age=30
در این بخش یاد گرفتیم چطور با فایلها کار کنیم، دادهها رو با JSON تبادل کنیم و ورودی از کاربر بگیریم. این مهارتها در اکثر پروژهها ضروری هستن.