Go语言学习(三)

第3章 基本数据

在这里插入图片描述
本章介绍基础类型

3.1 整数

在这里插入图片描述

  • 此外还有int和uint两种累心。它的大小取决于所在硬件平台和编译器,两者大小相同。
  • rune类型是int32类型的同义词,常常用于指明一个值是Unicode码点(code point)。
  • byte是uint8类型的同义词,强调一个值是原始数据。
  • 无符号整数类型uintptr,其大小不明确,但足以完整存放指针。uintptr型仅仅用于底层编程,例如在Go程序与C程序库或操作系统的接口界面。

在这里插入图片描述
在这里插入图片描述

  • 浮点数转成整型,会舍弃小数部分,趋零结尾(正值向下取整,负值向上取整)。
  • 当前。八进制数似乎仅有一种用途——表示POSIX文件系统的权限——而十六进制数广泛用于强调其位模式,而非数值大小

在这里插入图片描述

3.2 浮点数

类型其他
float32math.MaxFloat32=3.4e38 math.MinFloat32=1.4e-45
float64math.MaxFloat64=1.8e308 math.MinFloat64=4.9e-324

十进制下,flaot32的有效数字大约为6位,float64的有效数字大约是15位。绝大多数情况下,应优先选用float64,因为除非格外小心,否则float32的运算会迅速累积误差。另外,float32能精确表示的正整数范围有限。
小数点前面的0和后面的0可以省略:.707、1.
科学计数法:6.0e-34
在这里插入图片描述
math包中的Inf-Inf表示正无穷和负无穷,NaN表示非数字,math.IsNaNmath.NaN函数判断七参数是否为非数值,但是结果不能进行比较在这里插入图片描述

3.3 复数

Go具备两种大小的复数complex64complex128,二者分别由float32和float64构成。内置的complex函数根据给定的实部和虚部创建复数,而内置的real函数和imag函数则分别提取复数的实部和虚部

var x complex128 = complex(1,2)  // 1+2i
var y complex128 = complex(3,4)  // 3+4i
fmt.Println(x*y)				 // "(-5+10i)"
fmt.Println(real(x*y))			 // "-5"
fmt.Println(imag(x*y))			 // "10"

在浮点数或十进制数后面紧跟着i,就变成了一个实部为零的复数
附属常量可以与其他常量相加(整形或浮点型,实数和虚数皆可)
可以用==!=判断复数是否等值。若两个复数的实部和虚部都相同,则他们相等。
math/cmplx包提供了复数运算所需的库函数,例如复数的平方根函数和复数的幂函数。


3.4 布尔值

  • bool型的值或布尔值只有两种可能:真(true)和假(false)。

  • &&||优先级更高

  • 布尔值无法隐式地转换成数值(如0或1)
    使用显式if:

    i := 0
    if b {
    	i = 1
    }
    
  • 如果转换操作常常用到,我们可以专门写个函数

    func btoi (b bool) int {
    	if b {
    		return 1
    	}
    	return 0
    }
    
  • 反向操作:

    func itob(i int) bool { return i != 0 }
    

3.5 字符串

  • 字符串是不可变的字节序列,他可以包含任意数据,包括0值字节,但主要是人类可读的文本。习惯上,文本字符串被解读成按UTF-8编码的Unicode码点(文字符号)序列。
  • 内置的len函数返回字符串的字节数(并非文字符号的数目),下标访问操作s[i]则取得第i个字符,其中0≤i<len(s)
  • 字符串的第i个字节比一定就是第i个字符,因为非ASCII字符的UTF-8码点需要两个字节或多个字节
  • 字符串切片操作和python差不多,+也通用
  • 字符串不可改变,所以字符串内部的数据不允许修改,使得复制任何长度字符串的开销都低廉。
  • 子串的生成只需要新建一个指针指向对应的数据地址
    在这里插入图片描述

3.5.1 字符串字面量

  • 字符串的值可以直接写成字符串字面量(string literal),形式上就是带双引号的字节序列:"Hello,world"
    在这里插入图片描述
    在这里插入图片描述
  • 原生的字符串字面量的书写形式时`…`,使用反引号而不是双引号。原生的字符串字面量内转义字符不能起作用;实质内容与字面写法严格抑制,包括反斜杠和换行符,因此,在程序源码中,原生的字符串字面量可以展开多行。唯一的特殊处理是回车符会被删除(换行符会保留),使得同一字符串在所有平台上的值都有相同,包括习惯在文本文档存入换行符的系统

3.5.3 UTF-8

  • Go的源文件以UTF-8编码。
  • Go语言中,字符串字面量的转义让我们得以用码点的值雷志明Unicode字符。有两种形式,\uhhhh表示16位码点值,\Uhhhhhhhh表示32位码点值,其中每个h代表一个十六进制数字;32位形式的码点值几乎不需要用到。这两种形式都已UTF-8编码表示出给定的码点,如下实例:
"世界"
"\xe4\xb8\x96\xe7\x95\x8c"
"\u4e16\u754c"
"\U00004e16\U0000754c"

后面三行的转义序列用不同的形式表示第一行的字符串,但实质上他们的字符串值都是相同的

3.5.4 字符串和字节slice

  • 4个标准包对字符串操作特别重要:bytes、strings、strconv和unicode

3.5.5 字符串和数字的相互转换

  • 整数转换为字符串,一种选择使用fmt.Sprintf,另一种做法是使用函数strconv.Itoa("interger to ASCIII"):
    x := 123
    y := fmt.Sprintf("%d",x)
    fmt.Println(y,strconv.Itoa(x)) // “123 123”
  • FormatInt和FormatUint()可以按不同的进位格式化数字:
    fmt.Println(strconv.FormatInt(int64(x),2)) //“1111011”
    在这里插入图片描述

3.6 常量

  • 常量是一种表达式,其可以保证在编译阶段就计算出表达式的值,并不需要等到运行时,从而使编译器得以知晓其值,所有常量本质上都属于基本类型:布尔值、字符串或数字。

3.6.1 常量生成器iota

  • 常量的声明可以使用常量生成器iota,它创建一系列相关值,而不是逐个值显式写出。常量声明中,iota从0开始取值,逐项加1.
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是兔不是秃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值