GOlang //学习笔记 类型

golang cyanprobe 9年前 (2016-07-21) 3276次浏览 已收录 0个评论

前言

GO语言内置以下这些基础类型
布尔类型 :bool
整形:int8,byte,int16,int,uint,uintptr等
浮点类型 :float32,float64(double)
复数类型: complex64,complex128
字符串:string
字符类型:rune
错误类型:error
指针pointer    数组array  切片slice 字典map 通道chan 结构体struct 接口(interface)

正文:

布尔类型:

Go语言布尔类型关键字为bool,可付志伟预定义的true和false示例如下:

  1. //v1可被推导成bool类型
  2. v1 :=(1 == 2)
  3. //布尔类型不能接受其他赋值
  4. var v2 bool
  5. b=1  //编译错误

整型

注意int金额int32在GO中被认证为不同的类型,编译器也不会自动帮你做类型转换。

  1. var value2 int32
  2. value1:=64 //value将被推导成int型
  3. value2=value //编译错误,强制类型转换会出现精度损失或者值溢出的问题

浮点型

Go语言定义了float32,和float64(double)两种类型,在使用推导时,如“”value float32:=2.0“”需要加小数点才能推导为浮点型。在float32与float64位转换过程中,需要强制类型转换,否则会出现编译错误。由于浮点型是一个不够精确的表达方式,所以需要采用自定义对比精度。

字符串类型

与其他语言基本相似。“HELLO”[1] //结果为E 为byte类型

字符类型

Go语言中支持2个字符类型一个是byte,代表UTF-8字符串的单个字节的值,另一个是rune,代表单个unicode。

数组类型

1.元素访问

可以使用数组下标来访问数组,与C语言相同,数组下标以0开始 len(array)-1代表最后一个元素的下标

  1. for i:=0;i<len(array);i++{
  2. fmt.Println("key",i,"value",array[i])
  3. }

Go语言中,还提供了一个关键字range,用于快速遍历元素。如下:

  1. func main() {
  2. var array = [5]int{1, 2, 3, 4, 5}
  3. for i, v := range array {
  4. fmt.Println("Array element[", i, "]=", v)
  5. }
  6. }

以上输出 Array element[ 0 ]= 1,Array element[ 1 ]= 2,Array element[ 2 ]= 3 ……

2.数组切片

数组在定义之后无法再次修改,数组是值类型,每次传递都需要复制副本,不过GO语言提供了数组切片(slice).
创建数组切片,基于数组创建和基于数组切片。可以看如下例子这是基于数组创建方法

  1. func main() {
  2. var array = [9]int{1, 2, 3, 4, 5, 6, 7, 8}
  3. var array2 []int = array[:3]
  4. for _, v := range array2 {
  5. fmt.Print(v, " ")
  6. } //输出123
  7. }

GO语言使用Array[start:end]方法基于数组生成数组切片。
下面是直接创建GO语言内置make()可以用于灵活的创建数组切片。下面的例子示范了创建数组切片的方法。

  1. slice1 :=make([]int,5)
  2. slice2 :=make([]int,5,10) //初始元素为5个,预留10个元素的储存空间
  3. slice3 :=[]int{1,2,3,4,5}

动态增减元素
假如设置了20个元素的位置,如果需要加入30个元素,底层会分配更大的内存,数组切片GO内置cap()和len()函数,cap()为切片数组分配的空间大小len()返回的是数组切片中的元素个数。

MAP类型

map是一个未排序的集合,

  1. // learn project main.go
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. type PersonInfo struct {
  7. ID string
  8. Name string
  9. Age int
  10. }
  11. // 以下输出Found Tom with ID 12345
  12. func main() {
  13. //声明map类型
  14. var personDB map[string]PersonInfo
  15. personDB = make(map[string]PersonInfo)
  16. //往map中插入数据
  17. personDB["12345"] = PersonInfo{"12345", "Tom", 12}
  18. personDB["1"] = PersonInfo{"1", "Jack", 99}
  19. //OK是个boll型,返回true表示找到了数据
  20. person, ok := personDB["12345"]
  21. if ok {
  22. fmt.Println(" Found", person.Name, "with ID 12345")
  23. } else {
  24. fmt.Println("Did not find person whth ID 12345.")
  25. }
  26. }

创建,我们可以用Go语言的内置函数make()来创建个新map,例子创建了一个键值类型为string,值的类型为PersonInfo的map。也可以在创建时指定该map的初始储存能力。

  1. myMap=make(map[string] PersonInfo ,100)
  2. //创建并初始化MAP
  3. myMap =map[string]PersonInfo{
  4. "1234":PersonInfo{"123","STEVEN","26"}
  5. }
  6. //元素赋值
  7. 如上面的例子。

元素删除,GO内置函数delete(),”delete(myMap,”123″)”来删除容器内部元素。 PS:如果:”1234″不存在,将不会有任何副作用,但如果map为nil则抛出异常。

后记:

刚撸就有一个狗头像的大神非常热心的帮助我真是尼玛太温暖了,虽然调了尼玛1天vscode最后也不尽人意 = =,感谢所有给新手铺路的大大们。下一节将简单记录一下 golang的流程控制。
 
 
 
 
 
 
 


CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:GOlang //学习笔记 类型
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址