Go语言学习笔记

KetanCheung · · 743 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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关键字

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

控制结构

  • 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" 

内建函数

close new panic complex
delete make recover real
len append print image
cap copy println
  • 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
    用于复数

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:KetanCheung

查看原文:Go语言学习笔记

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

743 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传