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语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
随机推荐
- [Python] 目录和文件操作
在Linux系统下用Python写脚本,肯定不能避免各种与目录和文件夹有关的操作.为了以后方便查阅,简单地针对Python中与目录和文件夹有关的操作进行汇总. 需要实现导入的模块为: import o ...
- 微信公众平台"微信连Wi-Fi"功能来了 线下微信增粉利器
微信连Wi-Fi功能在第三方开发者和服务商已经有出现了,但有些成本相对会高些.近日微信公众平台新添了一个功能插件“微信连Wi-Fi”,已有微信认证过的公众号即可申请开通.赶紧去布局这个线下微信增粉利器 ...
- CentOS(RedHat)安装Adobe Flash Player插件 For firefox
1. 下载离线包 http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash 如果嫌麻烦,我 ...
- 使用bootstrap tooltip控件动态修改提示内容
初始化控件之后即使修改了元素的title内容也不会更改提示信息,比如下面 $(element).attr('title','XXXXXX') 这样只会增加一个原生的title提示,如果保持原样显示必须 ...
- python之路三
集合 set拥有类似dict的特点:可以用{}花括号来定义:其中的元素没有序列,也就是是非序列类型的数据;而且,set中的元素不可重复,这就类似dict的键. set也有继承了一点list的特点:如可 ...
- layer使用方法
type - 基本层类型 类型:Number,默认:0 layer提供了5种层类型.可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层). 若你采用layer. ...
- string与wstring之间的转换
#include <string>std::string ws2s(const std::wstring& ws){ std::string curLocale = setl ...
- ping命令执行过程详解
[TOC] ping命令执行过程详解 机器A ping 机器B 同一网段 ping通知系统建立一个固定格式的ICMP请求数据包 ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运 ...
- squid介绍及其简单配置
squid的简单介绍 squid的概念 squid是一种用来缓存Internet数据的软件.接受来自人们需要下载的目标(object)的请求并适当的处理这些请求.也就是说,如果一个人想下载一web界面 ...
- Android开发之---Activity生命周期
Android开发中,有四大组件:Activity.Service.Content Provider.Broadcast Receiver,可以说,activity的使用是最频繁的了,这里来梳理一下与 ...