برنامه نویسی
نحوه اسکن در GoLang

در Go (golang)، بسته fmt چندین عملکرد را برای اسکن ورودی از کنسول یا سایر منابع ورودی ارائه می دهد.
برای من اینها همیشه در طول آزمون و بسیاری از زمینه های دیگر مفید بوده اند. و تا الان معمولا با 4 عملکرد در حین اسکن کار می کنم.
بیایید برخی از آنها را بررسی کنیم و ببینیم چگونه، چرا و چه زمانی از آن استفاده کنیم.
1. fmt.Scan
- هدف: ورودی جدا شده با فاصله از ورودی استاندارد (کنسول) را می خواند.
- خواندن را متوقف می کند: در اولین خط جدید یا فضای خالی متوقف می شود.
- متغیرهای چندگانه: می تواند چندین متغیر را در یک تماس بخواند.
- برمیگرداند: تعداد موارد با موفقیت اسکن شده و خطا در صورت وجود.
مثال:
package main
import (
"fmt"
)
func main() {
var name string
var age int
fmt.Print("Enter your name and age: ")
fmt.Scan(&name, &age) // Reading input separated by space
fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}
مثال ورودی:
Alice 25
خروجی:
Hello Alice, you are 25 years old.
2. fmt.Scanln
-
هدف: ورودی را تا خط جدید می خواند (
\n
) مواجه می شود. - خواندن را متوقف می کند: به جای فضای خالی در خط جدید متوقف می شود.
- متغیرهای چندگانه: می تواند چندین متغیر را بخواند اما اگر ابتدا به خط جدید برسد متوقف می شود.
- برمیگرداند: تعداد موارد با موفقیت اسکن شده و خطا در صورت وجود.
مثال:
package main
import (
"fmt"
)
func main() {
var name string
var age int
fmt.Print("Enter your name and age: ")
fmt.Scanln(&name, &age) // Reads until newline is encountered
fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}
مثال ورودی:
Alice 25
خروجی:
Hello Alice, you are 25 years old.
3. fmt.Scanf
-
هدف: ورودی فرمتشده را با استفاده از مشخصکنندههای قالب (مانند
%s
،%d
،%f
). - خواندن را متوقف می کند: بر اساس فرمت مشخص شده متوقف می شود.
- متغیرهای چندگانه: می تواند چندین متغیر را با کنترل دقیق با استفاده از مشخص کننده های قالب بخواند.
- برمیگرداند: تعداد موارد با موفقیت اسکن شده و خطا در صورت وجود.
مثال:
package main
import (
"fmt"
)
func main() {
var name string
var age int
fmt.Print("Enter your name and age (formatted): ")
fmt.Scanf("%s %d", &name, &age) // Reads formatted input
fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}
مثال ورودی:
Alice 25
خروجی:
Hello Alice, you are 25 years old.
4. bufio.NewReader
(برای مدیریت ورودی پیشرفته)
-
هدف: قابلیت های خواندن ورودی پیشرفته تری را در مقایسه با
fmt
. - خواندن را متوقف می کند: به خواندن یک خط کامل از جمله فاصله ها اجازه می دهد.
- متغیرهای چندگانه: ورودی را به صورت یک رشته می خواند و سپس در صورت نیاز می تواند بیشتر تقسیم شود.
- برمیگرداند: خط ورودی کامل به عنوان یک رشته.
مثال:
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter your name and age: ")
input, _ := reader.ReadString('\n') // Reads entire line including spaces
input = strings.TrimSpace(input) // Trim newline and spaces
fmt.Printf("You entered: %s\n", input)
}
مثال ورودی:
Alice 25
خروجی:
You entered: Alice 25
📊 جدول خلاصه:
تابع | هدف | خواندن را متوقف می کند | از قالب بندی پشتیبانی می کند؟ | متغیرهای چندگانه؟ | استفاده از مورد |
---|---|---|---|---|---|
fmt.Scan |
اسکن اولیه | فضای خالی | ❌ | ✅ | ورودی ساده بدون خط جدید |
fmt.Scanln |
اسکن تا خط جدید | خط جدید (\n ) |
❌ | ✅ | ورودی تا خط جدید |
fmt.Scanf |
اسکن ورودی فرمت شده | با فرمت کنترل می شود | ✅ | ✅ | ورودی فرمت شده دقیق |
bufio.NewReader |
مدیریت ورودی پیشرفته | قابل تنظیم | ✅ | ❌ | ورودی بزرگ با فاصله |