תגובות: מדריך GO
-
כדי לעשות קצת סדר אני ינסה לענות כל השאלות כאן
@אהרן
אם הבנתי נכון אתה רוצה שיהיה אפשרות לנהל את הפונקציה גם אחרי שקראתי לה בקריאה אסינכרונית
למשל שלא ידפיס את התוצאה עד שיקרה פעולה מסויימת?
@WWW
אני משער שהתכוונת שצריך מעבר שורה ולא משתמשים ב;
אני גם בהתחלה לא הבנתי למה הם הורידו את זה
אבל הם טוענים שהם הגיעו למסקנה שזה לא עוזר לכלום
וזה רק מציק כששוכחים לשים אותו, וזה לא עושה את הקוד יותר קריא
למעשה אני לא מרגיש שזה חסר לי בכלל. -
תכנות אסינכרוני בGO
בGO ניתן לקרוא לפונקציה ולא לחכות עד היא תגמר על ידי נוספת המילה go לפני הפונקציה
בא נקח קוד לדוגמא (אפשר לשחק עם זה גם כאן)package main import ( "fmt" "time" ) func sleepAndSay(s string) { time.Sleep(100 * time.Millisecond) fmt.Println(s) } func main() { go sleepAndSay("world") fmt.Println("hello") time.Sleep(200 * time.Millisecond) }
הפלט יהיה
hello world
כאן אנו יכולים לראות שייבאנו את החבילה TIME ושהכנסנו את כל החבילות המיובאות לתוך סוגריים
זה פשוט בשביל הנוחות כשמייבאים חבילות מרובות.
וכן יצרנו פונציה בשם sleepAndSay עם המשתנה s מסוג סטרינג
בתוך הפונקציה אנו ממתינים 100 מילי שניות
ואז מדפיסים את הערך שקיבלנו במשתנה sבפונקציה הראשית (main)
אנו קוראים ל
sleepAndSay("world")
עם המילה go לפניו
ומיד אחר כך מדפיסים את המילה hello
ואחר כך מחכים עוד 200 מילישניות
כדי שכל הפונקציות שקראנו אליהם באופן אסינכרוני יגמרו לפני שהפונקציה הראשית תגמר.אם לא קלטתם עדיין את העניין?
אפשר לשחק עם הסדר של הפונקציות ולהוסיף ולהוריד go לפני הפונקציות. -
תכנות אסינכרוני בGO
בGO ניתן לקרוא לפונקציה ולא לחכות עד היא תגמר על ידי נוספת המילה go לפני הפונקציה
בא נקח קוד לדוגמא (אפשר לשחק עם זה גם כאן)package main import ( "fmt" "time" ) func sleepAndSay(s string) { time.Sleep(100 * time.Millisecond) fmt.Println(s) } func main() { go sleepAndSay("world") fmt.Println("hello") time.Sleep(200 * time.Millisecond) }
הפלט יהיה
hello world
כאן אנו יכולים לראות שייבאנו את החבילה TIME ושהכנסנו את כל החבילות המיובאות לתוך סוגריים
זה פשוט בשביל הנוחות כשמייבאים חבילות מרובות.
וכן יצרנו פונציה בשם sleepAndSay עם המשתנה s מסוג סטרינג
בתוך הפונקציה אנו ממתינים 100 מילי שניות
ואז מדפיסים את הערך שקיבלנו במשתנה sבפונקציה הראשית (main)
אנו קוראים ל
sleepAndSay("world")
עם המילה go לפניו
ומיד אחר כך מדפיסים את המילה hello
ואחר כך מחכים עוד 200 מילישניות
כדי שכל הפונקציות שקראנו אליהם באופן אסינכרוני יגמרו לפני שהפונקציה הראשית תגמר.אם לא קלטתם עדיין את העניין?
אפשר לשחק עם הסדר של הפונקציות ולהוסיף ולהוריד go לפני הפונקציות. -
@nigun בינתיים, מצאתי כבר משהו שמעצבן אותי בשפה הזו, שסוף פיסקה זה סוף משפט, (ככה זה נראה עכ"פ), מזכיר לי את VB
, -
כדי לעשות קצת סדר אני ינסה לענות כל השאלות כאן
@אהרן
אם הבנתי נכון אתה רוצה שיהיה אפשרות לנהל את הפונקציה גם אחרי שקראתי לה בקריאה אסינכרונית
למשל שלא ידפיס את התוצאה עד שיקרה פעולה מסויימת?
@WWW
אני משער שהתכוונת שצריך מעבר שורה ולא משתמשים ב;
אני גם בהתחלה לא הבנתי למה הם הורידו את זה
אבל הם טוענים שהם הגיעו למסקנה שזה לא עוזר לכלום
וזה רק מציק כששוכחים לשים אותו, וזה לא עושה את הקוד יותר קריא
למעשה אני לא מרגיש שזה חסר לי בכלל.@nigun אמר בתגובות: מדריך GO:
כדי לעשות קצת סדר אני ינסה לענות כל השאלות כאן
@אהרן
אם הבנתי נכון אתה רוצה שיהיה אפשרות לנהל את הפונקציה גם אחרי שקראתי לה בקריאה אסינכרונית
למשל שלא ידפיס את התוצאה עד שיקרה פעולה מסויימת?
@WWW
אני משער שהתכוונת שצריך מעבר שורה ולא משתמשים ב;
אני גם בהתחלה לא הבנתי למה הם הורידו את זה
אבל הם טוענים שהם הגיעו למסקנה שזה לא עוזר לכלום
וזה רק מציק כששוכחים לשים אותו, וזה לא עושה את הקוד יותר קריא
למעשה אני לא מרגיש שזה חסר לי בכלל. -
-
חשבתי להוסיף למדריך הסבר קצר על מצביעים
מנסה למצוא קוד שידגים את זה טוב
חשבתי על משהו כזה:package main import "fmt" func main() { n := 0 pointer := &n fmt.Println(pointer) go control(pointer) for i := 1; i < 5; i++ { fmt.Println(n) } } func control(p *int){ for i := 1; i < 5; i++ { *p++ } }
https://play.golang.org/p/H7DZnD1iney
האם זה ברור או שיש דוגמאות שמבטאים את זה יותר טוב?
@יוסף-בן-שמעון @yossiz