美文网首页
Go语言基础篇(2) —— Go语言常用的数据结构

Go语言基础篇(2) —— Go语言常用的数据结构

作者: 刘彦青 | 来源:发表于2019-08-09 17:16 被阅读0次

学习目标

掌握常见数据类型的使用


布尔类型

var v1 bool //默认值为false
v1 = true 
v2 := (1 == 2) // v2也会被推导为bool类型 

数值类型

整型:

int8、byte、int16、int、uint、uintptr等。

类型 长度(字节) 取值范围
int8 1 -128 ~ 127
uint8(即byte) 1 0 ~ 255
int16 2 -32 768 ~ 32 767
uint16 2 0 ~ 65 535
int32 4 -2 147 483 648 ~ 2 147 483 647
uint32 4 0 ~ 4 294 967 295
int64 8 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
uint64 8 0 ~ 18 446 744 073 709 551 615
int 平台相关 平台相关
uint 平台相关 平台相关
uintptr 同指针 在32位平台下为4字节,64位平台下为8字节

int和int32在Go语言里被认为是两种不同的类型,编译器也不会帮你自动 做类型转换

支持的位运算符:

运算 含义 样例
x << y 左移 124 << 2 // 结果为496
x >> y 右移 124 >> 2 // 结果为31
x ^ y 异或 124 ^ 2 // 结果为126
x & y 124 & 2 // 结果为0
x|y 124|2 // 结果为126
^x 取反 ^2 // 结果为3

浮点类型:

float32、float64。

不能直接用==来判断两个浮点数是否相等

可以这样判断浮点型的大小:

import "math" 
 
// p为用户自定义的比较精度,比如0.00001 
func IsEqual(f1, f2, p float64) bool {   
    return math.Fdim(f1, f2) < p  
} 

复数类型:

complex64、complex128。

复数实际上由两个实数(在计算机中用浮点数表示)构成,一个表示实部(real),一个表示 虚部(imag)。如果了解了数学上的复数是怎么回事,那么Go语言的复数就非常容易理解了。

  1. 复数表示

    复数表示的示例如下:

    var value1 complex64    // 由2个float32构成的复数类型 
    value1 = 3.2 + 12i
    value2 := 3.2 + 12i     // value2是complex128类型 
    value3 := complex(3.2, 12)  // value3结果同 value2 
    
  2. 实部与虚部

    对于一个复数z = complex(x, y),就可以通过Go语言内置函数real(z)获得该复数的实 部,也就是x,通过imag(z)获得该复数的虚部,也就是y。

    go语言不支持隐式转换(对比Java的隐式转换)


字符串:string。

var str string  // 声明一个字符串变量 ,默认值为""

切片和数组

数组声明:

//数组定义
var a[3]int //声明并初始化默认值为0
a[0] = 1 //给第一个数赋值为1
b := [3]int{1,2,3} //声明同时初始化
c := [2][2]int{1, 2}, {3, 43} //多维数组初始化
d := [...]int{1,2,3,4,5}//自动匹配长度

数组遍历:

    arr3 := [...]int{1, 3, 4, 5}

    for i := 0; i < len(arr3); i++ {
        t.Log(arr3[i])
    }
    
    //i 是索引,不使用索引用_代替
    for i, e := range arr3 {
        t.Log(e,i)
    }

数组的截取:

a[开始索引(包含),结束索引(不包含)]

a := [...]int{1, 2, 3, 4, 5} 
a[1:2] //结果: 2
a[1:3] //结果: 2,3
a[1:Len(a)] //结果: 2,3,4,5 
a[1:] //结果: 2,3,4,5 
a[:3] //结果: 1,2,3
切片

类似于Java中的集合List

切片声明:

//切片定义
var s0 [] int //初始长度为0
s0 = append(s0,1)//填充数据

s := []int{}
s1 := []int{1,2,3} 

/*
 格式: type,len,cap
 其中len个元素会被初始化为默认零值,未初始化元素不可以访问,既,索引为0,1,2的值初始化为0可以访问,3,4不可以
 访问
 cap按2倍增长(类似于Java中list长度的增长因子)
*/
s2 := make([]int,3,5)/

map

map的声明:

var 变量名 map[key类型] value类型

m := map[string]int{"one": 1, "two": 2, "three": 3}

m1 :=map[string]int{}
m1["one"]=1//向容器中存入数据

m2 :=make(map[string]int, 100 )//设置容量

//判断值是否存在
if v, ok := m1["one"]; ok {
    //值存在
}

注意:

当key不存在时:会输出默认值

当key对应的值不存在时:也会返回默认值

map的遍历:

    m1 := map[int]int{1: 1, 2: 4, 3: 9}
    //a是key b是value
    for a, b := range m1 {
        t.Log(a, b)
    }
    //k是key
    for  k := range m1  {
        t.Log(k)
    }

相关文章

  • Go语言基础篇(2) —— Go语言常用的数据结构

    学习目标 掌握常见数据类型的使用 布尔类型 数值类型 整型: int8、byte、int16、int、uint、u...

  • 我的书单

    韩顺平go语言基础 -- 在读go语言实战 -- 在读大话数据结构 -- 在读高性能MySQL -...

  • go语言基础

    go语言基础 go 语言接口

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • Go语言入坑

    GO语言基础 认识并安装GO语言开发环境 Go语言简介 Go语言是谷歌2009年发布的第二款开源编程语言 go语言...

  • Go语言探索 - 11(原创)

    Go语言基础系列博客用到的所有示例代码 上一篇文章主要学习了Go语言的切片以及Map。本篇文章主要学习的是Go语言...

  • 区块链学习计划

    1、Go 语言基础 2、使用Go语言搭建一个数字货币系统 8 3、HyperLedger Fabric 1.0 ...

  • 潍坊go语言培训

    潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍坊go语言培训潍...

  • Go语言探索 - 3(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,我们主要学习了Go语言的编程基础。这些基础内容包括注释、分...

  • golang内存逃逸

    一篇很好的博客: Go 语言机制之栈与指针 Go 语言机制之逃逸分析 Go 语言机制之内存剖析 Go 语言机制之数...

网友评论

      本文标题:Go语言基础篇(2) —— Go语言常用的数据结构

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