Go语言学习笔记

Go中的array、slice和map

  1. array
    数组的定义
var arr [10]int    // 定义数组arr,默认初始值均为0
arr[0] = 1        // 改变数组第一个元素的值为1

arr := [3]int{1, 2, 3}    
arr := [...]int{1, 2, 3}   // 注意..., 表示由编译器自己统计数组的大小

/* 多维数组 */
arr := [3][2]int{{1,2},{2,3},{3,4}}    // 合理
arr := [...][2]int{{1,2},{2,3},{3,4}}   //合理
/* arr := [3][...]int{{1,2},{2,3},{3,4}}    错误 */
  1. slice
    相当于python里面的切片,但两者有差别。go里面的slice是一个指向数组的指针,且为引用类型。这意味着当赋值某个slice到另外一个变量,两个引用会指向同一个数组。如果一个函数需要一个slice参数,在其内对slice元素的修改也会体现在函数调用中,这和传递底层的数组的指针相似。
s := make([]int, 10)    // 创建一个保存有十个元素的slice

/* slice总是与一个固定长度的array成对出现,其影响slice的容量和长度*/
arr := [...]int{1,2,3,4,5}
s1 := a[2:4]     // 创建序号为2-3(不含4)的slice
s2 := a[:]        // 创建一个与arr等长的slice
s3 := s[:4]       //用slice 创建slice

Go关键字

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

控制结构

  • if、 else
/*  用法: 除了条件不需要括号 ,其它和C一样*/
if condition{
    //...
}

// 或者 if-else if-else 结构

if codition1{
    //...
}else if codition2{
    //...
}else{
    //...
}
  • for、 continue、 break
for init;condition;post{}         // 常规用法
for condition{}                    // 相当于C语言的while
for{}                          // 死循环

/* continue 和 break 的用法和C语言相似 */
  • switch、default、 fallthrough
/* 用法一 */
switch exp{
    case cons1:exp1
    case cons2:exp2
    //...
    case consn:expn
    default:exp_
}

/* 用法二 */
switch{      // switch没有表达式,它就会执行case 表达式中为true的部分
    case cond1:exp1
    //...
    case condn:expn
}

/* switch 语句使用fallthrough关键字 */
switch i{     // 如果i==0,它不会向下匹配执行exp1
    case 0:
    case 1:exp1    // exp1不会被执行
}

switch i{    // 如果i==0,它会执行exp1
    case 0: fallthrough
    case 1:exp1    // exp1会被执行
}
  • map、range
    关键字map可以认为是一个用字符串做索引的数组
salary :=map[string]int{
    "Jane":3000, "Tony":2500, "Marry":1800,  // 最后一个逗号必须要有
}

for key, value := range salary{    /* 有点像python的字典 */
    fmt.Printf("%s\t%d\n", key, value)
}
[output]
>>>Jane    3000
   Tony    2500
   Marry    1800

 delete(salary, "Jane")   // 内建函数delete删除元素 "Jane" 

内建函数

closenewpaniccomplex
deletemakerecoverreal
lenappendprintimage
capcopyprintln
  • append、copy
/* append用于追加slice */
s0 := []int{0, 0}
s1 := append(s0, 1)    // 追加元素2到s0末尾, s1 == []int{0, 0, 1}
s2 := append(s1,2,3,4)  // 追加多个元素
s3 := append(s2, s0...)   // 追加一个slice, 注意后面三个点

/* copy 用于复制slice, 返回复制的元素的个数 */
arr := [...]int{1, 2, 3, 4, 5, 6, 7}
var s = make([]int, 5)    // 创建一个类型为[]int,保存5个元素的slice
n := copy(s, arr[:])   // n==5, s内的值为a[:5]
  • close
    用于channel通信,使用它来关闭channel
  • delete
    用于在map中删除实例
  • cap 、 len
    cap返回切片的容量
    len用于返回字符串、slice和数组的长度
  • new、make
    new 用于各种类型的内存分配
    make([]T, len, cap)用于内建类型的内存分配
  • panic、recover
    用于异常处理机制
  • complex、real、imag
    用于复数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值