Golang 基础(六)输入

Overview

  • fmt.Scan
    • 输入,不换行,并且若定义多个值,则必须输入指定个数的值才会结束,否则持续等待
  • fmt.Scanln
    • 输入并换行,以回车结束
  • fmt.Scanf
    • 格式化输入
  • os.stdin
    • 系统输入,在系统中,终端输入都会写入到os.stdin中,则可以读取os.stdin中的一行值

Description

1)fmt.Scan

package main

import "fmt"

func main() {
	var name string
	fmt.Print("Please enter your name: ")
	fmt.Scan(&name)
	fmt.Println(name)
}

2)fmt.Scanln

package main

import "fmt"

func main() {
	var name string
	var age int
	fmt.Print("Please enter your name and age: ")
	fmt.Scan(&name, &age)
	fmt.Println(name, age)
}

 3)fmt.Scanf

格式化输出必须按照模板进行输出,然后才会提取Scan中的值,否则无法输出结果

package main

import "fmt"

func main() {
	var name string
	fmt.Print("Please enter your name and age: ")
	fmt.Scanf("我的名字是%s", &name)
	fmt.Println(name)
}

 若在字符串占位符后有其他一样类型的数据,则无法读取出指定的值,所以在Go中占位符后需要加一个空格来完善

错误例子:

package main

import "fmt"

func main() {
	var name string
	var age int
	fmt.Print("Please enter your name: ")
	fmt.Scanf("我的名字是%s我今年%d了", &name, &age)
	fmt.Println(name, age)
}

 正确例子:

package main

import "fmt"

func main() {
	var name string
	var age int
	fmt.Print("Please enter your name: ")
	fmt.Scanf("我的名字是%s 我今年%d了", &name, &age)
	fmt.Println(name, age)
}

 4)os.Stdin

在fmt.Scanln中,每一个空格都代表了是一个内容的结束,所以是无法按照有空格的形式输入一行内容,比如My name is Jeremy

因此可以使用os.stdin来输入一行终端输入的内容并加以输出(os.Stdin是标准输入,终端输入的内容都会在这个文件中

package main

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

func main() {
	Reader := bufio.NewReader(os.Stdin)
	line, isPrefix, err := Reader.ReadLine()
	fmt.Println(string(line))
	fmt.Println(isPrefix)
	fmt.Println(err)
}

bufio.NewReader(bufio.NewReader的功能是读取os.Stdin中的数据):

        bufio.NewReader(os.Stdin)

从bufio.NewReader中读取的内容,需要定义变量给予赋值:

        变量:= bufio.NewReader(os.Stdin)

我们需要的是读一行,读一行在这里使用的是Readline:   

        变量.Readline

 Readline默认有3个变量:line,isPrefix,err, 我们需要将line输出:

        line,isPrefix,err := 变量.Readline()

line需要以string进行输出fmt.Println(string(line)

        fmt.Println(string(line)

package main

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

func main() {
	Data := bufio.NewReader(os.Stdin)
	line, _, _ := Data.ReadLine()
	fmt.Println(string(line))
}

 不想输出esPrefix和err可以用_来占位

Golang 基础(七)条件句-优快云博客

<think>好的,我现在需要帮助用户学习Golang基础知识。用户明确提到想学习Golang基础教程,包括入门和学习的建议。首先,我要根据用户提供的三个引用内容来整理相关信息,确保回答准确并引用正确的资料。 首先,引用[1]列出了Golang基础教程的目录,涵盖环境搭建、开发规范、变量与数据类型、指针、数组、切片、map、结构体、方法、继承、接口、异常处理、文件操作、并发、反射、网络编程和单元测试等内容。这说明用户提供的教程资源比较全面,覆盖了Golang的各个方面,可以作为学习路径的参考。 引用[2]展示了Go语言的基本结构,比如如何编写和运行一个Hello World程序。这属于入门的第一步,用户需要了解Go的基本语法和程序结构。 引用[3]提到安装Go环境,包括下载安装包和验证安装。这是学习任何编程语言的第一步,所以必须确保用户正确安装和配置开发环境。 接下来,我需要将这些信息整合成一个结构化的学习路径,分步骤引导用户。根据用户提供的目录,可以将学习内容分为几个阶段:环境搭建、基础语法、核心概念、进阶主题和实战练习。每个阶段需要详细说明学习内容,并引用对应的参考资料。 需要注意用户提到的系统级指令,比如使用正确的中文回答,生成相关问题,引用标识等。同时,用户希望回答结构清晰,帮助逐步解决问题,确保真实可靠。 现在需要确保每个步骤都覆盖引用中的内容,并且引用标识正确。例如,在环境搭建部分,引用[3]中的安装指南;在程序结构部分,引用[2]中的Hello World示例;在后续的学习内容中,引用[1]中的各个章节。 同时,生成相关问题需要考虑用户可能的后续疑问,比如学习资源推荐、难点解析、开发工具选择等。这些问题需要自然衔接,并且覆盖用户可能感兴趣的方向。 最后,要检查LaTeX格式是否正确,确保行内数学表达式使用$...$,独立公式使用$$...$$,但根据当前内容可能不需要数学公式,所以可能不需要使用。但需要确认是否有数学相关的内容,如果没有的话,可以忽略这点,但系统指令中提到必须遵守,所以如果有数学表达式的话要正确应用。 总结,回答的结构应该是分步骤的学习路径,每个步骤包含关键内容和对应的引用,然后列出相关问题。需要确保引用标识正确,如[^1]、[^2]、[^3]对应正确的引用内容。</think>### Golang 基础学习路径 #### 第一步:环境搭建与工具配置 1. **安装Go语言环境** 从[官网](https://golang.org/dl/)下载安装包,按照系统要求完成安装。安装后,在命令行输入 `go version` 验证是否成功[^3]。 2. **配置代理(可选)** 若遇到依赖包下载问题(如Google包),需配置GOPROXY,例如: ```bash go env -w GOPROXY=https://goproxy.cn,direct ``` 具体操作可参考引用[^1]的附录一。 --- #### 第二步:基础语法与程序结构 1. **第一个程序** 编写并运行Hello World,理解包声明(`package main`)和入口函数(`func main()`)的作用: ```go package main import "fmt" func main() { fmt.Println("Hello World!") } ``` 保存为 `.go` 文件,运行命令:`go run 文件名.go`[^2]。 2. **变量与数据类型** - 学习变量声明方式(`var`、短声明 `:=`) - 掌握基本类型(`int`, `float64`, `string`, `bool`)和类型转换方法[^1]。 - 示例: ```go var age int = 30 name := "Alice" ``` --- #### 第三步:核心编程概念 1. **复合数据类型** - **数组与切片**:切片是动态数组,支持灵活操作(如 `append`)[^1]。 - **Map**:键值对容器,用于快速查找。 - **结构体与方法**:定义自定义类型及其关联方法: ```go type User struct { Name string Age int } func (u User) PrintInfo() { fmt.Println(u.Name, u.Age) } ``` 2. **指针与内存管理** 理解指针的作用(如修改函数外变量)。 --- #### 第四步:进阶主题 1. **并发编程** - 使用 `goroutine` 实现轻量级线程,`channel` 进行协程间通信: ```go ch := make(chan int) go func() { ch <- 1 }() fmt.Println(<-ch) ``` 2. **接口与多态** 通过接口实现多态行为,例如定义 `Shape` 接口并实现不同图形的面积计算。 3. **文件操作与异常处理** - 使用 `os` 包读写文件。 - 通过 `defer`、`panic` 和 `recover` 处理错误。 --- #### 第五步:实战与扩展 1. **单元测试** 编写测试函数(以 `Test` 开头),使用 `go test` 命令运行[^1]。 2. **网络编程** 基于 `net` 包实现TCP服务器/客户端[^1]。 3. **反射机制** 通过 `reflect` 包动态操作类型信息。 --- ### 学习资源推荐 1. **官方文档**:[Go语言官方指南](https://go.dev/doc/) 2. **书籍**:《Go程序设计语言》《Go语言实战》 3. **实战项目**:从命令行工具(如计算器)逐步过渡到Web服务(如REST API)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值