这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
简单介绍
go 语言的描述:就是没有描述, 能构建简单、可靠、高效的软件
go语言的源码包的下载:
第一个go语言程序
package main // 声明 main 包
import (
"fmt" // 导入 fmt 包,打印字符串是需要用到
)
func main() { // 声明 main 主函数
fmt.Println("Hello World!") // 打印 Hello World!
}
1 package 打包文件
2 import导入的包要用双引号括起来
3 main函数的入口函数func main(){} ,在函数的外面只能放标识符(标识符,常量,函数,类型)的声明
变量和常量
Go 是静态类型语言,不能在运行期改变变量类型。使用关键字 var 定义变量,自动初始化为零值。如果提供初始化值,可省略变量类型,由编译器自动推断
go语言中的变量必须是先声明再使用,且在函数内部声明的变量必须使用,函数外面声明的变量可以不使用
注意事项: 在函数外面必须使用以关键字为首的变量申明或者函数声明,这个就说明了简短变量声明无法在函数外 部使用。 在同一个作用域里面不能同时声明相同的变量
切片
- 数组的容量固定,不能自动扩展。
- 值传递,数组作为函数参数时,将整个数组织拷贝一份给形参。
在go语言中,我们几乎可以在所有场景中,用切片代替数组
切片的本质
不是一个数组的指针,是一种数据结构,用来操作数组内部元素。
//runtime/slic.go
type slice struct{
*p
len //长度
cap //容量
}
切片的使用
数组和切片定义区别
- 创建数组时[]指定数组长度
- 创建切片时,[]为空。或者...
切片名称[low:high:max]
low:起始下标位置
high:结束下标位置 len = high-low
容量:cap = max-low
func main() {
arr:=[]int {1,2,3,4,5}
s:=arr[1:3:5]
fmt.Println("s=",s)
fmt.Println("len(s)=",len(s),"cap(s)",cap(s))
}
//结果
s= [2 3]
len(s)= 2 cap(s)= 4
截取数组时,初始化切片时,没有指定切片容量时,切片容量跟随原数组。
切片截取数组,左闭右开[b,e)
s[:high:max]:从0开始,到high结束。(不包含)
s[low:]:从low开始,到末尾
s[:high]:从0开始,到high结束,容量跟随原先容量(使用频率最高)
函数和结构体
函数
- 返回类型后置
- 经常返回多个类型。第一个表示真正返回值,第二个表示状态
结构体
- 结构体方法:类比类成员函数。
- 使用方法是前函数前置
字符串
操作:
格式化:
- 详细和非常详细式输出
其他
map
- 初始化会是
0, false这些 - 完全无序,偏随机
range
- 同时表示 key 和 val,可以和
for结合使用for key, val := range arr/map
指针
- 作用非常有限
- 操作方式和C一样
常用包
JSON 处理
- 序列化和反序列化
json.Marshal - 注意进行
string()类型处理 - 输出风格规定?
错误处理
时间处理
- 导入包以后就可以直接向结构体一样使用一个时间类型,用一些函数来操作时间
- 可以按照
yy-mm-dd hh:mm:ss的格式来解析or格式化一个时间串 - 时间戳
数字解析
- 解析格式:字符串,进制,精度
进程信息
- 获取命令行参数
- 获取写入环境变量
- exec获取什么得到输入输出