go语言学习笔记
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语言学习笔记的更多相关文章
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- Go语言学习笔记十一: 切片(slice)
Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
随机推荐
- 解释序列号关键字的形象说法[Serializable]
举个栗子,你在qq中发送一段文字加图片混合的信息给某人的时候,qq不会提供多个方法分别接收文字和图片,而是将这段内容信息赋值给一个对象,然后序列化这个对象为 byte[],然后对这个数组编码,加密,压 ...
- Linux串口中的超时设置
在Linux下使用串口通信时,默认的阻塞模式是不实用的.而采用select或epoll机制的非阻塞模式,写代码有比较麻烦.幸好Linux的串口自己就带有超时机制. Linux下使用termios.h中 ...
- java基础 字符串 “==” 和 “equals” 比较
demo: public class TestStringEquals { public static void main(String[] args) { String a = "test ...
- ASP.NET基础代码备忘
使用ASP.NET原生的__doPostBack方法触发asp:Button //javaScript部分 __doPostBack('<%=btnAmountDivided.UniqueID ...
- JAVA Hibernate工作原理及为什么要用
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
- .NET LINQ基本查询操作
获取数据源 在 LINQ 查询中,第一步是指定数据源.像在大多数编程语言中一样,在 C# 中,必须先声明变量,才能使用它.在 LINQ 查询中,最先使用 from 子句的目的是引入数据源 ( ...
- [Android Pro] ScrollView嵌套RecyclerView时滑动出现的卡顿
reference to : http://zhanglu0574.blog.163.com/blog/static/113651073201641853532259/ ScrollView嵌套Rec ...
- VS更改编辑窗背景
打开Visual Studio 工具→扩展和更新→联机 在搜索框里输入“background”后,搜索结果有很多插件可以更改 Visual Studio 的背景,选择其中的一项,可以在右边进行预览 ...
- 教你几种在SQLServer中删除重复数据方法(转)
转载地址:http://www.jb51.net/article/22980.htm 方法一 复制代码 代码如下: declare @max integer,@id integer declare c ...
- Oracle insert大量数据经验之谈(转)
在很多时候,我们会需要对一个表进行插入大量的数据,并且希望在尽可能短的时间内完成该工作,这里,和大家分享下我平时在做大量数据insert的一些经验. 前提:在做insert数据之前,如果是非生产环境, ...