输入输出
# 1.输出函数
func Printf(format string, a ...interface{}) (n int, err error)
- Go 语言 Printf 函数其它特性,如宽度、标志、精度、长度、转移符号等,和 C 语言一样.
- Go 语言中输出某一个值,很少使用%d%f 等, 一般都使用%v即可
- 输出复合类型时会自动生成对应格式后再输出
- 除此之外**,Go 语言还增加了%v 控制符,用于打印所有类型数据**
- 除此之外**,Go 语言还增加了%T 控制符, 用于输出值的类型**
- 值得注意的是,输出十进制只能通过%d,不能像 C 语言一样通过%i
- 除了和 C 语言一样,可以通过%o、%x 输出八进制和十六进制外,还可以直接通过%b 输出二进制
- 和 C 语言用法几乎一模一样, 只不过新增了一些格式化符号
func Println(a ...interface{}) (n int, err error)
- 输出之后会在结尾处添加换行
- 传入多个参数时, 会自动在相邻参数之间添加空格
- 传入符合类型数据时, 会自动生成对应格式后再输出
- 采用默认格式将其参数格式化并写入标准输出
func Print(a ...interface{}) (n int, err error)
- 输出之后不会在结尾处添加换行
- 传入多个参数时, 只有两个相邻的参数都不是字符串,才会在相邻参数之间添加空格
- 传入符合类型数据时, 会自动生成对应格式后再输出
- 和 Println 几乎一样
以下三个函数和 Printf/Println/Print 函数一样, 只不过上面三个函数是输出到标准输出, 而下面三个函数可以通过 w 指定输出到什么地方 func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) func Fprintln(w io.Writer, a ...interface{}) (n int, err error) func Fprint(w io.Writer, a ...interface{}) (n int, err error)
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
// os.Stdout 写入到标准输出
name := "lnj"
age := 33
// 第一个参数: 指定输出到什么地方
// 第二个参数: 指定格式控制字符串
// 第三个参数: 指定要输出的数据
fmt.Fprintf(os.Stdout, "name = %s, age = %d\n", name, age)
// http.ResponseWriter 写入到网络响应
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintf(writer, "name = %s, age = %d\n", name, age)
})
http.ListenAndServe(":8888", nil)
}
以下三个函数和 Printf/Println/Print 函数一样, 只不过上面三个函数是输出到标准输出, 而下面三个函数不会输出,而是将字符串返回给我们 func Sprintf(format string, a ...interface{}) string func Sprint(a ...interface{}) string func Sprintln(a ...interface{}) string
package main
import (
"fmt"
)
func main() {
name := "lnj"
age := 33
// 按照指定的格式生成字符串
str := fmt.Sprintf("name = %s, age = %d\n", name, age)
// 输出生成的字符串
fmt.Println(str)
}
# 2.输入函数
func Scanf(format string, a ...interface{}) (n int, err error) func Scan(a ...interface{}) (n int, err error) func Scanln(a ...interface{}) (n int, err error) 以下三个函数和 Scan/Scanln/Scanf 函数一样, 只不过上面三个函数是从标准输入读取数据, 而下面三个函数可以通过 r 指定从哪读取数据 func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error) func Fscanln(r io.Reader, a ...interface{}) (n int, err error) func Fscan(r io.Reader, a ...interface{}) (n int, err error)
package main
import (
"fmt"
"os"
"strings"
)
func main() {
var num1 int
var num2 int
// 第一个参数: 指定从哪读取数据
// 第二个参数: 指定格式控制字符串
// 第三个参数: 指定要输出的数据
fmt.Fscanf(os.Stdin, "%d%d", &num1, &num2)
fmt.Println(num1, num2)
s := strings.NewReader("lnj 33")
var name string
var age int
// 从指定字符串中扫描出想要的数据
// 注意:
fmt.Fscanf(s, "%s%d", &name, &age)
fmt.Println("name =", name, "age =", age)
}
以下三个函数和 Scan/Scanln/Scanf 函数一样, 只不过上面三个函数是从标准输入读取数据, 而下面三个函数是从字符串中读取数据 func Sscan(str string, a ...interface{}) (n int, err error) func Sscanf(str string, format string, a ...interface{}) (n int, err error) func Sscanln(str string, a ...interface{}) (n int, err error)
package main
import "fmt"
func main() {
str := "lnj 33"
var name string
var age int
//fmt.Sscanf(str, "%s %d",&name, &age)
//fmt.Sscanln(str,&name, &age)
fmt.Sscan(str, &name, &age)
fmt.Println("name =", name, "age =", age)
}