go string 转uint_Go之基础知识二

前言

上一篇主要分享了工作区目录结构、代码包导入方式、相关命令、程序实体和关键字、变量和常量等相关的知识点,那么本文作为第二篇,主要讲解的内容有:数值类型、字符串类型、数组和切片、字典、通道。

基础知识

一、数值类型

1、整型

Go语言的整数类型一共有10个:int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64,可能我们比较常用的就是默认的int和uint,它们随计算机架构不同所占空间也会不一样,而空间的表示法有比特bit或字节byte(1byte=8bit),具体的差别如下图所示:

go string 转uint_Go之基础知识二_第1张图片

另外整型的表示法还有八进制、十六进制,示例如下:

十进制:var num int = 12

八进制:var num int = 014 // 用“0”作为前缀以表明这是8进制表示法

十六进制:var num int = 0xC // 用“0x”作为前缀以表明这是16进制表示法

2、浮点型

浮点数类型有两个,即float32和float64,分别占4字节和8字节。

浮点数类型的值一般由整数部分、小数点“.”和小数部分组成,不过表示方式却多样化:

正常表示:var num float32 = 0.037

指数表示:var num float32 = 3.7E-2

简化表示:var num float32 = .037

3、复数类型

复数类型同样有两个,即complex64和complex128,分别占8字节和16字节。

复数类型的值一般由浮点数表示的实数部分、加号“+”、浮点数表示的虚数部分,以及小写字母“i”组成,比如:3.7E+1 + 5.98E-2i 等同于 37.000000 + 0.059800i

4、byte与rune

byte与rune类型有一个共性,即:它们都属于别名类型。byte是uint8的别名类型,而rune则是int32的别名类型。(用的比较少,了解一下即可)

二、字符串类型

字符串类型是用string表示。

声明:var str string

声明及赋值:var str string = "Hello,World"

简约赋值:str := "Hello,World" // 此种方式是适应任何类型的,因为go语言中会自动识别类型。

与字符串相关的包是strings,里面有很多操作字符串的方法,具体使用就不在此赘述。

三、数组和切片

数组是固定长度的容器,以对应下标进行赋值和取值,通过len()方法获取长度,通过cap()方法获取容量,这两者值是一致的,默认值为零值(视具体类型而定,比如int就为0,string就为空),它是值类型。

切片是不定长度的容器,也是以对应下标进行赋值和取值,长度是切片上限值与下限值之差,容量也是通过cap()方法进行获取,但这两者值可能是不一致的,并且切片可以通过append()方法进行扩容,另外还能通过copy()方法进行复制,它是引用类型。

// 声明数组,这一块要跟type区别开来,type是声明别名,var才是声明变量// 先声明别名,后声明变量type array1 [3]intvar a1 array1fmt.Printf("%v", a1)// 直接声明变量var a2 [3]intvar a3 [3]stringfmt.Printf("%v, %v, len=%d, cap=%d", a2, a3, len(a2), cap(a2))a2[0] = 1fmt.Printf("%v", a2)// 声明并赋值var a4 = [3]int{1, 2, 3}var a5 = [...]int{1, 2, 3}a6 := [3]int{1, 2, 3}a7 := [...]int{1, 2, 3}fmt.Printf("%v, %v, %v, %v", a4, a5, a6, a7)// 声明切片,注意是不定长度的type slice1 []intvar s1 slice1fmt.Printf("%v", s1)var slice2 []intvar slice3 []stringfmt.Printf("%v, %v, len=%d, cap=%d", slice2, slice3, len(slice2), cap(slice2))slice2 = append(slice2, 1, 2)fmt.Printf("%v, len=%d, cap=%d", slice2, len(slice2), cap(slice2))var slice4 = []int{0, 0, 0, 0, 0}copy(slice4, slice2)fmt.Printf("%v, len=%d, cap=%d", slice4, len(slice4), cap(slice4))// 数组和切片共用var array2 = []int{1, 2, 3, 4, 5}slice5 := array2[1:4:5]fmt.Printf("%v, len=%d, cap=%d", slice5, len(slice5), cap(slice5))

关于这一块的知识点,说起来其实没多少,真正用起来的时候各种场景灵活多变,所以不在此过多阐述,还是要多实践,真金不怕火炼,实践出真知。

四、字典

字典类型用map表示,通用表示为map[K]T,其中“K”意为键的类型,而“T”则代表元素(或称值)的类型。

声明:var num map[int]string

简约赋值:num := map[int]string{0:"0", 1:"1", 2:"2"}

取值:v := num[0]

修改值:num[1] = "11"

添加值:num[3] = "3"

删除值:delete(num, 2)

判断键是否存在:e, ok := num[5] // 不存在ok为false,但是也能取到值,不过是默认空值

五、通道

通道(Channel)是Go语言中一种非常独特的数据结构。它可用于在不同Goroutine之间传递类型化的数据,并且是并发安全的。相比之下,我们之前介绍的那些数据类型都不是并发安全的。这一点需要特别注意。

通道类型的表示方法很简单,仅由两部分组成,即:chan T,其中T为类型。

1、缓冲通道

创建并赋值:ch1 := make(chan string, 5) // 创建用make,通道类型为string,后面的5为长度

向通道发送数据:ch1

从通道接收数据:value :=

判断通道是否开启:value, ok :=

关闭通道:close(ch1)

2、非缓冲通道

指发送方在向通道发送数据的时候会立即被阻塞,直到有某一个接收方已从该通道中接收了这条数据。

创建并赋值:ch1 := make(chan string, 0) // 跟缓冲通道差不多,只是最后的长度为0

其它操作跟缓冲通道一致。

3、单向通道

单向通道是指只能进行一个方向的通道,要么只接收数据,要么只发送数据。

声明接收通道:type Receiver

声明发送通道:type Sender chan

举例如下:

go string 转uint_Go之基础知识二_第2张图片

你可能感兴趣的:(go,string,转uint)