6-Go语言基础-数据类型

概述

Go语言将数据类型分为四类:
基础类型:数值类型、字符串、布尔型
复合类型:数组、结构体
引用类型:指针、切片、字典、函数、通道
接口类型

基础类型

  1. 数值类型
    数值类型包括:整形、浮点型、复数
    整形分为有符号、无符号类型;int8 int16 int32 int64 uint8 uint16 uint32 uint64
    整形还有两种岁CPU平台机器字大小的有符号类型 int和无符号类型uint(机器是32位则是32位,机器是64位则是64位)。
    其中Unicode字符rune类型和int32是等价类型,表示一个Unicode码,这两个名字可以互换使用。
    byte也和uint8等价。
    其他类型都需要显示转换,不能直接互换使用。比如int32和int在32位平台都是32位,但不是同一类型。
package main
import (
	"fmt"

)

func main() {
	
	var a int32=1
	var b rune =1
	fmt.Println("a==b:",a==b)//a==b: true
	var c byte=1
	var d uint8 =1
	fmt.Println("c==d:",c==d)//c==d: true
	type myint int
	var e myint=1
	var f int =1
	fmt.Println("e==f:",e==f)//invalid operation: e == f (mismatched types myint and int)
	var g int64=1
	var h int =1
	fmt.Println("g==h:",g==h)//invalid operation: g == h (mismatched types int64 and int)
}

超出阈值:
如果超出阈值,就会循环显示,比如int8的范围是-128~127,给它值127,然后+1,得到的结果将是-128,反之亦然。

package main
import (
	"fmt"
)
func main() {
	var a int8=127
	a=a+1
	fmt.Println(a)//-128
	var b int8=-128
	b=b-1
	fmt.Println(b)//127
}
  1. 字符串
    字符串要区分字符和字节的区别:
    Unicode码收集世界上所有的符号,称为字符,对应rune类型。rune和int32等价类型,可以互用。
    utf8是将Unicode码编码为字节序列的变长编码。utf8用1~4个字节表示一个Unicode字符。
    Go语言的源文件采用UTF8编码,也默认处理uft8。
    标准库里面有unicode包支持对rune字符的处理,自行查找。
    字符串的处理有四个包特别重要:bytes strings strconv unicode。后面单独分析。
    字符串是一个不可改变的字符序列。
    内置的len函数可以返回字符串中的字节数目。
    索引s[i]可以返回第i个字节的字节值,i满足0<=i<=len(s)
  2. 布尔型
    布尔类型可以和&&||操作符结合,并且可能出现短路行为:如果运算符左侧已经确定了整个布尔表达式的值,那么右侧的值不再被求值。
    布尔值不会隐式和数值0\1相互转换。
  3. 运算符
* / % << >> & &^
+ - | ^
== != < <= > >=
&&
||
  1. 常量
    常量的潜在类型都是基础类型:布尔值,字符串,数值类型。定义后自动分配类型,且在编译期计算。
    iota是常量生成器,默认从0开始,不过最好手动从1开始。

复合类型

值类型的意思是,在函数传递时,是按值传递的。
数组、结构体是聚合类型。
数组是有同种类型的多个元素组成,是值类型。len()可以返回元素个数。
数组的长度也是数组类型的组成部分,所以[3]int和[4]int是不同类型。
数组的长度在编译阶段确定,所以必须是常量表达式。
结构体是有多种不同类型的元素组成,也是值类型。不同结构体属于不同类型。

引用类型

引用类型,是指,多个名字引用同一个实例。一个名字对该实例的修改影响其他名字的引用。
函数传递参数时,也是引用传递,资源损耗很小,是非常重要的手段。
指针、切片、字典、函数、通道都是引用类型
接口类型也是引用类型,因为他很特殊,所以单独拎出来使用。
切片 slice代表变长的序列。
slice有三部分组成:指针、长度、容量。有一个地方不同就代表不同类型。
len()获取slice的长度,cap()获取slice的容量。

字典 map是哈希表的引用。len()可以获取字典的长度。

结构体一般会和json一起使用。

基础类型和数组大家可以自行了解。其中最主要的类型时:
切片:slice
字典:map
结构体:struct
函数:func
接口:interface
通道:channel
这几种类型单独分析。

发布了264 篇原创文章 · 获赞 23 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Edu_enth/article/details/103999836