美文网首页
2.go快速入门笔记-基本数据结构

2.go快速入门笔记-基本数据结构

作者: 一个菜鸟JAVA | 来源:发表于2020-01-19 17:38 被阅读0次

Go中数据类型分为四种:基础类型、聚合类型、引用类型、接口类型

1.整数

  • 有符号整数分四种:8位(int8)、16位(int16)、32位(int32)、64位(int64)
  • 有符号对应的无符号:uint8、unint16、unint32、unit64
  • intunit.这两种类型的大小与编译器和硬件平台有关
  • rune类型是int32类型的同义词,常常用于指明一个值的Unicode码点.同样还有byteint8类似
  • unitptr是一种无符号整数,大小并不明确,但是足以存储指针.该类型仅仅用于底层编程,例如Go与C程序库或者操作系统的接口界面

2.浮点数

Go有两种浮点数float32float64.绝大多数情况下优先选用float64.

3.复数

Go有两种大小的复数complex64complex128,两者分别由float32float64构成.

4.布尔值

bool型的值只有两种可能:truefalse

5.字符串

字符串是不可变的字节序列,它可以包含任意数据,包括0值字节.需要注意一下几点:

  • 内置的len()返回的是字符串的字节数(不是文字符号的数目)
  • 可以通过s[i]的方式获取第i+1个字节的值.因为下标是从0开始算的,所以需要+1,所以下标的最大值为len(i)-1(在s不为空串的情况下).越过下标取值将会抛出异常.
  • s[i]获取到的并不一定就是一个完整的字符.因为Go中的字符串是UTF-8编码.关于编
    码的知识请参考ASCII,Unicode和UTF-8
  • 子字符串操作s[i:j]将产生一个新的字符串,内容取自于原字符串的字节,下标从i(包括)开始到j(不包括).字节的大小为j-i
  • 不能通过s[i] = 'a'这种方式修改字符串的内容.因为字符串内容部的数据不允许修改.这代表两个字符串能安全的共用同一段底层内存,使得复制字符串开销降低.例如ss[0,6]使用的同一段内存,他们不需要重新分配新的内存
    字符串共用内存段

5.1字符串字面量

字符串可以直接写成字符串字面量,形式就是使用双引号的总结序列.
有部分字符无法输入的可以通过转义序列写入,形式就是以\开始.常用的有一下几种:

输入内容 含义
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 指标符
\' 单引号
\" 双引号
\\ 反斜杆

原生的字符串字面量的书写形式以``反引号,而不是使用单引号或者双引号.在原生的字符串字面量中,转义序列将失效.

5.2 字符串和字节slice

Go中对字符串操作提供了四个重要的包:bytes,strings,strconv和unicode

strings包主要提供搜索,替换,比较,修整,切分与连接字符串等函数
bytes包提供的函数与strings类似,用户操作字节slicep(bytep[]类型)
strconv包主要提供类型转换和为字符串去除添加引号等函数
unicode包主要提供判别文字符号特征等函数.

5.3 字符串和数字相互转换

strconv包可以相互转换数字和字符.

x,err := strconv.Atoi("123") //将字符串123转化成整数123
y,err := strconv.ParseInt("123",10,64) //转换成十进制整数,最长为64位

6.常量

常量是一种表达式,在编译阶段就能计算出表达式的值,不需要等到运行时才知道它的值.所以常量本质上都属于基本类型:布尔,字符串或数字.

//声明一个float64类型的常量
const pi float64 = 3.1415926
//声明一个name常量,类型可以自己推导出来
const name = "tom"
//多个常量,还可以这样简写方便
const (
    author         = "莫言"
    country string = "中国"
    //内置函数len()计算常量的长度也是常量
    l = len(country)
)

许多常量的就在编译时就能完成,某些错误通常要运行时才能检测到,但是操作数是常量,编译时就会报错.例如整数除以0,字符串下标越界,以及任何产生无限大值的浮点数运算.
对于常量操作数,所有数学运算,逻辑运算和比较运算的结果依然是常量.

6.1常量生成器iota

iota从0开始取值,逐项+1.例如下面代码:

type Weekday int
const(
    Sundy Weekday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

上面的代码中,Sunday的值为,Monday的值为1,以此类推.

6.2无类型常量

虽然常量可以有任意一个确定的基础类型,例如int或float64,但是许多常量并没有一个明确的基础类型.编译器为这些没有明确的基础类型的数字常量提供比基础类型更高精度的算术运算.例如下面的例子:

package main

import "fmt"
//无类型常量
const pi = 3.1415926

func mian(){
    var f1 float32 = 1.2
    var f2 float64 = 1.3
    // pi可以与f1(float32)相加
    fmt.Println(f1 + pi)
    // pi可以与f2(float64)相加
    fmt.Println(f2 + pi)
    // f1 + f2 相加编译不通过
}

相关文章

  • 2.go快速入门笔记-基本数据结构

    Go中数据类型分为四种:基础类型、聚合类型、引用类型、接口类型 1.整数 有符号整数分四种:8位(int8)、16...

  • 02. 快速入门

    快速入门 基本语法: 和java基本一致不同点 变量申明: var 变量名; 数据结构

  • algorithm-pattern

    参考自algorithm-pattern翻译为java代码 入门篇 算法快速入门 数据结构与算法 数据结构是一种数...

  • Redis学习札记

    本文是Redis入门指南的阅读笔记,同事推荐的,通过本书了解到了很多Redis支持的数据结构、很多应用场景等。基本...

  • H5

    ReactNative快速入门笔记 如果运行报错,可以文章最后找寻解决方案。 首先需要了解一些基本的React的概...

  • serviceComb微服务 学习记录-快速入门

    环境:MacOS 快速入门快速入门部分,基本按照官方quick start可以跑。 遇到的问题 1.com.net...

  • 算法笔记 晴神(胡凡等著) 完整pdf下载

    C/C++快速入门、入门模拟、算法初步、数学问题、C++标准模板库(STL)、数据结构专题(二章)、搜索专题、图算...

  • 快速入门很重要

    读书笔记 1、快速入门不仅绝对有可能,而且绝对必要。 快速入门与“速成”是有差别的。“速成”指的是“迅速成功”,这...

  • C++ 快速入门笔记:基本语法

    数据类型 枚举类型 默认情况下,第一个名称的值是 0,后面的依次加 1。也可以自定初始值: 在这里,blue 的值...

  • Json Schema 快速入门

    Json Schema 快速入门 JSON 模式是一种基于 JSON 格式定义 JSON 数据结构的规范。它被写在...

网友评论

      本文标题:2.go快速入门笔记-基本数据结构

      本文链接:https://www.haomeiwen.com/subject/orarzctx.html