Lets GO

שלום לכולם,go logo

הגיע הזמן שנעשה איזה פוסט על שפת go

כשמחפשים בגוגל  לחפש ערך: golang

קצת על go מויקיפדיה:

“GO היא שפת תכנות התומכת במובהק בעיבוד מקבילי ובעלת תמיכה חלקית בתכנות מונחה-עצמים, בעלת טיפוסיות סטטית ובטוחה ותחביר הדומה לזה של שפת  C. השפה מעוצבת על ידי חברת גוגל.” 

בטוח שיצא לכם בכל שפה ו\או טכנולוגיה, לכתוב אפליקציה שרצה או על המחשב המקומי או מרוחק ומציגה או שולחת במייל כמה מקום פנוי יש בכוננים.

אז קודם כל, אני  משתמש בwin 32 API (בפוסט הזה לא נרחיב בנושא)

בדוגמא  שלנו, אני מציג כמה יכולות של go,

 דוגמאות מלאות יותר ניתן למצוא בלינק הבא http://tour.golang.org/#1

לצורך הבהרה: Package  = חבילה

 זאת דוגמא של hello world

שורה הנ”ל מכילה 2 אובייקטים:

Fmt – חבילה שמממשת כתיבות IO עיצוביות למסך

http://golang.org/pkg/fmt/

 Println – מתודה שכותבת למסך, בדוגמא שלנו string פשוט

http://golang.org/pkg/fmt/#Println

 ועכשיו לחלק המעניין יותר של הפוסט

 בחלק הזה יש חלקים עיקריים:

      1. לקבל רשימה של כוננים שיש במחשב

      2. לקבל אינפורמציה עבור כל כונן

פונקציה GetLogicalDrives, לא מקבלת שום פלט, אך מחזירה מערך של strings

http://golang.org/pkg/syscall/

טוען את kernel32.dll  עבור win 32 API.

 מקבל מצביע למתודה.

אחרי שמריצים את GetLogicalDrives, מקבלים 1000100,  bitmap של כוננים.

אחרי לולאות ופרסור, הdrives מכיל רשימה של כוננים עם [c:,g:]

חזרה לmain

 

נריץ את GetDiskFreeSpaceEx

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364937(v=vs.85).aspx

ממש לפי הAPI

מריצים לולאה על גבי רשימת הכוננים

עבור כל כונן, נריץ את GetDiskFreeSpaceEx

שמקבל פרמטר אחד שזה שם כונן, ו3 פרמטרים של גדלים שחוזרים מהמתודה.

 נריץ לפי API את

 

 משמעות מספר  6 בשם syscall  שזה יהיה לפי נוסחה הבא

trap   = מחזיק את הכתובת של procedure הרצוי

Nargs = שווה לכמות הפרמטרים שיש לפונקציה שלנו (במקרה שלנו 4)

מייצר מצביע בזיכרון עבור הפרמטר הרלוונטי.

מידע נוסף ניתן לקבל בלינקים הבאים:

http://golang.org/pkg/unsafe/

http://www.goinggo.net/2013/07/understanding-pointers-and-memory.html

את התוצאות נדפיס ישר למסך, בעזרת חבילת fmt.

הערות:

1. איך עושים foreach  בgo

 2. בפוסט השתמשתי בMustLoadDLL ו גם LoadLibrary, שניהם עושים את אותה פעולה, פשוט MustLoadDLL מעיף שגיאה אם לא מוצא את הdll.

מצורף קוד מלא של הפוסט:

כשמריצים את האפליקציה,   מקבלים את המסך הבא

ניתן לראות שהקוד עובד

result go

go drives

ניתן לראות שהוא מכליל את G ככונן, בדר”כ יש type ואז לא מקבלים תוצאות עם 0.

מקווה שהפוסט היה מעניין ואשמח לענות על שאלות

Leave a Reply

Your email address will not be published. Required fields are marked *

*