一、内置类型

1、基本类型介绍

Golang 更明确的数字类型命名,支持 Unicode,支持常用数据结构

类型长度(字节)默认值说明
bool1false
byte10uint8
rune40Unicode Code Point, int32
int, uint4或8032 或 64 位
int8, uint810-128 ~ 127, 0 ~ 255,byte是uint8 的别名
int16, uint1620-32768 ~ 32767, 0 ~ 65535
int32, uint3240-21亿~ 21亿, 0 ~ 42亿,rune是int32 的别名
int64, uint6480
float3240.0
float6480.0
complex648
complex12816
uintptr4或8以存储指针的 uint32 或 uint64 整数
array值类型
struct值类型
string“”UTF-8 字符串
slicenil引用类型
mapnil引用类型
channelnil引用类型
interfacenil接口
functionnil函数

①整型

整型分为以下两个大类: 按长度分为:int8int16int32int64对应的无符号整型:uint8uint16uint32uint64
其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。

②浮点型

Go语言支持两种浮点型数:float32float64。这两种浮点型数据格式遵循IEEE 754标准: float32 的浮点数的最大范围约为3.4e38,可以使用常量定义:math.MaxFloat32float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64

③复数

complex64complex128
复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位

④布尔值

Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值

注意:

  • 布尔类型变量的默认值为false。 Go 语言中不允许将整型强制转换为布尔型. 布尔型无法参与数值运算,也无法与其他类型进行转换

⑤字符串

Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(intboolfloat32float64 等)一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非ASCII码字符:

例如:

key1 := "hello"
key2 := "你好"

⑥字符串转义符

Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等

如下表所示:

转义含义
\r回车符(返回行首)
\n换行符(直接跳到下一行的同列位置)
\t制表符
\'单引号
\"双引号
\反斜杠

⑦多行字符串

Go语言中要定义一个多行字符串时,就必须使用反引号字符

例如:

key1 := `第一行
    第二行
    第三行
    `
	fmt.Println(key1)

反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出

⑧字符串的常用操作

例如:

方法介绍
len(str)求长度
+或fmt.Sprintf拼接字符串
strings.Split分割
strings.Contains判断是否包含
strings.HasPrefix,strings.HasSuffix前缀/后缀判断
strings.Index(),strings.LastIndex()子串出现的位置
strings.Join(a[]string, sep string)join操作

2、引用类型:(指针类型)

	slice   -- 序列数组(最常用)
	map     -- 映射
	chan    -- 管道

二、内置函数

Go 语言拥有一些不需要进行导入操作就可以使用的内置函数。它们有时可以针对不同的类型进行操作,例如:lencapappend,或必须用于系统级的操作,例如:panic。因此,它们需要直接获得编译器的支持。

如下表所示:

方法介绍
append用来追加元素到数组、slice中,返回修改后的数组、slice
close主要用来关闭channel
delete从map中删除key对应的value
panic停止常规的goroutine (panic和recover:用来做错误处理)
recover允许程序定义goroutine的panic动作
real返回complex的实部 (complex、real imag:用于创建和操作复数)
imag返回complex的虚部
make用来分配内存,返回Type本身(只能应用于slice, map, channel)
new用来分配内存,主要用来分配值类型,比如int、struct。返回指向Type的指针
capcapacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)
copy用于复制和连接slice,返回复制的数目
len来求长度,比如stringarrayslicemapchannel ,返回长度
print、println底层打印函数,在部署环境中建议使用 fmt 包
	type error interface { //只要实现了Error()函数,返回值为String的都实现了err接口
	     Error()    String
	}

三、Init函数和main函数

1、init函数

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性。

有下面的特征:

  • init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
  • 每个包可以拥有多个init函数
  • 包的每个源文件也可以拥有多个init函数
  • 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)
  • 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
  • init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

2、main函数

    Go语言程序的默认入口函数(主函数):func main()
    函数体用{}一对括号包裹。

    func main(){
        //函数体
    }

3、init函数和main函数的异同

相同点:
两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
不同点:
init可以应用于任意包中,且可以重复定义多个。
main函数只能用于main包中,且只能定义一个。

两个函数的执行顺序:

  • 对同一个go文件的init()调用顺序是从上到下的
  • 对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数
  • 对于不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init(),如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用main函数
  • 如果init函数中使用了println()或者print()你会发现在执行过程中这两个不会按照你想象中的顺序执行。这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐