golang 接受输入

发布时间:2024-12-23 03:22:36

Go语言(Golang)是一种由Google开发的开源编程语言,目标是提供一种简洁的、易于阅读和编写的语法,并强调高效的并发编程。作为一名专业的Golang开发者,掌握如何接受输入是非常重要的。

接受命令行参数

在Go语言中,我们可以使用os包来处理命令行参数。os包提供了Args变量,它是一个字符串切片,包含了所有传递给程序的命令行参数。我们可以通过遍历Args变量来获取每个参数的值。

举个例子,假设我们编写了一个脚本来计算两个整数的和:

package main

import (
    "fmt"
    "os"
    "strconv"
)

func main() {
    args := os.Args
    if len(args) != 3 {
        fmt.Println("Usage: sum  ")
        return
    }

    num1, err := strconv.Atoi(args[1])
    if err != nil {
        fmt.Println("Invalid number:", args[1])
        return
    }

    num2, err := strconv.Atoi(args[2])
    if err != nil {
        fmt.Println("Invalid number:", args[2])
        return
    }

    sum := num1 + num2
    fmt.Println("Sum:", sum)
}

在上述示例中,我们首先检查命令行参数的数量是否正确。如果不正确,我们会显示一条用法消息并退出程序。接下来,我们使用strconv包中的Atoi函数将命令行参数转换为整数类型。如果转换失败,说明参数不是一个有效的数字,我们会显示一条错误消息并退出程序。最后,我们将两个整数相加并打印结果。

读取标准输入

除了接受命令行参数,Go语言还提供了一种读取标准输入的方式。我们可以使用os包下的Stdin变量和bufio包中的NewReader函数来读取用户输入的数据。

下面是一个示例,演示了如何读取用户输入的两个数字,并计算它们的平均值:

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

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

    fmt.Print("Enter two numbers (separated by space): ")
    input, _ := reader.ReadString('\n')
    input = strings.TrimSpace(input)
    numbers := strings.Split(input, " ")
    if len(numbers) != 2 {
        fmt.Println("Invalid input. Please enter two numbers.")
        return
    }

    num1, err := strconv.ParseFloat(numbers[0], 64)
    if err != nil {
        fmt.Println("Invalid number:", numbers[0])
        return
    }

    num2, err := strconv.ParseFloat(numbers[1], 64)
    if err != nil {
        fmt.Println("Invalid number:", numbers[1])
        return
    }

    average := (num1 + num2) / 2
    fmt.Println("Average:", average)
}

在上述示例中,我们首先创建一个bufio.Reader对象来读取标准输入。然后,我们打印一条提示消息,要求用户输入两个数字,使用reader.ReadString('\n')函数来读取用户输入的一行数据。接下来,我们使用strings包中的TrimSpace函数删除前导和尾随的空白字符,然后使用strings包中的Split函数将输入的字符串分割成两个部分。如果分割后的切片长度不为2,说明输入不正确,我们会显示一条错误消息并退出程序。然后,我们使用strconv包中的ParseFloat函数将两个字符串转换为浮点数类型,并检查转换是否成功。最后,我们计算这两个浮点数的平均值并打印结果。

处理文件输入

除了从命令行参数和标准输入中读取输入,Go语言还提供了一种处理文件输入的方式。我们可以使用os包下的Open函数打开一个文件,然后使用bufio包中的Scanner对象来逐行读取文件内容。

下面是一个示例,演示了如何读取一个文本文件中的每一行,然后计算行数和字符数:

package main

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

func main() {
    file, err := os.Open("input.txt")
    if err != nil {
        fmt.Println("Failed to open file:", err)
        return
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    lineCount := 0
    charCount := 0

    for scanner.Scan() {
        lineCount++
        line := scanner.Text()
        charCount += len(line)
    }

    if err := scanner.Err(); err != nil {
        fmt.Println("Failed to read file:", err)
        return
    }

    fmt.Println("Line count:", lineCount)
    fmt.Println("Character count:", charCount)
}

在上述示例中,我们首先使用os.Open函数打开名为"input.txt"的文件,并检查是否出现错误。如果打开文件失败,我们会显示一条错误消息并退出程序。我们使用defer关键字来确保文件在程序结束前被关闭。然后,我们创建一个bufio.Scanner对象来扫描文件内容。我们使用循环逐行读取文件内容,并计算行数和字符数。最后,我们通过调用scanner.Err函数来检查是否出现了读取文件的错误,如果有,我们会显示一条错误消息并退出程序。最后,我们打印行数和字符数的统计结果。

相关推荐