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语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
随机推荐
- 检查PHP文件中是否含有bom的PHP函数
<?php /*检测并清除BOM*/ if(isset($_GET['dir'])){ $basedir=$_GET['dir']; }else{ $basedir = '.'; } $auto ...
- iOS上架ipa上传问题那些事
iOS上架ipa上传问题那些事 原文: http://www.jianshu.com/p/1e22543285c2 字数513 阅读312 评论0 喜欢1 通过xcode直接打包上传,不会提示你的ip ...
- c语言中的一些注意点
1.头文件两种形式的区别(#include<mystring.h>与#include"mystring.h") 当运行一个程序时,需要调用自己写的函数时,需要在头文件加 ...
- VIM插件攻略
工欲善其事,必先利其器.一个强大的开发环境可以大大提高工作效率.好吧,我知道这是废话...不过,我想一定有很多跟我一样打算进入Linux平台开发的新手,一开始都为找不到一个像Windows下的VS那样 ...
- (转)EClipse插件推荐
http://www.importnew.com/4707.html 来自非营利性Eclipse基金会的Eclipse IDE以其插件生态系统著称.Eclipse市场拥有海量插件可供下载,你可以通过插 ...
- October 20th Week 43rd Thursday, 2016
Now, it's clear. OPPO R9s 这一刻 更清晰. I want a new mobile phone, because the one I am using is broken. ...
- 编译带有PROJ4和GEOS模块的GDAL
1.下载三个软件的源代码(去各自官网下载即可) 2.将PROJ4和GEOS的源码放到GDAL目录下的supportlibs文件夹中. 3.修改GDAL的nmake.opt文件,部分内容如下: # Un ...
- Python爬虫Scrapy框架入门(0)
想学习爬虫,又想了解python语言,有个python高手推荐我看看scrapy. scrapy是一个python爬虫框架,据说很灵活,网上介绍该框架的信息很多,此处不再赘述.专心记录我自己遇到的问题 ...
- 基于AgileEAS.NET SOA 平台SAAS架构技术的开源分销ERP系统-SmartERP.NET下载配置说明
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- Asp.net导出Excel(HTML输出方法)
主要思路: 实例化Gridview,将值绑定后输出...(用烂了的方法) 贴上核心代码: public static void ExportToExcel(DataTable dataList, st ...