分享
  1. 首页
  2. 文章

Go语言学习笔记

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

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群:692541889

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏