目录
一、三种类型的输出
print:
println:
printf:
总结:
代码展示:
二、格式化占位符
%s:用于格式化字符串。
%d:用于格式化整数。
%f:用于格式化浮点数。
%v:用于格式化任何值,返回其默认格式。
%T:用于输出变量的类型。
进制及其字符?
宽度标识符?
代码展示:?
三、Fprint
输出到标准输出
写入文件中
输出到浏览器
代码展示:
四、Sprint
基本用法:
?多个参数格式化:
格式化复杂数据类型:
五、四种类型的输入
fmt.Scan():
fmt.Scanf():
fmt.Scanln():
bufio.Reader:
一、三种类型的输出
在 Go 语言中,print
、printf
和println
是用于输出内容到控制台的函数,但是它们的用法和功能有所不同:
print:
print
是一个内置函数,用于输出没有格式的字符串。它不添加换行符,也不支持格式化。
println:
println
也是一个内置函数,类似于print
,但它会在输出后自动添加一个换行符。
printf:
-
printf
是fmt
包中的一个函数,支持格式化输出。可以使用格式化动词插入变量或指定输出格式。package mainimport "fmt"func main() {// Print()函数用于打印字符串到标准输出,不带换行符fmt.Print("Hello, ")fmt.Print("World!")// printf()函数用于格式化输出字符串fmt.Printf("Hello, %s! ", "World")// Println()函数用于打印字符串到标准输出,带换行符fmt.Println("Hello, World!")fmt.Println("Hello,", "World!") }
总结:
- 使用
print
和println
进行简单输出。 - 使用
fmt.Printf
进行格式化输出。
代码展示:
package mainimport "fmt"func main() {// Print()函数用于打印字符串到标准输出,不带换行符fmt.Print("Hello, ")fmt.Print("World!")// printf()函数用于格式化输出字符串fmt.Printf("Hello, %s!
", "World")// Println()函数用于打印字符串到标准输出,带换行符fmt.Println("Hello, World!")fmt.Println("Hello,", "World!")
}
二、格式化占位符
在 Go 语言中,fmt.Printf
函数使用格式化占位符来格式化输出。以下是一些常见的格式化占位符及其用法:
%s:用于格式化字符串。
%d:用于格式化整数。
%f:用于格式化浮点数。
%v:用于格式化任何值,返回其默认格式。
%T:用于输出变量的类型。
进制及其字符
宽度标识符
代码展示:
package main
import ("fmt")
func main() {name := "小明"fmt.Printf("Hello, %s!
", name) // 输出 Hello, 小明!age:=18fmt.Printf("小明今年%d岁了
",age) // 输出 小明今年18岁了price:=100.5fmt.Printf("价格是%.2f元
",price) // 输出 价格是100.50元//%vfmt.Printf("name=%v,age=%v,price=%v
",name,age,price) // 输出 naem=小明, age=18,price=100.5data := []int{1, 2, 3}fmt.Printf("Data: %v
", data) // 输出: Data: [1 2 3]fmt.Printf("Type of age: %T
", age) // 输出: Type of age: intfmt.Printf("Type of price: %T
", price) // 输出: Type of price: float64fmt.Printf("Type of data: %T
", data) // 输出: Type of data: []int//%tfmt.Printf("Is age true? %t
", age == 18) // 输出: Is age true? truefmt.Printf("Is price true? %t
", price == 100.5) // 输出: Is price true? truefmt.Printf("Is data true? %t
", data == nil) // 输出: Is data true? false//%bnum := 10fmt.Printf("二进制表示: %d is %b
", num, num) // 输出: 二进制表示: 10 is 1010//%cfmt.Printf("字符表示: %d is %c
", 65, 65) // 输出: 字符表示: 65 is A//%dfmt.Printf("十进制表示: %d is %d
", num, num) // 输出: 十进制表示: 10 is 10//%ofmt.Printf("八进制表示: %d is %o
", num, num) // 输出: 八进制表示: 10 is 12//%xfmt.Printf("十六进制表示: %d is %x
", num, num) // 输出: 十六进制表示: 10 is a
}
三、Fprint
在 Go 语言中,Fprint
函数属于fmt
包,用于将格式化的输出写入到指定的io.Writer
接口,而不是直接输出到标准输出。常见的用途包括将输出写入文件、网络连接等。Fprint
与Print
和Println
类似,但它允许你指定输出的目的地。
输出到标准输出
写入文件中
写入文件的时候可以参考下表,详细的罗列出了每一个数字代表的含义。
输出到浏览器
浏览器效果如下:
代码展示:
package main
import ("fmt""os""net/http"
)
func main() {// 输出到标准输出fmt.Fprint(os.Stdout, "Hello, world!")// 写入文件中f, err := os.OpenFile("test.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)if err!= nil {fmt.Println(err)return}defer f.Close()fmt.Fprint(f, "Hello, world!")// 启动一个 HTTP 服务器,监听 8080 端口,并使用自定义的处理器 MyHandlerhttp.ListenAndServe(":8080", &MyHandler{})
}
// 定义一个 MyHandler 结构体,用于处理 HTTP 请求
type MyHandler struct {
}// 实现 http.Handler 接口的 ServeHTTP 方法
// 当有 HTTP 请求到达时,该方法将被调用
func (*MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {// 使用 fmt.Fprint 将 "Hello, world!" 写入到浏览器的响应体中fmt.Fprint(w, "Hello, world!")
}
四、Sprint
在 Go 语言中,Sprint
函数属于fmt
包,用于将多个值格式化为字符串,而不是直接输出到控制台。与Print
或Println
不同,Sprint
会返回一个字符串,可以将其用于其他操作,例如赋值给变量或用于进一步处理。
基本用法:
package mainimport ("fmt"
)func main() {// 使用 Sprint 将字符串和数字组合生成一个字符串result := fmt.Sprint("Hello, ", "World!", 123)fmt.Println(result) // 输出: Hello, World!123
}
多个参数格式化:
package mainimport ("fmt"
)func main() {name := "Alice"age := 30// 使用 Sprint 组合多个变量为字符串output := fmt.Sprintf("Name: %s, Age: %d", name, age)fmt.Println(output) // 输出: Name: Alice, Age: 30
}
格式化复杂数据类型:
package mainimport ("fmt"
)func main() {data := []int{1, 2, 3}// 格式化切片成字符串str := fmt.Sprint(data)fmt.Println("Data:", str) // 输出: Data: [1 2 3]
}
Sprint
用于将格式化的值转化为字符串并返回。Sprintf
是更为常用的函数,允许使用格式占位符来进行复杂的格式化。Sprint
和Sprintf
都不会直接输出到控制台,而是生成字符串,可以用于赋值或进一步的处理。
五、四种类型的输入
在 Go 语言中,输入
通常指的是从用户或其他来源读取数据的过程。主要使用fmt
包中的函数和os
包中的函数来处理输入。
fmt.Scan():
用于从标准输入读取数据,适合读取单个值。
package mainimport ("fmt"
)func main() {var name stringfmt.Print("请输入你的名字: ")fmt.Scan(&name) // 将输入的名字存储到变量 name 中fmt.Println("你好,", name)
}
fmt.Scanf():
用于格式化读取输入,类似于printf
的格式化输出。
package mainimport ("fmt"
)func main() {var name stringvar age intfmt.Print("请输入你的名字和年龄(格式:名字 年龄): ")fmt.Scanf("%s %d", &name, &age) // 读取一个字符串和一个整数fmt.Printf("你好, %s,你的年龄是 %d!
", name, age)
}
fmt.Scanln():
类似于Scan()
,但会读取一整行直到换行符。
package mainimport ("fmt"
)func main() {var input stringfmt.Print("请输入一行内容: ")fmt.Scanln(&input) // 读取整行输入fmt.Println("你输入的是:", input)
}
bufio.Reader:
对于更复杂的输入,通常使用bufio.Reader
来读取。
它可以输入带空格的字符串
package mainimport ("bufio""fmt""os"
)func main() {reader := bufio.NewReader(os.Stdin)fmt.Print("请输入一行内容: ")input, _ := reader.ReadString('
') // 读取一行输入fmt.Println("你输入的是:", input)
}