Go语言基础 | 青训营笔记

381 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

简单介绍

go 语言的描述:就是没有描述, 能构建简单、可靠、高效的软件 

go语言的源码包的下载:

 golang.google.cn/,中国的官网。

 studygolang.com/中文社区

第一个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语言中的变量必须是先声明再使用,且在函数内部声明的变量必须使用,函数外面声明的变量可以不使用 

注意事项: 在函数外面必须使用以关键字为首的变量申明或者函数声明,这个就说明了简短变量声明无法在函数外 部使用。 在同一个作用域里面不能同时声明相同的变量

切片

  1. 数组的容量固定,不能自动扩展。
  2. 值传递,数组作为函数参数时,将整个数组织拷贝一份给形参。

在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结束,容量跟随原先容量(使用频率最高)

函数和结构体

函数

  1. 返回类型后置
  2. 经常返回多个类型。第一个表示真正返回值,第二个表示状态

结构体

  1. 结构体方法:类比类成员函数。
    1. 使用方法是前函数前置

字符串

操作:

格式化:

  • 详细和非常详细式输出

其他

map

  1. 初始化会是 0, false 这些
  2. 完全无序,偏随机

range

  1. 同时表示 key 和 val,可以和 for 结合使用 for key, val := range arr/map

指针

  1. 作用非常有限
  2. 操作方式和C一样

常用包

JSON 处理

  • 序列化和反序列化 json.Marshal
  • 注意进行 string() 类型处理
  • 输出风格规定?

错误处理

时间处理

  • 导入包以后就可以直接向结构体一样使用一个时间类型,用一些函数来操作时间
  • 可以按照 yy-mm-dd hh:mm:ss 的格式来解析or格式化一个时间串
  • 时间戳

数字解析

  • 解析格式:字符串,进制,精度

进程信息

  • 获取命令行参数
  • 获取写入环境变量
  • exec获取什么得到输入输出