דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך עובד struct tags בGO?

איך עובד struct tags בGO?

מתוזמן נעוץ נעול הועבר תכנות
11 פוסטים 3 כותבים 139 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • nigunN מנותק
    nigunN מנותק
    nigun
    כתב ב נערך לאחרונה על ידי
    #1

    למי שמכיר קצת את GO יש תגיות שמוסיפים לstruct
    כשרוצים לקבל משתנים ממקור חיצוני.
    ראיתי מלמעלה כמה פוסטים שמסבירים את הנקודה
    אבל לא כ"כ הבנתי את הנקודה.

    אולי מישהו יכול להסביר את זה בעברית?
    (אם אין לכם את זה בשליפה, בבקשה אל תתאמצו
    אני מקסימום ישב על זה עוד קצת עד שאני יקלוט)

    מייל: nigun@duck.com

    י תגובה 1 תגובה אחרונה
    0
    • י מנותק
      י מנותק
      יוסף בן שמעון
      השיב לnigun ב נערך לאחרונה על ידי
      #2

      @nigun אתה שואל למה צריך את זה או איך משתמשים בזה?

      nigunN תגובה 1 תגובה אחרונה
      0
      • nigunN מנותק
        nigunN מנותק
        nigun
        השיב ליוסף בן שמעון ב נערך לאחרונה על ידי
        #3

        @יוסף-בן-שמעון
        איך זה עובד מאחורי הקלעים?
        אני משתמש בזה כרגע בלי להבין.

        מייל: nigun@duck.com

        yossizY תגובה 1 תגובה אחרונה
        0
        • yossizY מחובר
          yossizY מחובר
          yossiz
          השיב לnigun ב נערך לאחרונה על ידי yossiz
          #4

          @nigun ממה שאני מבין זה סתם חתיכת מטה דאטה שאתה יכול לשייך לשדה של struct.
          אפשר לכתוב שם מה שבא לך.
          יש גם חבילות שמשתמשות בתגים כדי לאפשר למתכנת להעביר לספרייה מידע אודות השדה. למשל חבילת encoding/json. ואז הם מצפים שהמטה דאטה יהיה בפורמט מסויים.
          אין כאן הרבה קסמים ✨ מאחורי הקלעים

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          nigunN תגובה 1 תגובה אחרונה
          1
          • nigunN מנותק
            nigunN מנותק
            nigun
            השיב לyossiz ב נערך לאחרונה על ידי
            #5

            @yossiz
            אז בא נקח את json.Unmarshal כדוגמא
            מה קורה מאחורי הקלעים?
            החבילה מחפשת את הערך שתואם לתווית
            ומוסיפה אותו לstruct
            ואם הערך לא קיים בסטרינג הוא פשוט לא מוסיף אותו?
            https://play.golang.org/p/raH8JBtmGfW

            מייל: nigun@duck.com

            yossizY תגובה 1 תגובה אחרונה
            0
            • yossizY מחובר
              yossizY מחובר
              yossiz
              השיב לnigun ב נערך לאחרונה על ידי
              #6

              @nigun אמר באיך עובד struct tags בGO?:

              החבילה מחפשת את הערך שתואם לתווית
              ומוסיפה אותו לstruct
              ואם הערך לא קיים בסטרינג הוא פשוט לא מוסיף אותו?

              בדיוק

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              י תגובה 1 תגובה אחרונה
              1
              • י מנותק
                י מנותק
                יוסף בן שמעון
                השיב לyossiz ב נערך לאחרונה על ידי
                #7

                @yossiz אמר באיך עובד struct tags בGO?:

                בדיוק

                כמעט.
                הבעיה שאיתה צריך להתמודד בהמרה לJSON היא זו:
                המעצבים של גו החליטו על דרך מקורית להפריד בין נכסים ציבוריים של מחלקה\חבילה לנכסים פרטיים, כל נכס ששמו מתחיל באות גדולה הוא ציבורי, ובאות קטנה הוא פרטי. (נכס ציבורי - נכס שנגיש גם מחוץ למחלקה, נכס פרטי - נגיש רק לחברי המחלקה)
                נמצא שאם אבנה מבנה כזה:

                struct Person{
                	id int
                	firstName string
                }
                

                לא אוכל להמיר אותו למחרוזת בתקן JSON, כי לחבילה של ההמרה לא תהיה גישה לנכסים id firstName, והיא לא תדע על קיומם ועל הערכים שלהם.
                ואם אכריז עליהם ציבוריים:

                struct Person{
                	Id int
                	FirstName string
                }
                

                ואמיר אותם למחרוזת, אקבל מחרוזת כזו

                {Id:1, FirstName:"Moshe"}
                

                וזה לא יהיה תקין, כי המוסכמה של JSON היא camel case 🐫 שהאות הראשונה קטנה.
                בשביל זה מוסיפים לכל שדה הערה שמחילה ב json: וכשהחבילה ממירה את המבנה למחרוזת היא מחפשת האם קיימת הערה שנוגעת אליה, אם כן - היא לוקחת ממנה את ההוראות של שם הנכס ודרכי הטיפול בנכס, אחרת היא לא מתעלמת מהנכס לגמרי, היא נותנת לו את שם ברירת המחדל שלו, דהיינו השם שמתחיל באות גדולה.

                nigunN תגובה 1 תגובה אחרונה
                3
                • nigunN מנותק
                  nigunN מנותק
                  nigun
                  השיב ליוסף בן שמעון ב נערך לאחרונה על ידי
                  #8

                  @יוסף-בן-שמעון
                  יש גם את הפיצ'ר של omitempty
                  שאם הערך ריק הוא לא מציג אותו בכלל, במקום להציג אותו כשהוא ריק.
                  https://play.golang.org/p/hOahiVs2dv0

                  מייל: nigun@duck.com

                  י תגובה 1 תגובה אחרונה
                  0
                  • י מנותק
                    י מנותק
                    יוסף בן שמעון
                    השיב לnigun ב נערך לאחרונה על ידי
                    #9

                    @nigun יש גם אפשרות להשמיט את השדה בכל מצב על ידי -

                    nigunN תגובה 1 תגובה אחרונה
                    1
                    • nigunN מנותק
                      nigunN מנותק
                      nigun
                      השיב ליוסף בן שמעון ב נערך לאחרונה על ידי
                      #10

                      @יוסף-בן-שמעון
                      מה השימוש בזה?
                      אם אתה לא רוצה אל תכניס אותו לstruct (איך אומרים struct בעברית)

                      מייל: nigun@duck.com

                      תגובה 1 תגובה אחרונה
                      0
                      • nigunN מנותק
                        nigunN מנותק
                        nigun
                        כתב ב נערך לאחרונה על ידי
                        #11

                        אגב נתקלתי בתוסף
                        שמוסיף את כל התגיות באופן אוטומטי במקום לעשות העתק הדבק אינסופי
                        https://github.com/fatih/gomodifytags

                        מייל: nigun@duck.com

                        תגובה 1 תגובה אחרונה
                        0

                        בא תתחבר לדף היומי!
                        • התחברות

                        • אין לך חשבון עדיין? הרשמה

                        • התחברו או הירשמו כדי לחפש.
                        • פוסט ראשון
                          פוסט אחרון
                        0
                        • דף הבית
                        • קטגוריות
                        • פוסטים אחרונים
                        • משתמשים
                        • חיפוש
                        • חוקי הפורום