Golang学习笔记

公司最近打算启动一个新项目:实现接口级别的mock服务,技术栈需要利用Go的超强并发能力。很早就听闻过Go的大名了,趁这个机会跟着大佬们学一学,目前还在不断学习中,边学习边整理整理学习笔记。

一、包

package <name>包有两种类型,可执行包应用包

  • 可执行包生成可执行程序,必须使用package main,而且文件中必须有且仅有一个main函数。
  • 应用包本身是不可执行的,编写保存后会自动在pkg目录下保存一个.a文件,包内可以有多个源文件,其中被引用的方法需要设置为:首字母大写.。设置包名name时一般与文件名相同,但这并不是必须的。

import <packagename>导入源码文件所依赖的包,导入的包其实就是目录名。Go程序首先会去“GOROOT/src”目录下找,如果没找到则会继续去“GOPATH/src”找。

二、数组VS切片

切片是拥有相同类型元素的可变长度的序列,数组是不可变的,可以理解为切片是指向数组的某块区域的引用,可以是数组的一部分也可以是全部。

1.切片的初始化
  • 数组:
    var name [num]T默认初始化,有默认值
    var name = [num]T{n1,n2,…}使用指定值初始化
  • 切片:
    var name []T声明一个切片,未初始化,为nil(切片、函数、指针变量的默认为nil)
    var name = []T{n1,n2,…}初始化一个切片,不为nil

可以看出: 数组和切片初始化的明显也是唯一的区别就是数组必须定义长度,而切片不用定义长度。这也体现了它们的不可变长度与可变长度的特点。

2.得到切片
  1. 初始化切片
  2. 利用数组得到切片
    a := [4]int{1,2,3,4}初始化一个数组
    b := a[1:3]//左闭右开,包含a[1],a[2]:[2,3]
  3. 切片再切片
    c := b[0:2]//包含a[1],a[2]:[2,3]
    d := b[1:3]//包含a[2],a[3]:[3,4]
  4. 构造切片
    使用make()函数构造,make([]T,size,cap)// size: 切片中元素的数量;cap: 切片的容量
    a := make([]int,5,10)
    则:len(a);//5 cap(a);//10 (内存空间给切片分配了10个,只使用了5个。)

关于切片的类型和实质,我画了个图应该可以看的很清楚。切片是引用类型,一个切片包含三个部分:指针、长度、容量,下图可见,该切片指向底层数组a[2],长度为4,容量为7。
(图片:slice)

3.遍历
  1. 索引遍历:for i := 0; I < len(s); i++{}
  2. for range遍历:for index, value := range{}
4.用append()方法为切片添加元素
  • 切片会自动扩容,容量会按1,2,4,8,16,…… 扩充
    利用方法:s = append(s, i)把元素 i 添加到切片中的元素后
5.用copy()方法复制切片
  • 如果直接把切片1的值赋给切片2,那么它们实际上使用的是同一个底层数组修改其中任意一个切片的值都会影响另一个切片,因此需要用其他方法来复制切片:copy(destSlice, srcSlice)destSlice:目标切片,srcSlice: 源切片
6.删除切片中的元素
  • 切片是引用类型,不像数组一样长度空间都十分固定,要删除切片的元素,可以利用它的特性:
    s := []int{0,1,2,3,4,5}
    s = append(s, a[:3],a[4:])//删除第3个元素
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞行的小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值