go语言学习笔记(二)
整数
有符号整数
int8 int16 int32 int64
无符号整数
uin8 uin16 uin32 uin64
无符号整数 uintptr可以进行运算这点很重要请了解unsafe包,大小不明确,足以完整存放指针,uinptr只用于底层编程。
rune 类型是int32的同义词,常常用于指明一个值是unicode码点。
a:="这是golang"
for i:=0;i< len(a);i++ {
fmt.Println(a[i])
}
输出:
232
191
153
230
152
175
103
111
108
97
110
103
这是按utf8码点输出的
但是如果将a变为rune类型
package main
import "fmt"
func main(){
a:=[]rune("这是golang")
for i:=0;i< len(a);i++ {
fmt.Println(a[i])
}
}
输出:
36825
26159
103
111
108
97
110
103
按照unicode码点序列输出
常量
在编译阶段就计算出表达式的值,意义在程序运行过程中防止恶意篡改。
声明常量使用关键字const
如:const e = 1234141241(也可以指定类型当然何必多此一举?)
常量声明不需要写type,会根据右边表达式类型自动推导。
常量生成器iota 就是枚举。
逻辑运算符
&&、||、!
浮点数
float32 float64
布尔
true false
字符串
原始字符串字面量`........`
字符串和字节切片转换
字符串可以使用切片的索引方式。
常用内置函数
append
len
cap
make
new
delete
close
panic
recover
数组
具有固定长度拥有零个或多个相同类型的元素序列
var a [3]int
var b [3]int = [3]int{1,2,3}
数组长度是数组类型的一部分。[2]int [3]int是不同类型的数组。
c := [...]int{99:-1} 这个数组有100个元素其中第100个元素的值-1其他元素均为类型零值。
go语言中数组是按值传递。
切片slice
slice是一种轻量级数据结构,
type lisce struct{
data ptr //指针
len int //实际长度
cap int //容量
}
一个底层数组可以对应多个slice 并且可以相互重叠。
切片索引方[m:n]返回一个原切片类型的一个切片
slice无法做比较因为同一个slice在同一时间可能拥有不同的值。
slice只可以和nil比较,但是slice==nil不代表slice为空,还是要通过len(slice)==0判断是否为空
切片可以包含多个子切片并且当子切片一直被引用那么原切片就不会被垃圾回收如下:
func main(){
b := ftest()
fmt.Println(b)
}
func ftest()[]int{
a := []int{1,2,3,4,5,6,7,8,8,9,123,1,234,5,34,56,7}
return a[1:3]
}
上面的代码切片a一直被引用到程序结束。改正方法如下:
func ftest()[]int{
a := []int{1,2,3,4,5,6,7,8,8,9,123,1,234,5,34,56,7}
c := make([]int,2)
c = a[1:3]
return c
}
map
散列表所有的键、值都拥有相同的数据类型
a:=make(map[string]int)
map不是一个变量不可以获取地址,因为map的增长可能导致已有元素重新分配新的位置使得获取的地址无效。
map迭代顺序不固定,不同的实现方法会使用不用的散列算法
map只可以和nil比较
如果散列表的value是结构体不能直接对其进行修改会报错。
type a struct{
b int
}
m = make(map[int]a)
v = a{b:1}
m[0] = v
m[0].b = 2 //崩溃
u:=m[0]
u.b = 2
m[0] = u //正确
z=make(map[int]*a)
z[0] = *v
z[0].b++ //正确
结构体
将零个或多个任意类型的命名变量组合在一起的聚合类型。
命名的结构体类型中不可以定义一个拥有相同结构体类型的成员变量,也就是一个聚合类型不可以包含他自己,但是可以包含一个指向相同结构体类型的指针。
结构体的匿名字段
type b struct {
i int
}
type a struct {
i int
b
}
结构体a中存在匿名字段b,此时类型就是字段b的名称,类似于继承。
a结构体的字段总包含b称作b嵌入于a。
结构体中也可以嵌入接口。
当结构体中嵌入多个结构体并且其中有多个结构体的字段重名,那么外层结构体的字段会覆盖内层的结构体字段但是他们的内存空间都保留。比如:
- i 指的是结构体a中的i字段,如果想访问b可以a.b.i来访问
可比较性
如果结构体中所有成员都是可比较多那么这个结构体就是可比较的。
接口
接口即是约定,是一套必须实现的方法集蓝本,要想实现一个接口就要实现这个接口的所有方法。
package io
type Reader interface{
Read(p []byte)(n int,err error)
}
实现 io.Reader 接口
var s []byte
func (str s)(n int,err error){
return len(str),true
}
var r io.Reader = s
接口分为动态接口类型和动态接口值 上式中动态接口类型为[]byte 动态接口值为nil
类型断言
我们经常需要判断一个接口的动态类型,这时需要检测其是否为某一类型。
如果T是一个具体得到类型,写出来类似于x.(T) 检测x的动态类型是否为T,为真则返回x的动态接口值,为假则崩溃。
如果T是一个接口类型在判断动态类型是否满足这个接口。
如果类型断言出现在需要两个结果的表达式则不会崩溃。
f,ok := w.(*os.file)
类型分支类判断接口类型
switch x.(type):
case nil:
case int,uint:
case string:
default:
go语言学习笔记(二)的更多相关文章
- Go语言学习笔记二: 变量
Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...
- C语言学习笔记二
第二章 数组 一,定义: 数组是有序数据的结合,同一数据类型 整型数组 int arr[10]={0,1,2,4,5,6,7,8,9}; 字符数组 char str[6]={'h',' ...
- 【GO】GO语言学习笔记二
基本类型: 布尔型:boolean 整型:int8,byte,int16,int,uint,uintptr等 浮点型:float32,float64 复数类型:complex64,complex128 ...
- Go语言学习笔记(二) [变量、类型、关键字]
日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号. 2.Go 同其他语言不同的地方在于变 ...
- [C语言学习笔记二] extern 函数的用法
extern 用来定义一个或多个变量.其后跟数据类型名和初始值.例如: extern int a =10 它与 int,long long int,double,char的本质区别,在于 extern ...
- C语言学习笔记二---数据类型运算符与表达式
一.C的基本语法单位 1.标识符:有效长度:31(DOS环境下) 2.关键字:main不是 3.分隔符:空格符,制表符,换行符,换页符 4.注释符:a./*.....*/ b.// 二.C的常用输 ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
随机推荐
- 利用电脑开启自带虚拟wifi,无需第三方工具。
注:此方法只验证win 7以上系统,XP server 2016 系统未验证 1.新建记事本,在记事本中输入netsh wlan set hostednetwork mode=allow ssid= ...
- Kafka权威指南阅读笔记(第六章)
Broker配置 Kafka可以同时拥有可靠的主题和非可靠的主题.非可靠的主题允许丢失. 复制系数 主题级别的配置参数是 replication.factor,在Broker级别则可以通过defaul ...
- List<model>需要根据特定字段求差集的实现
list对象不能直接使用Except等封装好的函数,因为内存地址不一样(还有一些数虽然主数据一致但是update/create信息也不一致,对,我碰到的需求就是这么难受 TOT) 这时候我们的需求很多 ...
- vue页面首次加载缓慢原因及解决方案
第一次打包vue的项目部署到服务器下时,发现初次加载特别的缓慢,将近20s页面才加载出来,完全没有开发环境上的那么流畅.主要原因是页面在打包后如果不进行相关配置会导致资源文件特别的大,一次想要全部加载 ...
- 在虚拟机中使用DHCP动态管理主机地址
小知识 DHCP协议服务能够自动化的管理局域网内的主机IP地址,有效的提升IP地址使用率,提高配置效率,减少管理与维护成本.简而言之,就是ip地址分配. *****五星重点 所需要的服务:dhcp 下 ...
- NOIP模拟18 T2
不知道为什么很多人拒绝这题打搜索...其实搜索在充分剪枝后时间是非常优秀的,不管数据怎样基本都可跑出 首先一个显然结论:对于某种状态,他抓到的小精灵一定是一个连续的区间. 因此我们可以枚举这个区间的左 ...
- js清除节点内容(改变标签元素)
<!DOCTYPE HTML><html> <head> <meta http-equiv="Content-Type" c ...
- Project Euler 52: Permuted multiples
可以看到数字125874的两倍251748和它有着完全相同的数字,只是顺序不同而已.求一个最小的正整数\(x\),使得\(2x,3x,4x,5x,6x\)都有完全相同的数字. 分析:此题的思路比较直接 ...
- 『题解』洛谷P1351 联合权值
更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description 无向连通图\(\mathrm G\)有\(n\)个点,\(n - 1\)条边.点从 ...
- len、is、==、可变于不可变类型
a="asdfghjkl;'iuygb" b="小米" c=['a','b','c'] d= {'name':1,'age':24} # len统计字符或元素的 ...