12.Go语言标准库之fmt

1.fmt

fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。

1.1向外输出

1.1.1Print

Print系列函数会将内容输出到系统的标准输出,区别在于
Print函数直接输出内容,
Printf函数支持格式化输出字符串,
Println函数会在输出内容的结尾添加一个换行符。

func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
package main

import "fmt"

func main()  {
    fmt.Print("Print输出信息!")
    name := "vita"
    fmt.Printf("Printf输出name:%s\n",name)
    fmt.Println("Println输出信息")
}

结果:
Print输出信息!Printf输出name:vita
Println输出信息

Process finished with exit code 0

1.1.2Fprint

Fprint系列函数会将内容输出到一个io.Writer接口类型的变量w中,我们通常用这个函数往文件中写入内容。
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
package main

import (
    "fmt"
    "os"
)

func main()  {
    //写入到标准输出
    fmt.Fprint(os.Stdout,"Fprint向标准输出写入内容")
    fmt.Fprintln(os.Stdout,"Fprintln向标准输出写入内容")
    name := "vita"
    fmt.Fprintf(os.Stdout,"Fprintf向标准输出写入内容name:%s",name)

    fileObj,err := os.OpenFile("./file",os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil{
        fmt.Println("打开文件出错,err:",err)
    }
    //写入到文件中
    fmt.Fprint(fileObj,"Fprint向文件中写入内容")
    fmt.Fprintln(fileObj,"Fprintln向文件中写入内容")
    fmt.Fprintf(fileObj,"Fprintf向文件中写入内容,name:%s",name)
}

结果:
Fprint向标准输出写入内容Fprintln向标准输出写入内容
Fprintf向标准输出写入内容name:vita
Process finished with exit code 0

1.1.3Sprint

Sprint系列函数会把传入的数据生成并返回一个字符串。
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string
package main

import "fmt"

func main()  {
    s1 := fmt.Sprint("Sprint")
    fmt.Println(s1)
    s2 := fmt.Sprintln("Sprintln")
    fmt.Println(s2)
    s3 := fmt.Sprintf("Sprintf,s1:%s",s1)
    fmt.Println(s3)
}

结果:
Sprint
Sprintln

Sprintf,s1:Sprint

Process finished with exit code 0

1.1.4Errorf

Errorf函数根据format参数生成格式化字符串并返回一个包含改字符串的错误。
func Errorf(format string, a ...interface{}) error
通常使用该方法定义错误类型。
package main

import "fmt"

func main()  {
    name := "vita"
    err := fmt.Errorf("%s创建了一个错误",name)
    fmt.Printf("value:%v type:%T",err,err)
}

结果:
value:vita创建了一个错误 type:*errors.errorString
Process finished with exit code 0

1.1.5格式化占位符

*printf系列函数都支持format格式化参数,在这个我们按照占位符将被替换的变量类型划分,方便查询和记忆。

1.1.5.1通用占位符

package main

import "fmt"

func main()  {
    fmt.Printf("v:%v\n", 100)
    fmt.Printf("v:%v\n", false)
    o := struct{ name string }{"小王子"}
    fmt.Printf("v:%v\n", o)
    fmt.Printf("+v:%+v\n", o)
    fmt.Printf("#v:%#v\n", o)
    fmt.Printf("T:%T\n", o)
    fmt.Printf("100%%\n")
}

结果:
v:100
v:false
v:{小王子}
+v:{name:小王子}
#v:struct { name string }{name:"小王子"}
T:struct { name string }
100%

Process finished with exit code 0

1.1.5.2布尔型

package main

import "fmt"

func main()  {
    fmt.Printf("t:%t\n", false)
    fmt.Printf("v:%v\n", false)

}

结果:
t:false
v:false

Process finished with exit code 0

1.1.5.3整型

package main

import "fmt"

func main()  {
    n := 65
    fmt.Printf("%b\n", n)
    fmt.Printf("%c\n", n)
    fmt.Printf("%d\n", n)
    fmt.Printf("%o\n", n)
    fmt.Printf("%x\n", n)
    fmt.Printf("%X\n", n)
}

结果:
1000001
A
65
101
41
41

Process finished with exit code 0

1.1.5.4浮点数与复数

package main

import "fmt"

func main()  {
    f := 12.34
    fmt.Printf("b:%b\n", f)
    fmt.Printf("e:%e\n", f)
    fmt.Printf("E:%E\n", f)
    fmt.Printf("f:%f\n", f)
    fmt.Printf("F:%F\n", f)
    fmt.Printf("g:%g\n", f)
    fmt.Printf("G:%G\n", f)
}

结果:
b:6946802425218990p-49
e:1.234000e+01
E:1.234000E+01
f:12.340000
F:12.340000
g:12.34
G:12.34

Process finished with exit code 0

1.1.5.5字符串和[]byte

package main

import "fmt"

func main()  {
    s := "小王子"
    fmt.Printf("%s\n", s)
    fmt.Printf("%q\n", s)
    fmt.Printf("%x\n", s)
    fmt.Printf("%X\n", s)
}

结果:
小王子
"小王子"
e5b08fe78e8be5ad90
E5B08FE78E8BE5AD90

Process finished with exit code 0

1.1.5.6指针

package main

import "fmt"

func main()  {
    a := 10
    fmt.Printf("%p\n", &a)
    fmt.Printf("%#p\n", &a)
}

结果:
0xc00007e000
c00007e000

Process finished with exit code 0

1.1.5.7宽度标识符

宽度通过一个紧跟在百分号后面的十进制数指定,如果未指定宽度,则表示值时除必需之外不作填充。精度通过(可选的)宽度后跟点号后跟的十进制数指定。如果未指定精度,会使用默认精度;如果点号后没有跟数字,表示精度为0。举例如下

package main

import "fmt"

func main()  {
    n := 12.34
    fmt.Printf("%f\n", n)
    fmt.Printf("%9f\n", n)
    fmt.Printf("%.2f\n", n)
    fmt.Printf("%9.2f\n", n)
    fmt.Printf("%9.f\n", n)
}

结果:
12.340000
12.340000
12.34
    12.34
       12

Process finished with exit code 0

1.1.5.8其他flag

package main

import "fmt"

func main()  {
    s := "小王子"
    fmt.Printf("%s\n", s)
    fmt.Printf("%5s\n", s)
    fmt.Printf("%-5s\n", s)
    fmt.Printf("%5.7s\n", s)
    fmt.Printf("%-5.7s\n", s)
    fmt.Printf("%5.2s\n", s)
    fmt.Printf("%05s\n", s)
}

结果:
小王子
  小王子
小王子
  小王子
小王子
   小王
00小王子

Process finished with exit code 0

1.2获取输入

1.2.1fmt.Scan

func Scan(a ...interface{}) (n int, err error)
Scan从标准输入扫描文本,读取由"空白符"分隔的值保存到传递给本函数的参数中,换行符视为空白符。
本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。
package main

import "fmt"

func main()  {
    var (
        name string
        age int
        married bool
    )
    fmt.Scan(&name,&age,&married)
    fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)
}

在终端输入name,age,married对应的值
lili 23 true
扫描结果 name:lili age:23 married:true 

Process finished with exit code 0

1.2.2fmt.Scanf

func Scanf(format string, a ...interface{}) (n int, err error)
Scanf 从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到本函数的参数中。
本函数返回成功扫描的数据个数和遇到的任何错误。
注意:
Scanf不同于Scan,Scanf为输入数据制定了具体的输入内容格式,只有按照格式输入数据,才会扫描成功并存入变量中。
package main

import "fmt"

func main() {
    var (
        name    string
        age     int
        married bool
    )
    fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &married)
    fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)
}

结果:
1:lili 2:27 3:true
扫描结果 name: age:0 married:false 

Process finished with exit code 0

1.2.3fmt.Scanln

func Scanln(a ...interface{}) (n int, err error)
Scanln类似Scan,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
本函数返回成功扫描的数据个数和遇到的任何错误。
package main

import "fmt"

func main() {
    var (
        name    string
        age     int
        married bool
    )
    fmt.Scanln( &name, &age, &married)
    fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)
}

结果:
lili 27 true
扫描结果 name:lili age:27 married:true 

Process finished with exit code 0

1.2.4bufio.NewReader

有时候,我们想完整获取输入的内容,而输入的内容可能包含空格,这种情况下可以使用bufio包来实现。
package main

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

func main() {
    reader := bufio.NewReader(os.Stdin) //从标准输入生成读对象
    fmt.Print("请输入内容:")
    text,_ := reader.ReadString(‘\n‘) //读到换行
    text = strings.TrimSpace(text)
    fmt.Printf("%#v\n",text)
}

结果:
请输入内容:ww qq aa
"ww qq aa"

Process finished with exit code 0

1.2.5Fscan系列

这几个函数功能分别类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从io.Reader中读取数据。

func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
package main

import (
    "fmt"
    "os"
)

func main() {
    var (
        name string
        age int
    )
    fileObj, err := os.OpenFile("./xx.txt", os.O_CREATE|os.O_RDONLY|os.O_APPEND, 0644)
    if err != nil {
        fmt.Println("打开文件出错,err:", err)
        return
    }
    fmt.Fscan(fileObj,&name,&age)
    fmt.Println(name,age)
}

结果:
lili 27

Process finished with exit code 0

1.2.6Sscan系列

这几个函数功能分别类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从指定字符串中读取数据。

func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
package main

import "fmt"

func main() {
    var (
        name string
        age int
    )
    fmt.Sscan("lili 27",&name,&age)
    fmt.Println(name,age)
}

结果:
lili 27

Process finished with exit code 0

原文地址:https://blog.51cto.com/10983441/2469457

时间: 2024-08-30 12:58:34

12.Go语言标准库之fmt的相关文章

go语言标准库之fmt

fmt标准库是我们在学习Go语言过程中接触最早最频繁的一个了,本文介绍了fmtb包的一些常用函数. fmt fmt包实现了类似C语言printf和scanf的格式化I/O.主要分为向外输出内容和获取输入内容两大部分. 向外输出 标准库fmt提供了以下几种输出相关函数. Print Print系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符. func Print(a ...inter

Go语言标准库之time

Go语言标准库之time 时间的格式化和解析 格式化 Format Go语言和其他语言的时间格式化的方式不同,Go语言格式化的方式更直观,其他的语言一般是yyyy-mm-dd package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Format("2006-01-02 15:04:05")) fmt.Println(now.Forma

开发者必备的 12 个 JavaScript 库

现在 web 设计是最有趣的了,做好 web 设计不仅要熟练使用 Javascript,css 和 html 等,还要有自己的创意设计.为了方便大家发挥自己的创意,就产生了很多 JS 框架,Node.js 扩展等等.有了这些工具,开发者们就能专注于创意设计了,而不用为某个功能而花费太多精力.这里我们介绍的是 12 个开发者们必备的 JavaScript 库,都是一些很基础功能很强大的库.有了这些库,开发者们可以节省很多时间,大大提高开发的效率,所以大家赶紧收藏起来吧:) 1) Headroom.

JSTL标签库中fmt标签,日期,数字的格式化

首先介绍日期的格式化:(不要嫌多哦) JSTL格式化日期(本地化) 类似于数字和货币格式化,本地化环境还会影响生成日期和时间的方式. <%@ page pageEncoding="UTF-8" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fmt" uri="htt

Go语言标准库堆(heap)封装及堆排序实现

Go语言的OOP,接口,接口的组合,基础库的函数及接口如何抽象设计, 这些东西在Go的Heap源码及演示例子处理中,都有很好的展示. 在"container/heap"中,它的接口是如下定义的: type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. }

15.Go语言标准库之log介绍

1.log 1.1使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法. 本包也提供了一个预定义的"标准"logger,可以通过调用Print系列(Print|Printf|Println).Fatal系列(Fatal|Fatalf|fatalln)和Panic系列(Panic|Panicf|PanicLn)来使用,比自行创建一个logger对象更容易使用. 例如:我们可以像下面的代码一样,直接通过log包来调用上岸提到的方法,默认它们会把日志信息大隐刀终

Go基础篇【第2篇】: 内置库模块 fmt

package fmt import "fmt" mt包实现了类似C语言printf和scanf的格式化I/O.格式化动作('verb')源自C语言但更简单. Printing verb: 通用: %v 值的默认格式表示 %+v 类似%v,但输出结构体时会添加字段名 %#v 值的Go语法表示 %T 值的类型的Go语法表示 %% 百分号 布尔值: %t 单词true或false 整数: %b 表示为二进制 %c 该值对应的unicode码值 %d 表示为十进制 %o 表示为八进制 %q

suse系统 sybase 12.5建库

在linux系统已经安装sybase 12.5之后,可以在命令行 执行 isql -Usa -P密码 -i  脚本文件(如下) 以下是脚本内容:(创建为yxmdb的库和user001,密码是123456的数据库用户) declare @vdevno int select @vdevno=1+max(low/power(2,24)) from master..sysdevices disk init name= "YXMDevice",physname="/home/sybas

开发者必备的12个JavaScript库

现在 web 设计是最有趣的了,做好 web 设计不仅要熟练使用 Javascript,css 和 html 等,还要有自己的创意设计.为了方便大家发挥自己的创意,就产生了很多 JS 框架,Node.js 扩展等等.有了这些工具,开发者们就能专注于创意设计了,而不用为某个功能而花费太多精力.这里我们介绍的是 12 个开发者们必备的 JavaScript 库,都是一些很基础功能很强大的库.有了这些库,开发者们可以节省很多时间,大大提高开发的效率,所以大家赶紧收藏起来吧:) 1) Headroom.