כתיבת התוכנית הראשונה שלך ללכת בו זמנית על אובונטו
שפת התכנות של Google כבר בסביבה מאז 2009 ובשנת 2012, השפה הגיעה לסטטוס הרשמי v1.0 שלה. באותן שנים שחלפו, הרבה השתנה כולל איך השפה מותקנת. חזרה בחיתוליו, לא היו שום הפצות בינאריות רשמיות, וגם היית צריך לבנות את Google מתוך קוד המקור, שהייתה השיטה המומלצת מאז השפה השתנתה לעתים קרובות, או להשתמש בחבילה שנבנתה מראש עבור ההפצה לינוקס שלך. אז התמיכה של Windows הייתה מוגבלת כמו תמיכה בארכיטקטורות CPU מלבד Intel.
דברים השתפרו מאוד מאז. עבור לינוקס, ישנן שתי דרכים קלות להתקין Go. הורד את לינוקס הרשמי בינארי לבנות מתוך דף הורדות Go או לבחור עבור חבילת בנוי מראש עבור הפצה לינוקס שלך. הדרך הקלה ביותר להתקנה עבור על אובונטו היא להשתמש apt-get
:
sudo apt-get להתקין golang
לאחר התקנת Google, תוכל להתחיל לפתח תוכניות. אחת התוכנות הפשוטות ביותר היא תוכנית הקלאסית "שלום עולם!". באמצעות עורך טקסט, ליצור קובץ בשם " hellomte.go
" עם קוד Go קצר הבא:
החבילה העיקרית לייבא "fmt" func הראשי () {fmt.Println ("שלום להפוך את הטכנולוגיה קלה יותר!"}
מאז v1.0 של Go, הצורך יחיד לקמפל פקודות הקישור הוסר ואת הישן 8g
ו 8l
פקודות הוחלפו הפקודה go
.
כדי להפעיל hellomte.go
, לפתוח מסוף ולשנות ספרייה לתיקייה המכילה את קובץ קוד המקור ולאחר מכן הקלד:
ללכת לרוץ
זה יהיה לקמפל ולהפעיל את התוכנית Go אבל זה לא ייצר בינארי הפעלה. כדי ליצור בינארי ולאחר מכן להפעיל אותו להשתמש בפקודה go build
:
ללכת לבנות
הכוח של מקביליות
אחד המאפיינים המגדירים של שפת התכנות Go הוא תמיכתו בקביליות המאפשרת לתוכנית לעבוד עם משימות מרובות בבת אחת. מקבילות, הדומה מקביליות, מאפשרת לתוכנית לבצע משימות רבות בו זמנית, אבל מקביליות הולך צעד אחד קדימה, בכך שהוא מאפשר אלה משימות נפרדות לתקשר וליצור אינטראקציה. כתוצאה מכך, Go מאפשר למתכנתים להשתמש במגוון שלם של עיצובים מקבילים שונים, כולל בריכות עובדים, צינורות (כאשר משימה אחת מתרחשת לאחר), ומשימות רקע סינכרוני או אסינכרוני. הבסיס של מקביליות זו היא goroutine
יחד עם channels
והצהרה select
של גו.
הנה תוכנית פשוט ללכת אשר הדפסים מחרוזת מספר פעמים באמצעות goroutine בו זמנית:
החבילה הראשי יבוא ("fmt" "זמן") func לומר (מחרוזת) {עבור i: = 0; i <5; אני (+) () "go" ().
הפונקציה say()
רק מבצע לולאה פשוטה להדפיס את המחרוזת (פרמטר s
) חמש פעמים. הדבר המעניין הוא איך קוראים לפונקציה הזאת. במקום רק קורא קורא say("Hello Make Tech Easier!")
את מילת המפתח go
ממוקם מול הקריאה לפונקציה. משמעות הדבר היא שהפונקציה תפעל כמשימה נפרדת. שאר הפונקציה main()
אז פשוט ישן קצת כדי לתת זמן goroutine
כדי להשלים.
הפלט עשוי להפתיע אותך:
כפי שניתן לראות את הפונקציה say()
פועל כמו goroutine
ובעוד זה להיות ההתקנה את שאר הפונקציה main()
ממשיך, להדפיס את Sleep a little...
ואז הולך לישון. בשלב זה goroutine
פעיל ומתחיל להדפיס את המחרוזת חמש פעמים. לבסוף התוכנית מסתיימת פעם את מגבלת הזמן הקצוב כפי שהגיע.
ערוצים
goroutines
יכול לתקשר באמצעות ערוצים. ערוץ פותח קו תקשורת בין שני חלקים שונים של תוכנית Go. בדרך כלל פונקציה תיקרא כמו goroutine
ואם זה צריך לשלוח נתונים בחזרה (למשל מתוך פעולת רשת) זה יכול להשתמש בערוץ להעביר את הנתונים. אם חלק אחר בתוכנית Go ממתין לנתונים אלה, הוא יישן עד שהנתונים יהיו מוכנים. ערוצים נוצרים באמצעות הפונקציה make()
והם יכולים להיות מועברים כפרמטרים goroutines
.
שקול קוד זה:
("fmt") func לומר (s מחרוזת, C צ 'אן int) {var i int i = 0; i <5; [c: = ()) (chan int) ללכת להגיד ("הלו להפוך את הטכנולוגיה קל יותר!", ג) STS: = <c fmt.Println (= sts)}
הפונקציה say()
דומה מאוד לדוגמה הראשונה, פרט לכך שהפרמטר השני הוא ערוץ וכי לאחר הדפסת המחרוזת, מספר האיטרציות ישלח את הערוץ דרך שורת הקוד c <- i
.
הפונקציה הראשית יוצרת ערוץ, מתחילה את הפונקציה say()
בתור goroutine
ולאחר מכן מחכה שהנתונים יורדים בערוץ, sts := <- c
לפני הדפסת התוצאה.
סיכום
שפת Go התקדמה באופן משמעותי במהלך השנים האחרונות, אם לא הסתכלת על זה לאחרונה אולי עכשיו זה זמן טוב!