Vòng lặp và Closure: Ác mộng một thời của các tín đồ Golang
09/05/2025
Dương TrầnTech enthusiast on a lifelong quest to break, build, and secure cool stuff. Known in the team as the go-to rubber duck 🦆.
Về tác giả

Dương TrầnTech enthusiast on a lifelong quest to break, build, and secure cool stuff. Known in the team as the go-to rubber duck 🦆. Tech enthusiast on a lifelong quest to break, build, and secure cool stuff. Known in the team as the go-to rubber duck 🦆.
Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn
{"success":true,"head":"<title>Vòng lặp và Closure - Ác mộng một thời của các tín đồ Golang</title>\n<meta name=\"description\" content=\"Nếu bạn từng viết Go, chắc hẳn đã từng gặp tình huống kỳ lạ khi sử dụng biến của vòng lặp for (loop variable). Bài viết này sẽ giúp bạn xử lý biến vòng lặp bị "capture" sai cách trong closure.\"/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large\"/>\n<link rel=\"canonical\" href=\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/\" />\n<meta property=\"og:locale\" content=\"en_US\" />\n<meta property=\"og:type\" content=\"article\" />\n<meta property=\"og:title\" content=\"Vòng lặp và Closure - Ác mộng một thời của các tín đồ Golang\" />\n<meta property=\"og:description\" content=\"Nếu bạn từng viết Go, chắc hẳn đã từng gặp tình huống kỳ lạ khi sử dụng biến của vòng lặp for (loop variable). Bài viết này sẽ giúp bạn xử lý biến vòng lặp bị "capture" sai cách trong closure.\" />\n<meta property=\"og:url\" content=\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/\" />\n<meta property=\"og:site_name\" content=\"CyStack Tutorial\" />\n<meta property=\"article:author\" content=\"Techno-FunctionalProjectManager|SecurityEngineer|BackendWhisperer.\" />\n<meta property=\"article:tag\" content=\"vi\" />\n<meta property=\"article:section\" content=\"Chuyên gia\" />\n<meta property=\"og:updated_time\" content=\"2026-04-28T11:56:39+07:00\" />\n<meta property=\"og:image\" content=\"https://s2.cystack.net/tutorial/09160031/vong-lap-va-closure-1.png\" />\n<meta property=\"og:image:secure_url\" content=\"https://s2.cystack.net/tutorial/09160031/vong-lap-va-closure-1.png\" />\n<meta property=\"og:image:width\" content=\"1200\" />\n<meta property=\"og:image:height\" content=\"630\" />\n<meta property=\"og:image:alt\" content=\"vòng lặp và closure\" />\n<meta property=\"og:image:type\" content=\"image/png\" />\n<meta property=\"article:published_time\" content=\"2025-05-09T16:01:16+07:00\" />\n<meta property=\"article:modified_time\" content=\"2026-04-28T11:56:39+07:00\" />\n<meta name=\"twitter:card\" content=\"summary_large_image\" />\n<meta name=\"twitter:title\" content=\"Vòng lặp và Closure - Ác mộng một thời của các tín đồ Golang\" />\n<meta name=\"twitter:description\" content=\"Nếu bạn từng viết Go, chắc hẳn đã từng gặp tình huống kỳ lạ khi sử dụng biến của vòng lặp for (loop variable). Bài viết này sẽ giúp bạn xử lý biến vòng lặp bị "capture" sai cách trong closure.\" />\n<meta name=\"twitter:image\" content=\"https://s2.cystack.net/tutorial/09160031/vong-lap-va-closure-1.png\" />\n<meta name=\"twitter:label1\" content=\"Written by\" />\n<meta name=\"twitter:data1\" content=\"Dương Trần\" />\n<meta name=\"twitter:label2\" content=\"Time to read\" />\n<meta name=\"twitter:data2\" content=\"12 minutes\" />\n<script type=\"application/ld+json\" class=\"rank-math-schema\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://blog.cystack.org/tutorial/#person\",\"name\":\"CyStack Tutorial\"},{\"@type\":\"WebSite\",\"@id\":\"https://blog.cystack.org/tutorial/#website\",\"url\":\"https://blog.cystack.org/tutorial\",\"name\":\"CyStack Tutorial\",\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https://s2.cystack.net/tutorial/09160031/vong-lap-va-closure-1.png\",\"url\":\"https://s2.cystack.net/tutorial/09160031/vong-lap-va-closure-1.png\",\"width\":\"1200\",\"height\":\"630\",\"caption\":\"v\\u00f2ng l\\u1eb7p v\\u00e0 closure\",\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":\"1\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":\"2\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/category/chuyen-gia/\",\"name\":\"Chuy\\u00ean gia\"}},{\"@type\":\"ListItem\",\"position\":\"3\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/\",\"name\":\"V\\u00f2ng l\\u1eb7p v\\u00e0 Closure: \\u00c1c m\\u1ed9ng m\\u1ed9t th\\u1eddi c\\u1ee7a c\\u00e1c t\\u00edn \\u0111\\u1ed3 Golang\"}}]},{\"@type\":\"WebPage\",\"@id\":\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/#webpage\",\"url\":\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/\",\"name\":\"V\\u00f2ng l\\u1eb7p v\\u00e0 Closure - \\u00c1c m\\u1ed9ng m\\u1ed9t th\\u1eddi c\\u1ee7a c\\u00e1c t\\u00edn \\u0111\\u1ed3 Golang\",\"datePublished\":\"2025-05-09T16:01:16+07:00\",\"dateModified\":\"2026-04-28T11:56:39+07:00\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/#website\"},\"primaryImageOfPage\":{\"@id\":\"https://s2.cystack.net/tutorial/09160031/vong-lap-va-closure-1.png\"},\"inLanguage\":\"en-US\",\"breadcrumb\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/#breadcrumb\"}},{\"@type\":\"Person\",\"@id\":\"https://blog.cystack.org/tutorial/author/duongtt/\",\"name\":\"D\\u01b0\\u01a1ng Tr\\u1ea7n\",\"url\":\"https://blog.cystack.org/tutorial/author/duongtt/\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https://secure.gravatar.com/avatar/1e188c38efc1c39f1c24f2a3c694c3c9452f2dee05fa635e6c094c391c7e1c14?s=96&d=mm&r=g\",\"url\":\"https://secure.gravatar.com/avatar/1e188c38efc1c39f1c24f2a3c694c3c9452f2dee05fa635e6c094c391c7e1c14?s=96&d=mm&r=g\",\"caption\":\"D\\u01b0\\u01a1ng Tr\\u1ea7n\",\"inLanguage\":\"en-US\"},\"sameAs\":[\"Techno-FunctionalProjectManager|SecurityEngineer|BackendWhisperer.\"]},{\"@type\":\"BlogPosting\",\"headline\":\"V\\u00f2ng l\\u1eb7p v\\u00e0 Closure - \\u00c1c m\\u1ed9ng m\\u1ed9t th\\u1eddi c\\u1ee7a c\\u00e1c t\\u00edn \\u0111\\u1ed3 Golang\",\"datePublished\":\"2025-05-09T16:01:16+07:00\",\"dateModified\":\"2026-04-28T11:56:39+07:00\",\"articleSection\":\"Chuy\\u00ean gia, Fix Bug, Go\",\"author\":{\"@id\":\"https://blog.cystack.org/tutorial/author/duongtt/\",\"name\":\"D\\u01b0\\u01a1ng Tr\\u1ea7n\"},\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"description\":\"N\\u1ebfu b\\u1ea1n t\\u1eebng vi\\u1ebft Go, ch\\u1eafc h\\u1eb3n \\u0111\\u00e3 t\\u1eebng g\\u1eb7p t\\u00ecnh hu\\u1ed1ng k\\u1ef3 l\\u1ea1 khi s\\u1eed d\\u1ee5ng bi\\u1ebfn c\\u1ee7a v\\u00f2ng l\\u1eb7p for (loop variable). B\\u00e0i vi\\u1ebft n\\u00e0y s\\u1ebd gi\\u00fap b\\u1ea1n x\\u1eed l\\u00fd bi\\u1ebfn v\\u00f2ng l\\u1eb7p b\\u1ecb "capture" sai c\\u00e1ch trong closure.\",\"name\":\"V\\u00f2ng l\\u1eb7p v\\u00e0 Closure - \\u00c1c m\\u1ed9ng m\\u1ed9t th\\u1eddi c\\u1ee7a c\\u00e1c t\\u00edn \\u0111\\u1ed3 Golang\",\"@id\":\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/#richSnippet\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/#webpage\"},\"image\":{\"@id\":\"https://s2.cystack.net/tutorial/09160031/vong-lap-va-closure-1.png\"},\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/05/09/golang-vong-lap-va-closure/#webpage\"}}]}</script>\n"}