go基本语法学习笔记之类型
来源:互联网 发布:全能数据恢复中文版 编辑:程序博客网 时间:2024/05/22 10:43
整形
类型转换举例
var ia int64 = 54345var ib int32ib = int32(ia)fmt.Println("ibis", ib)
浮点形
go语言定义了两个浮点型
float32 等价于C语言的float类型,
float64 等价于C语言的double类型
float64 等价于C语言的double类型
浮点数的比较 math.Fdim(f1, f2) < p p为定义的精度 如 0.00000001
字符串
var str1 stringstr1 = "this is first string"str2 := "this is second string"str3 := str1 + str2fmt.Printf("the string str3: %s \n len: %d \n first char is %c \n", str3, len(str3), str3[0])
字符串可以用常规方法for循环遍历,应用len取的字符串长度,用str3[i]取值,依据下标取字符串中的字符,类型为byte,这里用另一种方法遍历:
for i, ch := range str3 {//fmt.Println(i, ch, "\n") 以Unicode字符方式遍历时,每个字符的类型是runefmt.Printf("%d, %c", i, ch)}
字符类型
go支持两种字符类型:byte(实际上是uint8的别名),代表UTF-8字符串的单个字节的值
rune 代表单个Unicode字符 于rune相关的操作,可查阅Go标准库的unicode包。另外unicode/utf8包也提供了UTF8和Unicode之间的转换。
注意:出于简化语言的考虑,Go语言的多数API都假设字符串为UTF-8编码。尽管Unicode字符在标准库中有支持,但实际上较少使用。
数组
go中数组由一组相同类型的元素构成,其长度声明后不可改变,数组常规声明方法
[32]byte // 长度为32的数组,每个元素为一个字节[2*N] struct { x, y int32 } // 复杂类型数组[1000]*float64 // 指针数组[3][5]int // 二维数组[2][2][2]float64 // 等同于[2]([2]([2]float64))GO中数组小标同C,从0开始
数组遍历
var array [2]struct {x stringy uint64}array[0].x = "first"array[0].y = 888888array[1].x = "secon"array[1].y = 99999for i, v := range array {fmt.Println("Array element[", i, "]=", v.x, v.y, "\n")}注意:在GO中数组是值类型,所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。
数组切片
初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针。数组切片的数据结构可以抽象为以下3个变量:
- 一个指向原生数组的指针;
- 数组切片中的元素个数;
- 数组切片已分配的存储空间。
基于数组或数组切片
可基于已有数组创建少于或等于,甚至比原有数组更大的数组切片
Go语言支持用myArray[first:last]来创建数组切片:myArray[:] 整个,myArray[:5] 前五个,myArray[5:] 从第五个开始
// 先定义一个数组var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}// 基于数组创建一个数组切片var mySlice []int = myArray[:5]fmt.Println("Elements of myArray: ")for _, v := range myArray {fmt.Print(v, " ")}fmt.Println("\nElements of mySlice: ")for _, v := range mySlice {fmt.Print(v, " ")}fmt.Println()直接创建
GO可以用内置函数make(),灵活创建数组切片
make 第一个参数定义数组类型如 []int, 第二个参数为元素个数, 第三个参数为预留存储空间,可以缺省
创建一个初始元素个数为5的数组切片,元素初始值为0:mySlice1 := make([]int, 5)创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间:mySlice2 := make([]int, 5, 10)直接创建并初始化包含5个元素的数组切片:mySlice3 := []int{1, 2, 3, 4, 5}元素遍历同数组
动态增减
GO中可用 append()向数组切片尾部增加元素,该函数的第二参数为不定长参数,可以按需传人
另外还可以将一个数组切片用...打散后添加到数组切片后面
arr1 := make([]int64, 5)for _, v := range arr1 {fmt.Print(" ", v)}fmt.Println()arr1 = append(arr1, 3, 4, 5)for _, v := range arr1 {fmt.Print(" ", v)}fmt.Println()arr2 := []int64{8, 8, 8, 8, 8}arr1 = append(arr1, arr2...)for _, v := range arr1 {fmt.Print(" ", v)}fmt.Println()内容复制
slice1 := []int{1, 2, 3, 4, 5}slice2 := []int{5, 4, 3}copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置
MAP
GO中,map是内置的,是一堆键值对的未排序集合。
<span style="white-space:pre"></span>type book struct {Name stringActor stringPrice float64}var booksMap map[string]book //声明booksMap = make(map[string]book) //创建booksMap["123456"] = book{"go web 编程", "tom.sd", 64.2}booksMap["443"] = book{"go编程语言", "tom.ddd", 55.2}book1, ok := booksMap["443"] //查找if ok {fmt.Println("book1 ", book1.Name, book1.Actor, book1.Price)book1.Price = 88.8booksMap["443"] = book1 //修改}book2, ok := booksMap["443"]if ok {fmt.Println("book1 ", book2.Name, book2.Actor, book2.Price)//book1.Price = 88.8}
delete(booksMap,"443")
0 0
- go基本语法学习笔记之类型
- go基本语法学习笔记之函数
- go基本语法学习笔记之变量与常量
- go基本语法学习笔记之流程控制
- go基本语法学习笔记之错误处理
- go基本语法学习笔记之面向对象
- go基本语法学习笔记之面向对象:接口
- go基本语法学习笔记之并发编程
- Go语言学习笔记之基本数据类型
- go 学习1【基本语法】
- go 学习2【基本语法】
- Go学习笔记(四)基本数值类型
- Kotlin 学习笔记(一) 基本类型和基本语法
- PHP基础学习笔记之基本语法
- Python语言学习笔记之基本语法
- lua学习笔记之基本语法
- Java学习笔记之基本语法
- 【Lua学习笔记】 --> 《类型与值、表达式与基本语法》
- eclipse的.properties文件中文显示问题
- ARM 平台部署apache + php + phpredis
- 随笔1.14.2016
- 8个hybrid app开发工具
- namespace的用法
- go基本语法学习笔记之类型
- sqlzoo练习答案--Self join
- CentOS7服务器安装
- 计算输入框的字符个数
- Android UI布局之LinearLayout
- eclipse pom文件配置项目注意
- 文件存储——安卓存储方案之二
- java将 Date原始格式EEE MMM dd HH:mm:ss Z yyyy"转成指定格式
- MapReduce的细节的介绍