Go知识点之随便记记(三)

学习资料来自

GitHub - unknwon/the-way-to-go_ZH_CN: 《The Way to Go》中文译本,中文正式名《Go 入门指南》

1、Map

1)Map可用函数或切片和数组(用于一个key对应多个value的情况)作为 value

2)是引用类型

3)长度可动态改变,不用new进行初始化(会返回空指针 nil)

4)判断键值对是否存在

_, ok := map1[key1]             // 如果key1存在则ok == true,否则ok为false

if _, ok := map1[key1]; ok {    // 可以结合if进行判断
	// ...
}

delete(map1, key1)              // 删除指定键值 

5)可构建map类型的切片,初始化举例

items := make([]map[int]int, 5)
for i:= range items {
	items[i] = make(map[int]int, 1)
	items[i][1] = 2
}

// 注意:for-range结构第一个值返回索引,第二个返回具体值
//      忽略索引值时使用_ ;忽略具体值时直接使用 i:=range

6)map 默认不进行排序操作

7)map 非线程安全

2、packge包

1)相关标准库

用途
unsafe打破 Go 语言“类型安全”的命令,一般的程序中不会被使用,可用在 C/C++ 程序的调用
os平台无关性的操作系统功能接口,采用类 Unix 设计,隐藏了不同操作系统间的差异,让不同的文件系统和操作系统对象表现一致
os/exec运行外部操作系统命令和程序的方式
syscall底层的外部包,提供操作系统底层调用的基本接口
archive/tar和archive/zip-compress压缩(解压缩)文件
fmt格式化输入输出功能
io基本输入输出功能,大多数是围绕系统功能的封装
bufio缓冲输入输出功能的封装
path/filepath操作在当前系统中的目标文件名路径
flag对命令行参数操作
strings提供对字符串的操作
strconv将字符串转换为基础类型
unicode为 unicode 型的字符串提供特殊的功能
regexp正则表达式功能
bytes对字符型分片的操作
index/suffixarray子字符串快速查询
math基本的数学函数
math/cmath复数的操作
math/rand伪随机数生成
sort为数组排序和自定义集合
math/big大数的实现和计算
container/list

双链表,链表遍历方法如下( l=*List ):

for e := l.Front(); e != nil; e = e.Next() {}
container/ring环形链表
time日期和时间的基本操作
log记录程序运行时产生的日志
encoding/json读取并解码和写入并编码 JSON 数据
encoding/xmlXML1.0 解析器
text/template生成像 HTML 一样的数据与文本混合的数据驱动模板
net网络数据的基本操作
http可扩展的 HTTP 服务器和基础客户端,解析 HTTP 请求和回复
runtimeGo 程序运行时的交互操作,例如垃圾回收和协程创建
reflect实现通过程序运行时反射,让程序操作任意类型的变量

2)regexp包

(1)单纯的正则表达式匹配:ok, _ := regexp.Match(pat, []byte(searchIn))

                                                或 ok, _ := regexp.MatchString(pat, searchIn)

(2)涉及到正则表达式替换等功能时 通过 Compile 方法返回 Regexp 对象(补:正则表达式有误返回错误,MustCompile在正则表达式无效时程序 panic)

3)sync包(锁机制)

(1)互斥锁:sync.Mutex 守护临界区

(2)共享变量存放于同一个 struct 中,该struct中加入Mutex锁

(3)RWMutex:RLock()方法允许多个线程同时读但仅一个写

4)big包

(1)大整数:big.Int;大有理数:big.Rat(含Mul,Add以及Div等运算)

5)自定义包

(1)文件名:不含 _ 的小写单词

(2)导入本地包: import "包的路径或 URL 地址"

6)导入外部安装包:go install 在本地位置安装

7)包初始化:分配初始值给所有的包级变量和调用源码中定义的包级 init 函数来初始化

(1)init 函数不能被调用

(2)一个包可能有多个 init 函数甚至在一个源码文件中,它们无序执行

8)不同包存放在不同的目录下,每个包(所有属于这个包中的 go 文件)都存放在和包名相同的子目录下

9)已有常用外部包

(1)数据库

包名针对的数据库
GoMySQLMySQL
go-pgsqlPostgreSQL
mgo, gomongoMongoDB
couch-goCouchDB
godbclODBC
redis.goRedis
gosqliteSQLite3

(2)SDL bindings 

(3)goprotobuf :Google's Protocal Buffers

(4)go-xmlrpc :XML-RPC

(5)twitterstream :Twitter

(6)GoAuth :OAuth libraries

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值