Go语言学习
基本类型
Bool 取值范围:true,false (不可以用数字代替)
Int/uint 根据平台可能为32或64位
int8/uint8 长度:1字节 取值范围-128~127/0~255
byte(uint8别名)
int16/uint16 int32/uint32 int62/uint64
float32/float64 长度:4/8字节 小数位:精确到7/15小数位
复数:complex64/complex128 长度:8/16字节 足够保存指针的32位或64位整数型
零值是变量的默认值

在submit里面ctrl+b是打开我们的测试窗口,go run 是运行程序

Go语言中只能显示转换<valueA> [:]=<TypeOfValueA>(<ValueB>)
浮点型和布尔型不能进行转换
string转换为int类型 var valueA, _ = strconv.Atoi(ValueB)
Int类型转换为string类型 valueA:= strconv.Itoa(ValueB)

Go中有指针
采用”.”选择符来操作指针目标对象的成员
操作符”&”取变量地址,使用”*”通过指针间接访问目标对象
默认值为nil不是null

If语句中大括号必须跟在条件语句后面,条件语句可以没有括号,可以在条件语句中可以声明变量

For语句 for{} 无限循环 for i:=0;i<3;i++ {} 经典模式

Switch 支持任何类型或表达式的条件语句,不需要break,符合条件自动跳出,如需要继续执行下一个case,需要使用fallthrough语句,支持初始化表达式,右侧需跟分号,做大括号必须和条件语句在同一行。

Goto break和continue会与标签结合使用,否则break只会跳出本次循环

数组 var a [2]int //长度为2的int型数组
没有赋值,则默认的值为零;string默认为空
a :=[2]int{1} //数组的第一个数为1,第二个为默认0
a :=[20]int{19:1} //添加索引,第二十个元素为0,其他为0
a :=[…]int{1,2,3,4,5} //长度为5的数组
a :=[…]int{19:1} //索引20元素为1,其他为零,数组长度为20

数组指针 a := […]int{19:1}
Var p *[100]int= &a //p位数组a的地址
指针数组 x,y=1,2
a:=[…]int{&x,&y} //a输出的是x,y的地址
数组之间可以进行==和!=的比较

切片Slice
本身不是数组,它指向底层的数组
可以直接创建或从底层数组获取生成
len()获取元素个数,cap()获取容量,make()创建,如果多个slice指向相同底层数组,其中一个的值改变会影响全部
make([]T,len,cap) 如果cap省略,则和len的值相同

var a=[]int //切片的定义

a:=[10]int
s1:=a[5:] //切片s1取数组a索引5到最后的元素
s1:=a[:5]//s1取数组a索引0到5的元素
s1:=a[3:9] //s1取数组a索引3到9的元素

s1 :=make([]int,3,6) //定义s1切片,长度为3,容量为6
s1=append(s1,1,2,3) //利用append函数为切片s1追加元素1.2.3

map
var m map[int]string //map定义
m=make(map[intstring]) //初始化
m[1]=”ok” //赋值
a :=m[1] //取值
delete(m,1) //删除值

多重map嵌套,需要第二层的进行初始化
var m map[int]map[int]string
m=make(map[int]map[int]string)
m[1]=make(map[int]string) //对于key为1 进行初始化
m[1][1]=”ok”
a:=m[]

range 迭代函数
sort.Ints(s) 排序

对map的间接排序
m :=map[int]string{1:”a”,2:”b”,3:”c”,4:”d”,5:”e”} //建map
s:=make([]int,len(m))//建slice
i:=0
for k,_:=range m{ //迭代取出每一个key的值,存到slice中
s[i]=k
i++
}
Sort.Ints(s) //对slice排序

Go 函数 不支持 嵌套、重载和默认参数
无需声明原型、不定长度变参、多返回值、命名返回值参数
匿名函数、闭包
defer
在函数体执行结束后
按照调用顺序的相反顺序逐个执行
即使函数发生严重错误也会执行
支持匿名函数的调用
常用于资源清理、文件关闭、解锁以及记录时间等操作
通过与匿名函数配合可在return之后修改函数计算结果
如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer
时即已经获得了拷贝,否则则是引用某个变量的地址
Go 没有异常机制,但有 panic/recover 模式来处理错误
Panic 可以在任何地方引发,但recover只有在defer调用的函数中有效

结构体
Go 中的struct与C中的struct非常相似,并且Go没有class
使用 type <Name> struct{} 定义结构,名称遵循可见性规则
支持指向自身的指针类型成员
支持匿名结构,可用作成员或定义成员变量
匿名结构也可以用于map的值
可以使用字面值对结构进行初始化
允许直接通过指针来读写结构成员
相同类型的成员可进行直接拷贝赋值
支持 == 与 !=比较运算符,但不支持 > 或 <
支持匿名字段,本质上是定义了以某个类型名为名称的字段
嵌入结构作为匿名字段看起来像继承,但不是继承
可以使用匿名字段指针

go语言学习笔记的更多相关文章

  1. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  2. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  3. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  4. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  5. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  6. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

  7. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  8. Go语言学习笔记十一: 切片(slice)

    Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...

  9. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  10. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

随机推荐

  1. UI第十二节

    - (void)viewDidLoad {    [super viewDidLoad];        UIButton *btn = [UIButton buttonWithType:UIButt ...

  2. MySQL索引的Index method中btree和hash的优缺点

    MySQL索引的Index method中btree和hash的区别 在MySQL中,大多数索引(如 PRIMARY KEY,UNIQUE,INDEX和FULLTEXT)都是在BTREE中存储,但使用 ...

  3. ReactiveCocoa源码拆分解析(三)

    (整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 这一章节主要讨论信号的“冷”与“热” 在RAC的世界 ...

  4. C和指针 第七章 习题

    7.1 hermite递归函数 int hermite(int n, int x) { if (n <= 0) { return 1; } if (n == 1) { return 2 * x; ...

  5. SVN版本控制与分支设置

    使用SVN+Eclipse做软件版本控制. (2009年5月) 1,SVN目录结构 Trunk : 主干目录,此目录下的文件为基准文件 Branches : 用于开发的分支目录 Tags : 用于发布 ...

  6. HDU 5102 The K-th Distance(模拟)

    题意:输入一棵树,输出前k小的点对最短距离dis(i,j)的和. 模拟,官方题解说得很清楚了.不重复了. http://bestcoder.hdu.edu.cn/ 需要注意的是,复杂度要O(n+k), ...

  7. PHP字符串函数

    php字符串处理函数大全 addcslashes — 为字符串里面的部分字符添加反斜线转义字符addslashes — 用指定的方式对字符串里面的字符进行转义bin2hex — 将二进制数据转换成十六 ...

  8. PV 与 并发数 之间的故事

    PV: Page View UV: Unique Visitor 在一些已经上线的项目中,运营会统计每日的PV,UV,IP 等数据 而根据PV量,可以推算出一个相对较科学的并发数,来作为负载测试的一个 ...

  9. Linux学习笔记(4)-远程登录

    根据网上的那些说法,如Linux服务器假设在外地(新疆),和程序员工作的环境(北京)相距太远,那么每次出问题都要出差跑到现场去调试的话,那就太烦人了. 所以,人们开发出了一种远程登录的手段,可以让程序 ...

  10. 转载:持续集成之解决jenkins内存溢出问题

    在jenkins master-slave配置中,总是出现内存溢出问题,更换了机器设备仍然跑不起来: 问题如下: Status Code: 500    Exception: org.apache.c ...