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. thinkphp自动验证---$_validate

    thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...

  2. 02OC的类和对象

    这章重点介绍OC的类以及对象,由于C语言是面向过程语言,而OC只是对于C语言多了一些面向对象的特性,所以OC相对于其他面向对象语言,例如C#.Java等没有那么多的语法特性,所以差别还是比较大的. 一 ...

  3. PHP使用数组依次替换字符串中匹配项

    select * from table where ctime >= '[date-14]' and ctime <= '[date-1]'; 想把上面这句sql的中括号表示的日期依次换成 ...

  4. SVN版本库(访问权限)配置实例笔记

    http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. ...

  5. 使用python列表推导式进行99乘法表

    首先这很python for i in range(1, 10): print(" ".join(["%d*%d=%d" % (j, i, i*j) for j ...

  6. redis集群之REDIS CLUSTER

    redis集群之REDIS CLUSTER 时间 2016-04-11 17:05:00  NoSQL_博客园 原文  http://www.cnblogs.com/zhanchenjin/p/537 ...

  7. linux升级openssh

    升级sshd到OpenSSH-6.7并删除老版本ssh 1)升级前准备 查看是否缺包 # rpm -qa | egrep "gcc|make|perl|pam|pam-devel" ...

  8. 14. Longest Common Prefix

    题目: Write a function to find the longest common prefix string amongst an array of strings. Subscribe ...

  9. Spring4.0编程式定时任务配置

    看过很多定时调度的配置,大多使用XML配置,觉得比较麻烦,也比较老套.这里介绍一种基于spring4.0注解编程式配置定时任务,简单清晰,使用方便.. 至于引入spring相关jar这里不多说,直接切 ...

  10. 与你相遇好幸运,服务器node环境安装

    >服务器更改root密码 sudo passwd root >服务器ubuntu安装ssh apt-get install openssh-server >服务器开启root用户密码 ...