Golang中的格式化输入输出

打印输出

在Go语言中有多种输出方式,不同的输出适用场景不同。归纳起来有三种,每种还分为3种方式(原内容、原内容+ln、原内容+f)

  • PrintXX()
  • FprintXX()
  • SprintXX()

FprintXX

  • FprintXX在Go Web中使用比较多,把内容写到响应流中。

  • 以Fprintln()为例,源码如下:

    // Fprintln formats using the default formats for its operands and writes to w.
    // Spaces are always added between operands and a newline is appended.
    // It returns the number of bytes written and any write error encountered.
    func Fprintln(w io.Writer, a ...interface{}) (n int, err error) {p := newPrinter()p.doPrintln(a)n, err = w.Write(p.buf)p.free()return
    }
    
    • 函数参数中第一个参数是输出流,后面参数是内容,表示把内容写入到输出流中

    • 第一个返回值表示输出内容的长度(字节数)

      • Fprintln()输出后会添加换行符,所以长度比内容多1个

      • Fprintln()源码中p.doPrintln(a)的源码如下:

        // doPrintln is like doPrint but always adds a space between arguments
        // and a newline after the last argument.
        func (p *pp) doPrintln(a []interface{}) {for argNum, arg := range a {if argNum > 0 {p.buf.writeByte(' ')}p.printArg(arg, 'v')}p.buf.writeByte('\n')
        }
        
    • FprintXX()支持下面三种方式

      • os.Stdout表示控制台输出流
      func main() {fmt.Fprint(os.Stdout, "内容1")        // 向流中写入内容,多个内容之间没有空格fmt.Fprintln(os.Stdout, "内容2")      // 向流中写入内容额外写如换行符,多个内容之间有空格分割fmt.Fprintf(os.Stdout, verb, "内容3") // 根据verb格式向流中写入内容
      }
      

PrintXX

  • 以Println()举例,源码如下:

    // Println formats using the default formats for its operands and writes to standard output.
    // Spaces are always added between operands and a newline is appended.
    // It returns the number of bytes written and any write error encountered.
    func Println(a ...interface{}) (n int, err error) {return Fprintln(os.Stdout, a...)
    }
    
    • 可以看到Println()底层实际是Fprintln()
    • Println()把结果打印到控制台,返回内容长度和错误。
  • PrintXX支持下面三种方式

    func main() {fmt.Print("内容", "内容")       // 输出内容后不换行fmt.Fprintln("内容", "内容")   // 输出内容后换行fmt.Fprintf(verb, "内容") // 根据verb输出指定格式内容
    }
    

SprintXX

  • 以Sprintln()举例,源码如下:

    // Sprintln formats using the default formats for its operands and returns the resulting string.
    // Spaces are always added between operands and a newline is appended.
    func Sprintln(a ...interface{}) string {p := newPrinter()p.doPrintln(a)s := string(p.buf)p.free()return s
    }
    
    • Sprintln()把形成结果以字符串形式返回,并没有打印到控制台。
    • 从严格意义讲SprintXX不是打印输出,而更像字符串转换。
  • SprintXX支持下面三种写法

    func main() {fmt.Sprint("内容1", "内容2")fmt.Sprintln("内容2")fmt.Sprintf(verb, "内容3")
    }
    

常用转义字符汇总

verb 含义
%d 十进制整数
%x,%X 大小写方式显示十六进制整数
%o 八进制整数
%b 二进制整数
%f,%g,%e 浮点数
%t 布尔值
%c 字符
%s 字符串
%q 输出带双引号的字符串
%v 对应值的默认格式
%T 类型
%p 内存地址
%% 字符%
\n 换行
\t 缩进

接收用户输入

程序运行时,运行到接收用户输入语句,程序阻塞,用户在控制台输入内容后,把内容赋值给对应的变量,程序继续运行。

接收用户输入的几种方式

使用Scanln(&变量名, &变量名)的方式接收

  • 输入的内容必须都在同一行
  • 每个内容之间使用空格分割
  • 回车换行后表示停止输入
    • 如果希望接收3个值,而在控制台只输入2个值,回车后也停止接收
    • 如果希望接收2个值,而在控制台输入3个值,回车后只能接收两个值
func main() {var name, age stringfmt.Print("请输入姓名和年龄: ")fmt.Scanln(&name, &age) // 此处&变量名是地址fmt.Println("接收到的内容为: ", name, age)
}

使用Scanf(verb, &变量名)按照指定的格式进行输入

func main() {var a, b stringfmt.Scanf("%s\n%s", &a, &b)fmt.Printf("%s\n%s", a, b)
}

上面程序中,每次换行输入一个内容。

如果需要同行输入两个字符串,中间使用空格分割。

func main() {var a stringvar b string//输入时必须输入: aaa bbb//如果中间没有空格则把所有内容都赋值给了afmt.Println(a, b)
}

Golang中的格式化输入输出相关推荐

  1. Python练习 | Python3中的格式化输入输出之print函数

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 Python2版本和Python3 ...

  2. fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出

    格式化输入输出 1.         fprintf(格式化输出数据至文件) 相关函数  printf,fscanf,vfprintf 表头文件  #include<stdio.h> 定义 ...

  3. C++格式化输入输出

    要实现格式化输入输出,程序需要包含 iostreams 标准标头 <iomanip> 以定义几个各自采用单个参数的操控器. 备注: 其中每个操控器都返回重载 basic_istream&l ...

  4. python输出变量代码_Python中变量的输入输出实例代码详解

    1.变量的输入: input函数: input() input("请输入银行卡密码") password = input("请输入银行卡密码") 变量名 = i ...

  5. java判断输入的格式化_Java的字符串及格式化输入输出

    Java的字符串及格式化输入输出 1.String的不可变 在浅析Java的jvm上的内存位置的分配里已经说明,String使用了常量池技术,所以在栈中的应用要么是指向常量池,要么是指向堆,Strin ...

  6. std::string格式化输入输出

    在C语言中: C函数有sprintf函数, 比较方便, 但是需要知道所需要的内存空间是多少. 在C++的框架MFC中: 在MFC中CString 有Format函数来格式化字符串. 很方便. 难过的是 ...

  7. C语言笔记:格式化输入输出(fprintf、fscanf、sscanf...)

    C语言笔记:格式化输入输出(fprintf.fscanf.sscanf-) 包含以下函数的基本库:stdlib.h fprintf int fprintf(FILE *stream, const ch ...

  8. golang 操作日期_使用Godate在Golang中轻松进行日期操作

    golang 操作日期 by Kofo Okesola 由Kofo Okesola 使用Godate在Golang中轻松进行日期操作 (Easy date manipulation in Golang ...

  9. Linux Signal及Golang中的信号处理

    转载地址:https://colobu.com/2015/10/09/Linux-Signals/ 信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方 ...

最新文章

  1. dqn在训练过程中loss越来越大_用DQN算法玩FlappyBird
  2. java操作mongodb基础(查询 排序 输出list)
  3. Spring Sleuth和Zipkin跟踪微服务
  4. SQL Server 2012 Managed Service Account
  5. VTK:绘制圆圈用法实战
  6. 图书管理系统c++_校园图书系统写后感
  7. 微信公众号 模版消息 跳转到小程序报错{ errcode: 40013, errmsg: 'invalid appid hint: [cC6RwA09011295]' }
  8. 智能机器人路径规划及代码_AI割草机器人用ML+传感器自动规划路径
  9. TensorFlow入门--张量的定义与基本运算
  10. 关于kafka的几个问题
  11. idea中新建javaWeb项目
  12. signature=c91e848161f7e366c6b81d68e4a56197,Prince (Short Story)
  13. 蓝桥杯 BASIC-4 基础练习 数列特征
  14. 【Unity】unity3d客户端网络框架
  15. 凯恩帝串口通信怎么设置_凯恩帝K100T-Ci_V3.1_连接调试手册_140815.pdf
  16. 计算机行业的最新技术,计算机行业发展空间巨大 三大必然趋势引领发展
  17. 惠普笔记本电脑驱动BIOS下载中心,战66驱动下载
  18. android消息提示框大小,android Toast設置彈框大小
  19. 【微信小程序】关于小程序的协同工作与发布的工作流程
  20. 单片机、ARM、DSP、FPGA区别与应用领域

热门文章

  1. PolarisMesh系列文章——灰度发布系列(蓝绿发布)
  2. 万物新生(爱回收)三季度GMV与收入均超预期达成 总营收同比增长48%
  3. CSP 序列查询新解 202112-2
  4. 全志V853 NPU开发(四)模型部署
  5. 计算机视觉方向地理空间遥感图像数据集汇总
  6. 安发生物“重点实验室”通过建设验收,科研实力备受肯定
  7. macosx输入法将英文设成默认
  8. Python图像处理库PIL的ImageColor模块介绍
  9. 读《测试驱动开发的3项修炼--走出TDD丛林》
  10. 初学小程序(第4天)