漫谈golang之fmt格式化模块

fmt 漫谈

Go Walkthrough: fmt

fmt常用的格式化字符串

  • %v 是个通用的占位符。它会自动将变量转换为默认格式的字符串,这在打印字符串或数字等原语时非常有用,而且不需要特定的选项
  • %#v 根据go语法打印。尤其在打印struct和切片时特别直观
package main
import (
  "fmt"
)
//1
var brand = "ALIENWARE"
type computer struct {
  name string
  price float32
  config []string
  brand *string
}

func main() {
  myComputer := computer{"tktk", 18000.00, []string{"i7 9700k", "RTX 2080Ti", "DDR4 32G"}, &brand}
  fmt.Printf("my computer is: \n%#v\n", myComputer)
    fmt.Printf("my computer is: \n%v\n", myComputer)
}

结果:

go version go1.12 linux/amd64
my computer is:
main.computer{name:"tktk", price:18000, config:[]string{"i7 9700k", "RTX 2080Ti", "DDR4 32G"}, brand:(*string)(0x5531b0)}
my computer is:
{tktk 18000 [i7 9700k RTX 2080Ti DDR4 32G] 0x5531b0}
}
  • %T 打印变量的类型
  • %d 打印10进制整数
  • %x和%X 打印16进制整数
  • %f 打印浮点数,可以通过%8.2f,%-8.2f,%08.2f,% f等来控制打印字符串的空格
  • %q 能打印加引号的字符串。当您的数据可能有不可见字符(如空字符串)时,这是有用的,因为引用的字符串将它们打印为转义序列。
  • %p 打印变量的指针地址。当您正在调试代码并且希望检查不同的指针变量是否引用相同的数据时,这个方法非常有用。

fmt Printing

FMT包的主要用途是格式化字符串。这些格式化函数按其输出类型-STDOUT、io.Writer和String进行分组。
  • 打印到stdout
// 按照默认格式打印一系列变量
func Print(a ...interface{}) (n int, err error)
// 相比Print,在变量之间插入了空格,并最后添加上换行符
func Println(a ...interface{}) (n int, err error)
// 根据自定义格式化字符串,能打印不同格式的输出
func Printf(format string, a ...interface{}) (n int, err error)
  • 打印到io.Writer
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)

Fprint是更通用的形式,print仅仅是Fprint(os.Stdout, "Hello World!")的包装

  • 格式为字符串
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string

当大量采用Sprint产生字符串,会产生瓶颈问题。

  • Errorf()
func Errorf(format string, a ...interface{}) error {
    return errors.New(Sprintf(format, a...))
}

Scanning

fmt包也有从stdin,io.Reader, string读取并格式化的api。

  • 从stdin读取
func Scan(a ...interface{}) (n int, err error)
func Scanf(format string, a ...interface{}) (n int, err error)
func Scanln(a ...interface{}) (n int, err error)
  • 从io.Reader读取
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
  • 从string读取
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)
var name string
var age int
if _, err := fmt.Scan(&name, &age); err != nil {
        fmt.Println(err)
        os.Exit(1)
}
fmt.Printf("Your name is: %s\n", name)
fmt.Printf("Your age is: %d\n", age)

执行交互

$ go run main.go
Jane 25
Your name is: Jane
Your age is: 25

总之,如果从命令行读取并解析到指定的interface,如例子中的name,age,我们有更好用的flag包可以使用

原文地址:https://www.cnblogs.com/linyihai/p/10727308.html

时间: 2024-08-07 17:00:59

漫谈golang之fmt格式化模块的相关文章

golang中fmt的'占位符'使用

golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式. Printf("%v", people) {zhangsan}, %+v 打印结构体时,会添加字段名 Printf("%+v",

Golang之字符串格式化

字符串格式化 // Go 之 字符串格式化 // // Copyright (c) 2015 - Batu // package main import ( "fmt" ) type point struct { x, y int } func main(){ // 格式化整型,使用`%d`是一种 // 标准的以十进制来输出整型的方式 // 有符号十进制整数(int)(%ld.%Ld:长整型数据(long),%hd:输出短整形.) fmt.Println("=====%d,输

Golang os/user 用户模块

os/user 用户模块 导入语法: import "os/user" 模块概述 os/user 模块的主要作用是通过用户名或者 id 从而获取其相关属性. User 结构体 type User struct { Uid string Gid string Username string Name string HomeDir string } User 代表一个用户账户. Uid :用户的 ID Gid :用户所属组的 ID,如果属于多个组,那么此 ID 为主组的 ID Userna

JSTL fmt 格式化时间

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.

格式化输出(fmt包)

fmt 包 功能:fmt包实现了类似C语言printf和scanf的格式化I/O.格式化动作('verb')源自C语言但更简单. fmt格式化输出 Printf 函数有超过10个各种转义字符,Go 程序员称为 verb.下表不完整,但是它说明了很多可用的功能: verb 描述 %d 十进制数 %x, %o, %b 十六进制,八进制,二进制数 %f, %g, %e 浮点数 %t 布尔型 %c 字符(Unicode码点) %s 字符串 %q 带引号字符串或者字符 %v 内置格式的任何值 %T 任何值

golang fmt格式“占位符”

本文为转发,原文地址 golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式. Printf("%v", people) {zhangsan}, %+v 打印结构体时,会添加字段名 Printf("

通过fmt标签格式化el表达式中的日期、小数

首先引入fmt外部文件包 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 格式化日期 //将日期按照pattern的格式展示<fmt:formatDate value="${需要格式化的日期}" pattern="yyyy-MM-dd"/> 格式化小数 //含义:整数位最少是0,小数位是一位小数<fmt:forma

Java程序员的Golang入门指南(上)

Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如果有人说X语言比Y语言好,两方的支持者经常会激烈地争吵.如果你是某种语言老手,你就是那门语言的"传道者",下意识地会保护它.无论承认与否,你都已被困在一个隧道里,你看到的完全是局限的.<肖申克的救赎>对此有很好的注脚: [Red] These walls are funny.

[读书] Golang Web 编程

1.golang的安装工具 1.1 GVM 第三方开发的Go多版本管理工具 2.golang环境变量 2.1 GOROOT=D:\go (golang 安装目录) 2.2 GOBIN=D:\go\bin (golang 生成的BIN目录) 2.3 GOPAT=D:\code\golang (golang 工作区,允许多个目录,;隔开) 执行goget命令时,会将包放在第一个配置的gopath目录中 GOPATH约定三个子目录:src(源码) .bin(编译生成的文件, .a).pkg(编译后的可