Go语言上手-基础语言|青训营笔记

75 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

一、Go语言特点

  1. 高性能、语言本身支持并发
  2. 语法简单、易学习
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收gc

二、Golang基础语法

1. 变量

定义方式:
var a int   //a == 0
var a = 1
a := 1
注意::= 只能在函数内使用

2. 常量

常量的定义:
const 常量名 [类型] = 值

3. 判断语句

if a == 0 {
    操作
}else{
    操作
}
switch a {
    case 1:
        操作1
    case 2:
        操作2
    ...
    default:
        操作
}

4. 循环语句

for i := 0; i < 5; i++ {
    操作
}

5. 数组

数组长度固定;定义数组时,必须给定数组长度,且必须为常量;
数组的长度也是类型的一部分,[10]int和[20]int不是同一种数据类型

6. 切片slice

切片长度可变;gopher对于切片的使用非常频繁,这里拓展一下:
切片的底层数据结构:
type slice struct {
    array unsafe.Pointer //指向底层数组的指针
    len int //切片长度
    cap int //切片容量 
    }
定义一个切片时,即:使切片中的指针指向一个底层数组中的某个元素(不一定为首元素)。
cap即为从切片的起始元素到底层数组的最后一个元素间的元素个数,当切片容量不足时,便会触发
slice扩容。
len为切片中的元素个数 

slice扩容: 
slice 并不会自动扩充, 而是添加数据时, append函数发现添加数据后的长度超出了slice的cap
时对切片进行扩容的。

slice扩容的实质:
slice扩容机制实际上是分配一个新的底层数组,将原slice的数据拷贝到新slice(已经扩充了容量,
指向新分配的底层数组),然后把待加入的数据添加到新slice。

扩容大小规则:
一般情况下  
如果原slice的容量小于1024,则新slice的容量将扩大为原来的2倍;
如果原slice的容量大于1024,则新的slice的容量将扩大为原来的1.25倍;

使用规范:
因为slice的底层数组是不可见的,在使用append对切片添加数据时,gopher通常并不知道slice
是否触发扩容机制改变了,所以要用原slice接收一下append返回的sliceslice = append(slice, num)

7. map

在使用map之前必须给map分配(make)空间
并且map遍历出来是无序的

8. for range

接收两个参数:
for k, v := range arr {
    操作1
}
k:索引值
v:元素值

接收一个参数:
for k := range arr {
    操作2
}
k:索引值

9. 时间格式

固定格式:2006-01-02 15:04:05