Input and Output in Go (Detailed Explanation)

List Topics
March 6, 2025
No Comments
6 min read

In the Go programming language, input and output (I/O) operations are performed using the fmt, bufio, and os packages.


🔹 1ī¸âƒŖ Output in Go

Go provides multiple ways to display output using the fmt package.

✅ fmt.Print(), fmt.Println(), and fmt.Printf()

FunctionDescription
fmt.Print()Prints text without a newline
fmt.Println()Prints text and adds a newline (\n) at the end
fmt.Printf()Prints formatted output

📝 Example:

Go
package main

import "fmt"

func main() {
    name := "Go"
    version := 1.21

    fmt.Print("Hello, ")  
    fmt.Print("World!\n")  

    fmt.Println("This is Golang")  
    fmt.Println("Version:", version)  

    fmt.Printf("Hello %s! Your version is %.2f\n", name, version)  
}

🔹 Output:

Hello, World!
This is Golang
Version: 1.21
Hello Go! Your version is 1.21

🔹 2ī¸âƒŖ Input in Go

Go provides multiple ways to take user input using fmt.Scan(), fmt.Scanln(), fmt.Scanf(), and the bufio package.

✅ fmt.Scan()

👉 Accepts multiple inputs, separated by spaces.

Go
package main

import "fmt"

func main() {
    var name string
    var age int

    fmt.Print("Enter your name and age: ")
    fmt.Scan(&name, &age)  // Input must be space-separated

    fmt.Println("Name:", name)
    fmt.Println("Age:", age)
}

🔹 Input:

John 30

🔹 Output:

Name: John
Age: 30

✅ fmt.Scanln()

👉 fmt.Scanln() reads multiple inputs but stops at a newline.

Go
package main

import "fmt"

func main() {
    var name string

    fmt.Print("Enter your name: ")
    fmt.Scanln(&name)  

    fmt.Println("Welcome,", name)
}

🔹 Input:

Alice

🔹 Output:

Welcome, Alice

✅ fmt.Scanf() (Formatted Input)

👉 fmt.Scanf() allows formatted input.

Go
package main

import "fmt"

func main() {
    var name string
    var age int

    fmt.Print("Enter your name and age: ")
    fmt.Scanf("%s %d", &name, &age)  

    fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}

🔹 Input:

Alice 25

🔹 Output:

Hello Alice, you are 25 years old.

🔹 3ī¸âƒŖ Using bufio and os for Input

👉 bufio.NewReader() is used for reading full-line input, including spaces.

✅ Using bufio.NewReader()

Go
package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter your full name: ")
    name, _ := reader.ReadString('\n')  // Reads input until a newline

    fmt.Println("Welcome,", name)
}

🔹 Input:

John Doe

🔹 Output:

Welcome, John Doe

👉 This method is better than fmt.Scanln() because it allows reading entire lines with spaces.


🔹 4ī¸âƒŖ File Input and Output (File I/O)

👉 The os and ioutil packages allow reading and writing files.

✅ Reading from a file (os.ReadFile)

Go
package main

import (
    "fmt"
    "os"
)

func main() {
    data, err := os.ReadFile("sample.txt")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("File Content:")
    fmt.Println(string(data))
}

✅ Writing to a file (os.WriteFile)

Go
package main

import (
    "fmt"
    "os"
)

func main() {
    content := []byte("Hello, this is a test file!")

    err := os.WriteFile("output.txt", content, 0644)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("File written successfully!")
}

🔹 5ī¸âƒŖ String Input and Output

👉 Go provides functions for string handling using the strings package.

✅ Using fmt.Sprintf() for String Formatting

Go
package main

import (
    "fmt"
)

func main() {
    name := "Go"
    version := 1.21

    result := fmt.Sprintf("Language: %s, Version: %.2f", name, version)
    fmt.Println(result)
}

🔹 Output:

Language: Go, Version: 1.21

👉 fmt.Sprintf() allows formatted string output without printing it directly.


🔹 6ī¸âƒŖ Using the log Package (Debugging & Logging)

👉 log package is useful for debugging and logging errors.

✅ Using log.Println()

Go
package main

import (
    "log"
)

func main() {
    log.Println("This is a log message")
}

🔹 Output:

2025/02/15 12:34:56 This is a log message

🔹 7ī¸âƒŖ Summary Table

FunctionDescription
fmt.Print()Prints text in a single line
fmt.Println()Prints text and moves to a new line
fmt.Printf()Prints formatted output
fmt.Scan()Takes input (space-separated)
fmt.Scanln()Takes input until a newline
fmt.Scanf()Takes formatted input
bufio.NewReader(os.Stdin)Reads a full line of input
os.ReadFile()Reads data from a file
os.WriteFile()Writes data to a file
fmt.Sprintf()Formats a string without printing

Go āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻžāϝāĻŧ āχāύāĻĒ⧁āϟ āĻ“ āφāωāϟāĻĒ⧁āϟ (āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž)

Go (Golang) āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻžāϝāĻŧ āχāύāĻĒ⧁āϟ āĻ“ āφāωāϟāĻĒ⧁āϟ (I/O) āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ fmt, bufio, āĻāĻŦāĻ‚ os āĻĒā§āϝāĻžāϕ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

🔹 1ī¸âƒŖ āφāωāϟāĻĒ⧁āϟ (Output)

👉 Go-āϤ⧇ āφāωāϟāĻĒ⧁āϟ āĻĒā§āϰāĻĻāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŽā§‚āϞāϤ fmt āĻĒā§āϝāĻžāϕ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

✅ fmt.Print(), fmt.Println(), āĻāĻŦāĻ‚ fmt.Printf()

āĻĢāĻžāĻ‚āĻļāύāĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ
fmt.Print()āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇ āĻŸā§‡āĻ•ā§āϏāϟ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧇, āϕ⧋āύ⧋ āύāϤ⧁āύ āϞāĻžāχāύ āĻĻ⧇āϝāĻŧ āύāĻž
fmt.Println()āĻŸā§‡āĻ•ā§āϏāϟ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻļ⧇āώ⧇ āύāϤ⧁āύ āϞāĻžāχāύ (\n) āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇
fmt.Printf()āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡āĻĄ āφāωāϟāĻĒ⧁āϟ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧇

📝 āωāĻĻāĻžāĻšāϰāĻŖ:

Go
package main

import "fmt"

func main() {
    name := "Go"
    version := 1.21

    fmt.Print("Hello, ")  
    fmt.Print("World!\n")  

    fmt.Println("This is Golang")  
    fmt.Println("Version:", version)  

    fmt.Printf("Hello %s! Your version is %.2f\n", name, version)  
}

🔹 āφāωāϟāĻĒ⧁āϟ:

Hello, World!
This is Golang
Version: 1.21
Hello Go! Your version is 1.21

🔹 2ī¸âƒŖ āχāύāĻĒ⧁āϟ (Input)

👉 Go-āϤ⧇ āχāύāĻĒ⧁āϟ āύ⧇āĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ fmt.Scan(), fmt.Scanln(), fmt.Scanf(), āĻāĻŦāĻ‚ bufio āĻ“ os āĻĒā§āϝāĻžāϕ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

✅ fmt.Scan()

👉 āĻāĻ•āĻžāϧāĻŋāĻ• āχāύāĻĒ⧁āϟ āύ⧇āĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ, āϤāĻŦ⧇ āĻ¸ā§āĻĒ⧇āϏ āĻĻāĻŋāϝāĻŧ⧇ āĻĒ⧃āĻĨāĻ• āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

Go
package main

import "fmt"

func main() {
    var name string
    var age int

    fmt.Print("Enter your name and age: ")
    fmt.Scan(&name, &age)  // āĻ¸ā§āĻĒ⧇āϏ āĻĻāĻŋāϝāĻŧ⧇ āχāύāĻĒ⧁āϟ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇

    fmt.Println("Name:", name)
    fmt.Println("Age:", age)
}

🔹 āχāύāĻĒ⧁āϟ:

John 30

🔹 āφāωāϟāĻĒ⧁āϟ:

Name: John
Age: 30

✅ fmt.Scanln()

👉 fmt.Scanln() āĻāĻ•āĻžāϧāĻŋāĻ• āχāύāĻĒ⧁āϟ āύ⧇āϝāĻŧ āĻ•āĻŋāĻ¨ā§āϤ⧁ āύāϤ⧁āύ āϞāĻžāχāύ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒāĻĄāĻŧ⧇āĨ¤

Go
package main

import "fmt"

func main() {
    var name string

    fmt.Print("Enter your name: ")
    fmt.Scanln(&name)  

    fmt.Println("Welcome,", name)
}

🔹 āχāύāĻĒ⧁āϟ:

Alice

🔹 āφāωāϟāĻĒ⧁āϟ:

Welcome, Alice

✅ fmt.Scanf() (āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡āĻĄ āχāύāĻĒ⧁āϟ)

👉 fmt.Scanf() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āχāύāĻĒ⧁āϟ āύ⧇āĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤

Go
package main

import "fmt"

func main() {
    var name string
    var age int

    fmt.Print("Enter your name and age: ")
    fmt.Scanf("%s %d", &name, &age)  

    fmt.Printf("Hello %s, you are %d years old.\n", name, age)
}

🔹 āχāύāĻĒ⧁āϟ:

Alice 25

🔹 āφāωāϟāĻĒ⧁āϟ:

Hello Alice, you are 25 years old.

🔹 3ī¸âƒŖ bufio āĻāĻŦāĻ‚ os āĻĒā§āϝāĻžāϕ⧇āϜ āĻĻāĻŋāϝāĻŧ⧇ āχāύāĻĒ⧁āϟ āύ⧇āĻ“āϝāĻŧāĻž

👉 bufio.NewReader() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϞāĻžāχāύ āχāύāĻĒ⧁āϟ āύ⧇āĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤

✅ bufio.NewReader() āĻĻāĻŋāϝāĻŧ⧇ āχāύāĻĒ⧁āϟ āύ⧇āĻ“āϝāĻŧāĻž

Go
package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter your full name: ")
    name, _ := reader.ReadString('\n')  // āύāϤ⧁āύ āϞāĻžāχāύ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒāĻĄāĻŧ⧇

    fmt.Println("Welcome,", name)
}

🔹 āχāύāĻĒ⧁āϟ:

John Doe

🔹 āφāωāϟāĻĒ⧁āϟ:

Welcome, John Doe

👉 āĻāϟāĻŋ fmt.Scanln()-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āωāĻĒāϝ⧋āĻ—ā§€ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āĻ¸ā§āĻĒ⧇āϏāϏāĻš āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϞāĻžāχāύ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤

🔹 4ī¸âƒŖ āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āχāύāĻĒ⧁āϟ āĻ“ āφāωāϟāĻĒ⧁āϟ (File I/O)

👉 Go-āϤ⧇ os āĻ“ ioutil āĻĒā§āϝāĻžāϕ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āĻĄāĻžāϟāĻž āĻĒāĻĄāĻŧāĻž āĻ“ āϞ⧇āĻ–āĻž āϝāĻžāϝāĻŧāĨ¤

✅ āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āĻĄāĻžāϟāĻž āĻĒāĻĄāĻŧāĻž (os.ReadFile)

Go
package main

import (
    "fmt"
    "os"
)

func main() {
    data, err := os.ReadFile("sample.txt")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("File Content:")
    fmt.Println(string(data))
}

✅ āĻĢāĻžāχāϞ āϞāĻŋāĻ–āĻž (os.WriteFile)

Go
package main

import (
    "fmt"
    "os"
)

func main() {
    content := []byte("Hello, this is a test file!")

    err := os.WriteFile("output.txt", content, 0644)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("File written successfully!")
}

🔹 5ī¸âƒŖ Go-āϤ⧇ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āχāύāĻĒ⧁āϟ āĻ“ āφāωāϟāĻĒ⧁āϟ

👉 āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚āϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ strings āĻĒā§āϝāĻžāϕ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

✅ fmt.Sprintf() – āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĢāϰāĻŽā§āϝāĻžāϟāĻŋāĻ‚

Go
package main

import (
    "fmt"
)

func main() {
    name := "Go"
    version := 1.21

    result := fmt.Sprintf("Language: %s, Version: %.2f", name, version)
    fmt.Println(result)
}

🔹 āφāωāϟāĻĒ⧁āϟ:

Language: Go, Version: 1.21

👉 fmt.Sprintf() āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇, āϝ⧇āĻ–āĻžāύ⧇ āφāωāϟāĻĒ⧁āϟ āϏāϰāĻžāϏāϰāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āϝāĻŧ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

🔹 6ī¸âƒŖ log āĻĒā§āϝāĻžāϕ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ (Debugging & Logging)

👉 log āĻĒā§āϝāĻžāϕ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāϰāϰ āϞāĻ— āĻ“ āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

✅ log.Println() āωāĻĻāĻžāĻšāϰāĻŖ

Go
package main

import (
    "log"
)

func main() {
    log.Println("This is a log message")
}

🔹 āφāωāϟāĻĒ⧁āϟ:

2025/02/15 12:34:56 This is a log message

🔹 7ī¸âƒŖ āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ (Summary)

āĻĢāĻžāĻ‚āĻļāύāĻŦā§āϝāĻžāĻ–ā§āϝāĻž
fmt.Print()āĻāĻ• āϞāĻžāχāύ⧇ āĻŸā§‡āĻ•ā§āϏāϟ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧇
fmt.Println()āύāϤ⧁āύ āϞāĻžāχāύ⧇ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧇
fmt.Printf()āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡āĻĄ āφāωāϟāĻĒ⧁āϟ
fmt.Scan()āĻ¸ā§āĻĒ⧇āϏ āĻĻāĻŋāϝāĻŧ⧇ āχāύāĻĒ⧁āϟ āύ⧇āĻ“āϝāĻŧāĻž
fmt.Scanln()āύāϤ⧁āύ āϞāĻžāχāύ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āχāύāĻĒ⧁āϟ
fmt.Scanf()āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āχāύāĻĒ⧁āϟ
bufio.NewReader(os.Stdin)āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϞāĻžāχāύ āχāύāĻĒ⧁āϟ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇
os.ReadFile()āĻĢāĻžāχāϞ āĻĒāĻĄāĻŧāĻž
os.WriteFile()āĻĢāĻžāχāϞ āϞ⧇āĻ–āĻž
fmt.Sprintf()āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĢāϰāĻŽā§āϝāĻžāϟāĻŋāĻ‚
Š2025 Linux Bangla | Developed & Maintaind by Linux Bangla.