当定义了一个有很多方法的类型时,十之八九你会使用 String() 方法来定制类型的字符串形式的输出,换句话说:一种可阅读性和打印性的输出。如果类型定义了 String() 方法,它会被用在 fmt.Printf() 中生成默认的输出:等同于使用格式化描述符 %v 产生的输出。还有 fmt.Print()fmt.Println() 也会自动使用 String() 方法。

我们使用第 4 节中程序的类型来进行测试:

示例 22 method_string.go:

package mainimport ("fmt""strconv"
)type TwoInts struct {a intb int
}func main() {two1 := new(TwoInts)two1.a = 12two1.b = 10fmt.Printf("two1 is: %vn", two1)fmt.Println("two1 is:", two1)fmt.Printf("two1 is: %Tn", two1)fmt.Printf("two1 is: %#vn", two1)
}func (tn *TwoInts) String() string {return "(" + strconv.Itoa(tn.a) + "/" + strconv.Itoa(tn.b) + ")"
}

输出:

two1 is: (12/10)
two1 is: (12/10)
two1 is: *main.TwoInts
two1 is: &main.TwoInts{a:12, b:10}

当你广泛使用一个自定义类型时,最好为它定义 String()方法。从上面的例子也可以看到,格式化描述符 %T 会给出类型的完全规格,%#v 会给出实例的完整输出,包括它的字段(在程序自动生成 Go 代码时也很有用)。

备注

不要在 String() 方法里面调用涉及 String() 方法的方法,它会导致意料之外的错误,比如下面的例子,它导致了一个无限迭代(递归)调用(TT.String() 调用 fmt.Sprintf,而 fmt.Sprintf 又会反过来调用 TT.String()...),很快就会导致内存溢出:

type TT float64func (t TT) String() string {return fmt.Sprintf("%v", t)
}
t. Stri
ng()

string类型转bool类型_Go 类型的 String() 方法和格式化描述符相关推荐

  1. PHP 数据类型划分(8种)、获取数据(变量)的类型函数、单引号和双引号的字符串区分转义符、定界符、拓展

    首先,我们来看看八种数据类型划分有哪些? 数据类型划分: 基本类型(标量类型): 整数类型:int   integer 浮点数类型:float  double 字符串类型:string 布尔类型:bo ...

  2. 4-C++ 中string类、bool类型、模板、array数组、vector向量的基础知识

    目录 继续C++ ------3 ++操作符的友元函数重载 ++操作符的成员函数重载 赋值运算符重载 类型转换运算符 运算符重载注意事项 string类 bool类型的练习 模板 1.函数模板 2.类 ...

  3. java.lang.date_无法将java.lang.String类型的值转换为必需类型java.util.Date

    from date: to date: Trouver 这是控制器代码部分: @RequestParam(name = "d1", defaultValue = "190 ...

  4. protobuf string类型_Protobuf3 使用其他消息类型

    Protobuf3 使用其他消息类型 您可以使用其他消息类型作为字段类型.例如,假设您希望在每个SearchResponse消息中包含Result消息,为此,您可以在.proto中定义结果消息类型,然 ...

  5. 【spring boot】Controller @RequestMapping 数据绑定:接收 Date 类型参数时遇错,将 String 类型的参数转换成 Date 类型

    前言 spring boot 2.1.1.RELEASE 遇错 Failed to convert value of type 'java.lang.String' to required type ...

  6. java integer引用传递_在java中String,对象,Integer(包装类型的)关于引用传递还是值传递...

    场景: 大家都知道基本的数据类型,int,float等等这种是按值传递的.但是对于String,对象,Integer是怎样传递呢? 原理知识: 如果参数类型是原始类型,那么传过来的就是这个参数的一个副 ...

  7. java integer 值传递_在java中String,对象,Integer(包装类型的)关于引用传递仍是值传递...

    场景: 你们都知道基本的数据类型,int,float等等这种是按值传递的.可是对于String,对象,Integer是怎样传递呢?java 原理知识: 若是参数类型是原始类型,那么传过来的就是这个参数 ...

  8. java中的string类型_Java中的字符串类型(String)

    String 字符串是一个引用数据类型,字符串都是对象. String特性:1.在程序中出现的字符串字面量(常量),在程序中运行时会以对象的形式保存在JVM内存的字符串池中,并且所有的这些字符串字面量 ...

  9. java字段描述符_Java 的方法签名与字段类型表示-[Ljava.lang.String;

    我们什么时候会接触到 Java 的方法签名呢?在进行 JNI 调用时,还有在看方法重载时.重载的方法是有不同的方法签名的,而是不区分返回值,而实际方法签名还揉入了返回值类型的,还有就是 javap - ...

最新文章

  1. 深入理解DOM事件类型系列第六篇——加载事件
  2. int整数型转换char*字符串
  3. android 获取 service 信息
  4. canvas 轮播图片
  5. Intel® Media Server Studio Support
  6. 【问题】windows网络问题快速诊断方法或工具。终于调通了MQTT,论坑爹的windows防火墙!...
  7. [云炬创业基础笔记]第九章企业的法律形态测试1
  8. 【BZOJ-4245】OR-XOR 按位贪心
  9. 喷喷计算机语言掌握的程度
  10. python通过文件路径读取图片
  11. matlab画直方图_直方图规定化+暗通道去雾 python
  12. stata15中文乱码_一次性解决Stata中文乱码问题
  13. Helix QAC软件下载安装使用试用
  14. Windows如何清理C盘的缓存文件和删除恶意软件
  15. Python3,多线程爬取某瓣小电影~ ~
  16. 哪款运动蓝牙耳机好用、运动型蓝牙耳机推荐
  17. 高等数学知识点总结——导数定义及性质、微积分、泰勒展开、洛必达法则、函数单调性判断
  18. 测试Unity中常用代码的运行所需时间:循环和函数篇 #性能测试 # for,foreach,while循环 #委托事件
  19. 京东API、获得JD商品详情API调取数据部分代码展示
  20. 【前沿解读】斯坦福研究员论文-以太坊可逆交易标准ERC20/721R的机制、创新与局限

热门文章

  1. 用 Pandas 做 ETL,不要太快
  2. #PCIE# PCIe的接口形态之M.2接口
  3. 全志平台设备固件升级方法
  4. MongoDB基本介绍及一些用法
  5. 科研集训营-深度学习:计算机图像中的应用
  6. darksider(darksiders genesis)
  7. Moonlight iPad全屏无边框串流方法
  8. 群晖 mysql 端口配置,如何连接群晖里的MYSQL数据库
  9. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门
  10. mac图像查看器EdgeView for Mac