GOlang //学习笔记 类型

golang cyanprobe 8年前 (2016-07-21) 3189次浏览 已收录 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示例如下:

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

整型

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

var value2 int32
value1:=64 //value将被推导成int型
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代表最后一个元素的下标

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

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

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

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

2.数组切片

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

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

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

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

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

MAP类型

map是一个未排序的集合,

// learn project main.go
package main
import (
 "fmt"
)
type PersonInfo struct {
 ID string
 Name string
 Age int
}
// 以下输出Found Tom with ID 12345
func main() {
 //声明map类型
 var personDB map[string]PersonInfo
 personDB = make(map[string]PersonInfo)
 //往map中插入数据
 personDB["12345"] = PersonInfo{"12345", "Tom", 12}
 personDB["1"] = PersonInfo{"1", "Jack", 99}
 //OK是个boll型,返回true表示找到了数据
 person, ok := personDB["12345"]
 if ok {
 fmt.Println(" Found", person.Name, "with ID 12345")
 } else {
 fmt.Println("Did not find person whth ID 12345.")
 }
}

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

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

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

后记:

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


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

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

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

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