Mình có hàm helloWorld thế này:
func helloWorld() { fmt.Print("Hello"); go func() { fmt.Println(" World"); }() }
Nhưng khi gọi hàm này thì không thấy World được in ra, vậy khi nào go func được gọi mọi người nhỉ?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
khả năng là hàm helloWorld() đã thực thi xong và chương trình của bạn đã thoát trước khi go func() được chạy.
Bạn thử sleep vài giây ở cuối hàm helloWorld() thì sẽ thấy go func() chạy và in ra màn hình.
Vẫn không được:
Nếu chỉ để thế này thì OK:
Vậy sự khác biệt giữa có go và không có go là gì?
Hàm sleep bạn đang dùng sai
Hoặc có 1 cách khác dùng channel như thế này
Khi có `go` thì sẽ function sẽ được chạy ở 1 routine khác, nếu routine chính (helloWorld) không đợi routine mới khởi tạo (go func) thực thi xong mà đã kết thúc thì sẽ không nhìn thấy kết quả của routine go func.
bản chất ở đó là nó chạy 1 goroutine khác so với main routine anh nha. Mà do main routine đã kết thúc trước khi goroutine print chữ “world” được gọi. Vì thế mình không nhìn thấy nó in ra. Nếu muốn nhìn thấy “hello world” em nghĩ có thể sleep chương trình lại một chút hoặc dùng channel để block lại chương trình cho đến khi in ra
Đúng anh Thược rồi 😁
Vậy thì lợi ích của việc viết hàm go func này là gì? nó khác gì với việc dùng defer?
go func sẽ thực hiện function đó ở một context khác anh ạ. còn defer thì khi kết thúc cái context của hàm đó thì nó sẽ được thực hiện cuối cùng ạ
ơ chú cũng dùng nền tảng này à. thi thoảng lên đây ae trao đổi chiêu thức