כשפת תכנות, ל-Go יש מגוון רחב של תכונות מובנות, כולל היכולת ליצור, לקרוא ולכתוב קבצים כמו קבצי טקסט (.txt).

קבצים הם מרכיבים חשובים בחיי היומיום שלנו בעולם המודרני. קובצי טקסט שימושיים לאחסון נתונים מובנים הניתנים לקריאה על ידי אדם ללא שימוש בתוכנה חיצונית או מסדי נתונים.

אם אתה תוהה כיצד תוכל להתחיל לתפעל קבצי טקסט ב-Go, מאמר זה הוא המקום הנכון עבורך.

חבילת bufio בגו

ה bufio החבילה, שהיא חלק מהספרייה הסטנדרטית של Go, משמשת עבור פעולות קלט ופלט מאוחסנים, ומכאן השם. ה bufio החבילה מבוססת על io. קוֹרֵא ו io. סוֹפֵר ממשקים, שנמצאים בשימוש נרחב ביישום רוב החבילות הסטנדרטיות של Go.

ה bufio החבילה הולכת צעד אחד קדימה על ידי הטמעת חציצה, מה שהופך אותה לשימושית עבור פעולות IO הכוללות נתונים טקסטואליים.

כדי להשתמש ב bufio חבילה בתוכנית שלך, עליך לייבא אותה לצד חבילות אחרות.

יְבוּא (
"fmt"
"bufio"
)

בטח שמעת מתי התחילו עם Go שזה מגיע עם כל מה שאתה יכול להזדקק כמתכנת. לתקשורת ישירה עם מערכת ההפעלה שלך, יש חבילה בשם OS המספק פונקציות בלתי תלויות בפלטפורמה.

ה OS ו bufio חבילות הופכות את המניפולציה של קבצי טקסט לפשוטה להפליא.

instagram viewer

למרות שהרוב המכריע של OS הפונקציות של החבילה הן דמויות Unix, כולן משתמשות בסגנון Go של טיפול בשגיאות, מה שמקל על קריאת הודעות שגיאה וקוד ניפוי באגים.

אז איך מתפעלים קבצים המכילים טקסט ב-Go?

כיצד לקרוא נתונים מקובץ טקסט

כדי לקרוא נתונים מקובצי טקסט, עליך להתקשר ל- OS של החבילה לִפְתוֹחַ() function, שמקבלת את שם הקובץ לקריאה כפרמטר. שיטה נוספת לקבל את הקובץ היא באמצעות ה קובץ פתוח() פוּנקצִיָה.

ההבדל העיקרי בין לִפְתוֹחַ() ו קובץ פתוח() נמצא ביישום שלהם. לִפְתוֹחַ() פותח קובץ במצב קריאה בלבד (עם ה O_RDONLY דגל), תוך כדי קובץ פתוח() נותן יותר גמישות על ידי קבלת שלושה פרמטרים כלומר:

  • שם קובץ
  • מצב פתיחת קובץ: מצבי פתיחת הקבצים החוקיים מוצגים בטבלה למטה.
    דֶגֶל מַשְׁמָעוּת
    O_RDONLY פותח את הקובץ במצב קריאה בלבד
    O_WRONLY פותח את הקובץ במצב כתיבה בלבד
    O_RDWR פותח את הקובץ במצב קריאה-כתיבה
    O_APPEND מוסיף נתונים לקובץ בעת הכתיבה
    O_CREATE יוצר קובץ חדש אם לא קיים
    O_EXCL משמש עם O_CREATE, כדי לציין שיש ליצור את הקובץ רק אם הוא לא קיים
    O_SYNC פותח קובץ עבור I/O סינכרוני
    O_TRUNC חתוך את הקובץ בפתיחה, אם אפשר
  • הרשאות קובץ: זהה ל- סיביות הרשאת קובץ בלינוקס משמש לציון כללי גישה לקבצים, למשל, 0777 כדי להעניק הרשאות קריאה, כתיבה וביצוע לכל סוגי המשתמשים.

הקוד שלהלן מראה כיצד לקרוא נתונים מקובץ טקסט ב-Go באמצעות OS. לִפְתוֹחַ(), ו לִסְרוֹק() שבמקרה זה, פועל ב-a לך על לולאה.

חֲבִילָה רָאשִׁי
יְבוּא (
"bufio"
"fmt"
"עֵץ"
"OS"
)
/**
תוכן ה- "testfile.txt" קוֹבֶץ.
lorem ipsum dolor sit amet
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet
Lorem Ipsum Dolor Sit Amet
lOREM iPSUM dOLOR SIT aMET
LoReM IPSUM DoLoR SiT AmEt
*/
func רָאשִׁי(){
קובץ, שגיאה := os. לִפְתוֹחַ("testfile.txt")
// שיטה אחרת המשתמשת ב-OS. קובץ פתוח()
// file, err = os. קובץ פתוח("testfile.txt", OS. O_RDONLY, 0644)
אם שגיאה != אפס {
עֵץ.קָטלָנִי(לִטְעוֹת)
}
לִדחוֹתקוֹבֶץ.סגור()
fmt. Println("הקובץ נפתח בהצלחה. כעת קורא את תוכן הקובץ שורה אחר שורה:")
// לִיצוֹר סוֹרֵק מ ה קוֹבֶץללקרואטֶקסטמ
סורק := bufio. NewScanner (קובץ)
// סרוק או קרא את הבייטים של הטקסט שורה אחר שורה
לסוֹרֵק.לִסְרוֹק() {
fmt.הדפסה(סוֹרֵק.טֶקסט())
}
אם שגיאה := סורק. לִטְעוֹת(); טעות != אפס {
עֵץ.קָטלָנִי(לִטְעוֹת)
}
}

כאשר אתה מפעיל את הקוד למעלה עם לך להפעיל את filename.go, הוא מייצר את הפלט המוצג להלן:

אם תעביר רק את שם הקובץ ולא את הנתיב אל לִפְתוֹחַ() אוֹ קובץ פתוח() פונקציה עבור פעולות קריאה, Go מניח שהקובץ נמצא בספרייה הנוכחית ומחזיר שגיאה אם ​​הוא לא מוצא אותה. עליך לעבור בנתיב לקובץ אם אתה צריך לעבוד עם קבצים מחוץ לספרייה הנוכחית.

כיצד לכתוב נתונים לקובץ טקסט

ה bufio החבילה מספקת מאוחסן סוֹפֵר ממשק המאחסן בתים של נתונים וכותב אותם לקובץ בעזרת א סומק() פוּנקצִיָה.

הקוד הבא לדוגמה הוא המשך של הקוד לקריאת קובץ. בדוגמה זו, הנתונים נכתבים לקיים testfile.txt משתמש ב O_WRONLY ו O_APPEND דגלים.

הוסף את שורות הקוד הבאות לתוכנית למעלה, לפני הרצועה המתולתלת הסוגרת של ה- רָאשִׁי() פוּנקצִיָה:

// כתוב נתוני פלט לקובץ
קובץ, err = os. OpenFile("testfile.txt", os. O_APPEND|os. O_WRONLY, 0644)
אם טעות != אֶפֶס {
עֵץ. קטלני (שגיאה)
}
לִדחוֹת קוֹבֶץ. סגור()
fmt. Println("הקובץ נפתח בהצלחה, כעת מתכונן לכתיבת נתונים לקובץ...")
// צור אובייקט Writer מאוחסן כדי לכתוב נתונים לקובץ
textWriter := bufio. NewWriter (קובץ)
// כתוב מחרוזת למאגר לפני שמירת הקובץ.
_, err = textWriter. WriteString("-זהו א חָדָשׁ טקסט נוסף לקובץ.")
אם טעות != אֶפֶס {
עֵץ. קטלני (שגיאה)
}
textWriter. סומק()
fmt. Println("הנתונים נכתבו לקובץ בהצלחה...")

הפלט של התוכנית השלמה שלך אמור להיראות כך:

כאשר אתה פותח את testfile.txt קובץ, תראה גם את השורה החדשה המצורפת בסוף הקובץ בדיוק כמו התמונה למטה:

טיפול בקבצים ב-Go קל

Go מאפשרת לך לעבוד עם מגוון קבצים, לא רק עם קבצי טקסט. ישנן מספר רב של ספריות ופונקציות מובנות נוספות לעבודה עם סוגים שונים של נתונים מקבצים, כולל JSON ו-CSV.

כדי לראות כיצד הם מתנהגים בצורה שונה בהתאם למצב, אתה יכול להתנסות עם הדגלים וההרשאות הקבצים השונות הזמינות לשימוש עם קובץ פתוח().