golang入门学习--基础1.2:内置类型和函数、Init函数和main函数
目录一、内置类型1、值类型2、引用类型:(指针类型)二、内置函数三、内置接口error四、Init函数和main函数1、init函数2、main函数3、init函数和main函数的异同一、内置类型1、值类型boolint(32 or 64), int8, int16, int32, int64uint(32 or 64), uint8(byte), uint16, uint32, uint64fl
目录
一、内置类型
1、基本类型介绍
Golang
更明确的数字类型命名,支持 Unicode
,支持常用数据结构
类型 | 长度(字节) | 默认值 | 说明 |
---|---|---|---|
bool | 1 | false | |
byte | 1 | 0 | uint8 |
rune | 4 | 0 | Unicode Code Point, int32 |
int, uint | 4或8 | 0 | 32 或 64 位 |
int8, uint8 | 1 | 0 | -128 ~ 127, 0 ~ 255,byte是uint8 的别名 |
int16, uint16 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 |
int32, uint32 | 4 | 0 | -21亿~ 21亿, 0 ~ 42亿,rune是int32 的别名 |
int64, uint64 | 8 | 0 | |
float32 | 4 | 0.0 | |
float64 | 8 | 0.0 | |
complex64 | 8 | ||
complex128 | 16 | ||
uintptr | 4或8 | 以存储指针的 uint32 或 uint64 整数 | |
array | 值类型 | ||
struct | 值类型 | ||
string | “” | UTF-8 字符串 | |
slice | nil | 引用类型 | |
map | nil | 引用类型 | |
channel | nil | 引用类型 | |
interface | nil | 接口 | |
function | nil | 函数 |
①整型
整型分为以下两个大类: 按长度分为:
int8
、int16
、int32
、int64
对应的无符号整型:uint8
、uint16
、uint32
、uint64
其中,uint8
就是我们熟知的byte
型,int16
对应C语言中的short
型,int64
对应C语言中的long
型。
②浮点型
Go语言支持两种浮点型数:
float32
和float64
。这两种浮点型数据格式遵循IEEE 754
标准:float32
的浮点数的最大范围约为3.4e38
,可以使用常量定义:math.MaxFloat32
。float64
的浮点数的最大范围约为1.8e308
,可以使用一个常量定义:math.MaxFloat64
③复数
complex64
和complex128
复数有实部和虚部,complex64
的实部和虚部为32位,complex128
的实部和虚部为64位
④布尔值
Go语言中以
bool
类型进行声明布尔型数据,布尔型数据只有true
(真)和false
(假)两个值
注意:
- 布尔类型变量的默认值为
false
。 Go 语言中不允许将整型强制转换为布尔型. 布尔型无法参与数值运算,也无法与其他类型进行转换
⑤字符串
Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(
int
、bool
、float32
、float64
等)一样。 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 语言拥有一些不需要进行导入操作就可以使用的内置函数。它们有时可以针对不同的类型进行操作,例如:
len
、cap
和append
,或必须用于系统级的操作,例如: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的指针 |
cap | capacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map) |
copy | 用于复制和连接slice,返回复制的数目 |
len | 来求长度,比如string 、array 、slice 、map 、channel ,返回长度 |
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()
你会发现在执行过程中这两个不会按照你想象中的顺序执行。这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用
更多推荐
所有评论(0)