برنامه نویسی

نحوه اسکن در 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 مدیریت ورودی پیشرفته قابل تنظیم ورودی بزرگ با فاصله

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا