fmt输入输出库

fmt包是Go语言中用于格式化输入输出的工具,提供Print、Printf、Println等函数进行控制台输出,支持Sprintf生成格式化字符串。此外,fmt还支持向文件、TCP和UDP连接以及HTTP响应输出内容,具有灵活的格式控制选项。
摘要由CSDN通过智能技术生成

fmt包是一个格式化输入输出的包,它提供了很多与C语言类似的格式化字符串方式来格式化输出内容。fmt包可以用于向控制台、文件、网络等输出内容

基本用法

  1. 格式化输出

可以使用Print、Printf、Println等函数输出文本,例如:

fmt.Print("hello, world")
fmt.Printf("number: %d, string: %s", 100, "hello")
fmt.Println("hello, world")

这些函数的区别在于输出的方式不同:

  • Print:直接将字符串输出到控制台,不换行

  • Printf:格式化输出字符串到控制台,不换行

  • Println:输出字符串到控制台并换行

规律:后面的f :format

  1. 格式化字符串

使用fmt.Sprintf可以将格式化的字符串赋值给变量,例如:

规律:前面的f :file,s:string

str := fmt.Sprintf("number: %d, string: %s", 100, "hello")
  1. 打印变量

使用Print、Printf、Println可以输出变量,例如:

num := 100
str := "hello"
fmt.Print(num, str)
fmt.Printf("number: %d, string: %s", num, str)
fmt.Println(num, str)

格式化字符串

fmt包中的格式化字符串支持的占位符包括:

占位符

说明

%v

值的默认格式表示

%+v

类似%v,但在输出结构体时会添加字段名

%#v

值的Go语言语法表示

%T

值的类型的Go语言表示

%%

字符%

可以使用它们来格式化不同类型的数据,例如:

fmt.Printf("%v\n", 100)  // 100
fmt.Printf("%v\n", "hello")  // hello
fmt.Printf("%v\n", []int{1, 2, 3})  // [1 2 3]
fmt.Printf("%#v\n", []int{1, 2, 3})  // []int{1, 2, 3}
fmt.Printf("%T\n", []int{1, 2, 3})  // []int
fmt.Printf("%%\n")  // %

在格式化字符串中,可以使用宽度和精度来指定输出的宽度和小数点后的位数,例如:

fmt.Printf("%8d\n", 100)  //     100
fmt.Printf("%.2f\n", 3.14159)  // 3.14

输出到文件

使用fmt库输出到文件的方式有两种:一种是通过打开文件创建一个文件对象,然后将文件对象传递给fmt库的函数,让函数将数据写入到文件中;另一种是直接使用os.Stdout和os.Stderr等标准输出对象的方法,将输出流重定向到文件对象上,然后再使用fmt库的函数进行输出

使用FprintFprintfFprintln等函数输出到文件。例如:

// 打开需要输出的文件

file, err := os.Create("output.txt")

if err != nil {

fmt.Println(err)

return

}

defer file.Close()

fmt.Fprint(file, "hello, world")

fmt.Fprintf(file, "number: %d, string: %s", 100, "hello")

fmt.Fprintln(file, "hello, world")

综上,fmt库提供了多种输出方式,可以根据实际需求选择不同的输出方式。需要注意的是,在使用文件对象进行输出时,需要手动关闭文件对象,以防止文件句柄泄露。

输出到网络

输出到TCP连接

可以使用fmt.Fprintf()函数将文本输出到TCP连接。下面的代码展示了如何在服务器程序中使用fmt.Fprintf()函数将文本输出到TCP连接中:

package main

import (
    "fmt"
    "net"
)

func main() {
    ln, err := net.Listen("tcp", ":8080")
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    defer ln.Close()

    for {
        conn, err := ln.Accept()
        if err != nil {
            fmt.Println("error:", err)
            continue
        }
        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()
    fmt.Fprintf(conn, "Hello, client!\n")
    // ...
}

在上述代码中,服务器程序会监听8080端口,并在接收到连接请求后,启动一个协程来处理连接。在handleConnection()函数中,使用fmt.Fprintf()将“Hello, client!”文本输出到TCP连接中。

输出到UDP连接

使用fmt.Fprintf()函数可以将文本输出到UDP连接中。下面的代码展示了如何在服务器程序中使用fmt.Fprintf()函数将文本输出到UDP连接中:

package main

import (
    "fmt"
    "net"
)

func main() {
    conn, err := net.ListenPacket("udp", ":8080")
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    defer conn.Close()

    buf := make([]byte, 1024)
    for {
        n, addr, err := conn.ReadFrom(buf)
        if err != nil {
            fmt.Println("error:", err)
            continue
        }
        go handleConnection(conn, addr, buf[:n])
    }
}

func handleConnection(conn net.PacketConn, addr net.Addr, buf []byte) {
    fmt.Fprintf(conn, "Hello, client!\n")
    // ...
}

在上述代码中,服务器程序会监听8080端口,并在接收到UDP数据包后,启动一个协程来处理连接。在handleConnection()函数中,使用fmt.Fprintf()将“Hello, client!”文本输出到UDP连接中。

输出到HTTP响应

在HTTP服务器程序中,可以使用fmt.Fprintf()函数将文本输出到HTTP响应中。下面的代码展示了如何在HTTP服务器程序中使用fmt.Fprintf()函数将文本输出到HTTP响应中:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, client!\n")
    })

    http.ListenAndServe(":8080", nil)
}

在上述代码中,使用http.HandleFunc()函数设置HTTP处理函数,当收到HTTP请求时,使用fmt.Fprintf()函数将“Hello, client!”文本输出到HTTP响应中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值