go语言学习(三、数据类型)

在 Go 编程语言中,数据类型用于声明函数和变量。
数据类型的出现是为了把数据分成所需内存大小不同的类型,编程的时候需要用大数据的时候才需要申请大内存,使内存利用更充分

package main

import (
	"fmt"
	"reflect"
)

func main() {
	/* 布尔型 */
	var tBool bool = true // 布尔型

	/* 字符型 */
	var tString string = "犀利的大熊" // 字符串 一串固定长度的字符连接起来的字符序列

	/* 数字型 */
	var tInt int = 1            // 整型
	var tFloat32 float32 = 1.21 // 32位浮点型
	var tFloat64 float64 = 1.21 // 64位浮点型 比32位有更高的精度 推荐使用64位

	/* 派生类型 */
	var str string = "犀利的大熊"
	var tPointer *string = &str        // 指针类型 每个变量都拥有内存地址,指针的值就是内存地址 &为取地址操作
	var tArray = [2]int{1, 2}          // 数组类型,是一个可以容纳若干类型相同的元素的容器。这个容器的大小(即数组的长度)是固定的
	var tArray1 = [...]int{1, 2, 2, 3} // 这种定义方法可以免除定义长度的操作 会根据元素个数直接定义长度
	// 结构体是由成员构成的复合类型。Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性
	type Student struct {
		name  string // 私有成员(对外不可见)
		age   int
		Class string // 首字母大写则该成员为公有成员(对外可见)
	}
	// go oop实现方式
	var tStruct = Student{name: "犀利的大熊", age: 18, Class: "三年级二班"}
	var tChannel = make(chan int)     // 无缓冲阻塞读写channel类型 后续讲解
	var tChannel1 = make(chan int, 2) // 有缓冲、非阻塞,写满 2个元素才阻塞写入channel类型 后续讲解
	// 函数类型,在Go中函数也是一种变量,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型
	type tFunction func(a int, b int) int
	// 切片类型,方便使用者处理类型数据序列。 切片有点像其他语言中的数组,并且提供了一些额外的属性
	// 定义一个切片和定义一个数组的语法相似,唯一的不同是不需要定义切片长度
	var tSlice = []string{"犀利的", "大熊"}
	// 接口类型是其他类型行为的概括与抽象。接口是一种抽象类型
	// 接口命令习惯以er结尾 接口只有方法声明,没有实现,没有数据字段
	//接口可以匿名嵌入其他接口,或嵌入到结构中
	type tInterface interface {
		sayHelloWorld()
	}
	// Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
	//Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的
	var tMap map[string]string
	tMap = make(map[string]string)
	tMap["name"] = "犀利的大熊"

	fmt.Println(reflect.TypeOf(tBool)) // 类型输出 bool
	fmt.Println(reflect.TypeOf(tString)) // 类型输出 string
	fmt.Println(reflect.TypeOf(tInt)) // 类型输出 int
	fmt.Println(reflect.TypeOf(tFloat32)) // 类型输出 float32
	fmt.Println(reflect.TypeOf(tFloat64)) // 类型输出 float64
	fmt.Println(reflect.TypeOf(str)) // 类型输出 string
	fmt.Println(reflect.TypeOf(tPointer)) // 类型输出 *string
	fmt.Println(reflect.TypeOf(tArray)) // 类型输出 [2]int
	fmt.Println(reflect.TypeOf(tArray1)) // 类型输出 [4]int
	fmt.Println(reflect.TypeOf(tStruct)) // 类型输出 main.Student
	fmt.Println(reflect.TypeOf(tChannel)) // 类型输出 chan int
	fmt.Println(reflect.TypeOf(tChannel1)) // 类型输出 chan int
	fmt.Println(reflect.TypeOf(tSlice)) // 类型输出 []string
	fmt.Println(reflect.TypeOf(tMap["name"])) // 类型输出 string
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章