没有合适的资源?快使用搜索试试~ 我知道了~
首页Go语言学习笔记高清:从入门到实践
"Go语言学习笔记高清版是由雨痕编写的,该笔记详细记录了作者从2012年初开始学习Go语言的过程,随着时间的推移,不断更新和补充内容,涵盖了Go语言的基础知识、语法特性、函数设计、类型系统、控制结构、自定义类型、指针、保留字、标准库和扩展库等内容。每章节如第一章基础,包括变量、基本类型、类型转换、常量、字符串、运算符、指针和保留字等,深入浅出地介绍了语言的核心概念。随着Go语言版本的更新,笔记也同步跟进,确保内容与最新版本兼容,如Go 1.0.2和RC1、RC2等。此外,笔记还特别关注了函数的特性,如多返回值、命名返回参数、变参、匿名函数和闭包,以及命令和标准库的使用。通过这个学习笔记,读者可以系统地学习和掌握Go语言,适合初学者和进阶者参考。" 学习这本笔记时,读者可以按照时间线追踪作者的学习历程,同时结合实际项目练习,逐步提升Go编程技能。每一版的修订都体现了作者对语言理解的深化和对细节的把握,对于理解和掌握Go语言的变迁和发展具有重要意义。无论是想要入门Go语言,还是希望回顾和巩固基础知识,这本书都是一个宝贵的资源。"好好学习,天天向上"的口号激励着读者持续学习,不断提升自我。"雨雨痕Q.yuhen"的联系方式提供了作者互动的途径,便于读者在学习过程中寻求帮助或反馈。这是一份详实且实用的Go语言学习指南。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/10238322/bg10.jpg)
•
不可变类型,法直接修改字节数组内容。
•
字节数组不包括 NULL (\0) 结尾。
内存结构: src/pkg/runtime/runtime.h
146! struct String
147! {
148! ! byte*! str;
149! ! int32! len;
150! };
单引号字符常量表个 Unicode 字符 "(rune),持 \uFFFF、\UFFFFFFFF 和 \xFF 格式字符。
func main() {
b := [10]byte{}
b[1] = 'a'
b[0] = '我'
fmt.Println(b)
}
输出:
main.go: constant 25105 overflows uint8
make: *** [_go_.6] Error 1
持切操作,返回串 (string), slice。
func main() {
s := "abcdefg"
sub := s[1:3]
fmt.Printf("%T = %v\n", sub, sub)
}
输出:
string = bc
要修改字符串,需要显式转换成 []byte 或 []rune。
string(0x1234)!! // == "\u1234"
string([]bytes)! // bytes -> string
string([]runes)! // Unicode ints -> UTF-8 string
[]byte(string)!! // UTF-8 string -> bytes
[]rune(string)!! // UTF-8 string -> Unicode ints
转换成 []byte 后,可以修改字节内容,不过还需转换回来。
func main() {
s := "abc"
var c byte = s[1] !! // 按索引号访问
fmt.Printf("%c, %02x\n", c, c)
bs := []byte(s)! ! // 转换为 bytes,以便修改
16
![](https://csdnimg.cn/release/download_crawler_static/10238322/bg11.jpg)
bs[1] = 'B'
println(string(bs))
}
输出:
b, 62
aBc
看看下的转换演。
func main() {
// UTF-8 编码格式存储的字符串
s := "a:中国"
println("utf-8 string: ", s, len(s))
/* --- string to bytes --------------------------------------- */
// 转换成 bytes,以便于修改
bs := []byte(s)
bs[0] = 'A'
for i := 0; i < len(bs); i++ {
fmt.Printf("%02x ", bs[i])
}
// 将 bytes 转换为 string
println(string(bs))
/* --- string to unicode ------------------------------------- */
// 转换成 Unicode
u := []rune(s)
println("unicode len =", len(u))
// 显 unicode number
for i := 0; i < len(u); i++ {
fmt.Printf("%04x ", u[i])
}
// 按照 unicode 修改
u[4] = ''
// 将 unicode 转换为 string
println(string(u))
}
输出:
utf-8 string: a:中国 11
41 3a e4 b8 ad e5 9b bd e4 ba ba A:中国
unicode len = 5
0061 003a 4e2d 56fd 4eba a:中国
17
![](https://csdnimg.cn/release/download_crawler_static/10238322/bg12.jpg)
使 "+" 连接跨字符串时需要注意,连接符号 "+" 必须在上尾部,否则会导致编译错
误"(Error: invalid operation: + ideal string)。
s := "abc" +
", 123"
标准库 strings 包提供了 Join() 等常的各种字符串操作函数。
import (
"strings"
)
func main() {
a, b, c := "a", "b", "c"
s := strings.Join([]string{ a, b, c }, "")
println(s)
}
还可以使 bytes.Bu!er 来完成 C# StringBuilder 的活。
func main() {
sb := bytes.Buffer{}
sb.WriteString("Hello ")
sb.WriteString("World")
sb.WriteString("!")
fmt.Println(sb.String())
}
输出:
Hello World!
使符号 ` 定义原始是字符串"(Raw String),不进转义处理,持跨。
s := `ab\c`
使 for 遍历字符串时,需要注意 byte 和 rune 的区别。
func main() {
s := "中国"
for i := 0; i < len(s); i++ {
fmt.Printf("%c\n", s[i])
}
for i, c := range s {
fmt.Printf("%d = %c\n", i, c)
}
}
输出:
18
![](https://csdnimg.cn/release/download_crawler_static/10238322/bg13.jpg)
ä
¸
"
å
½
ä
º
º
0 = 中
3 = 国
6 =
字符串编码案
字符串编码案是个即简单烦的话题,这主要涉及到字节 (byte) 和字符 (character) 两个不同的概念。
字节是计算机软件系统的最存储单位,我们可以 n 个字节表达个概念,诸如 4 字节的 32 位整数或着其
他什么对象之类的,任何对象最终都是通过字节组合来完成存储的。字符也是种对象,它和具体的语有
关,如在中,"我" 是个字符,不能将其当作个字节的拼接。
早期的计算机系统编码案主要适应英等字语体系,ASCII 编码案的容量以表达所有的字符,于是
每个字符占 1 个字节被固定下来,这也造成了定程度上的误解,将字符和字节等同起来。要知道,这个世
界上并只有英种字符,中等东亚语体系的字符数量就法 ASCII 容纳,们只好 2 个或者更
多的字节来表达个字符,于是就有了 gb2312、big5 等等种类繁多且互不兼容的编码案。
随着计算机技术在世界范围内的泛使,国际化需求越发重要,以往的字符编码案已经不适应现代软件开
发。于是国际标谁化组织 (ISO) 在参考很多现有案的基础上统制定了种可以容纳世界上所有字和符号
的字符编码案,这就是 Unicode 编码案。Unicode 使得我们在个系统中可以同时处理和显不同国家
的字。
Unicode 本质上就是通过特定的算法将不同国家不同语的字符都映射到数字上。如中字符 "我" 对应的
数字是 25105 (\u6211)。Unicode 字符集 (UCS, Unicode Character Set) 有 UCS-2、UCS-4 两种标准。
其中 UCS-2 最多可以表达 U+FFFF 个字符。 UCS-4 则使 4 字节编码,位固定为 0,也就是说最多可
以有 2^31 个字符,乎容纳了全世界所有的字符。
Unicode 只是将字符和数字建了映射关系,但对于计算机,要存储和操作任何数据,都得字节来表
,这其中还涉及到不同计算机架构的端问题 (Big Endian, Little Endian)。于是有了种将 Unicode 字
符数字转换成字节的法:Unicode 字符集转换格式 (UCS Transformation Format),缩写 UTF。
前常的 UTF 格式有:
19
![](https://csdnimg.cn/release/download_crawler_static/10238322/bg14.jpg)
•
UTF-8: 1 到 4 字节不等案,字符通常只个字节,东亚字符 (CJK) 则需要三个字节。
•
UTF-16: 2 字节符号整数存储 Unicode 字符,与 UCS-2 对应,适合处理中。
•
UTF-32: 4 字节符号整数存储 Unicode 字符。与 UCS-4 对应,多数时候有点浪费内存空间。
UTF-8 具有常良好的平台适应性和交互能,因此已经成为很多操作系统平台的默认存储编码案。
UTF-16 因为等,浪费空间较少,拥有更好的处理性能,包括 .NET、JVM 等都使 2 字节的 Unicode
Char。
另外,按照端划分,UTF 有 BE 和 LE 两种格式,如 UTF-16BE、UTF-16LE 等。为了让系统能动
识别出 BE 和 LE,通常在字符串头部添加 BOM 信息,"FE FF" 表 BE,"FF FE" 表 LE。后还会有两个
字符来表 UTF-8 或 UTF-32。
摘: http://www.rainsts.net/article.asp?id=906 !(站已死,权作纪念)
1.6 运算符
Go运算符全部是从左到右结合"(总算从 C 泥沼爬起来了)
优先级
运算符
说明
*" /" %" <<" >>" &" &^
.
+" -" |" ^
.
==" !=" <" <=" >" >=
.
<-
channel 运算符
.
&&
低
||
位运算符:
6:! 0110
11:! 1011
-----------------
&! 0010! = 2! ! AND, 都为 1
|! 1111! = 15! ! OR, 少个为 1
^! 1101! = 13! ! XOR, 只能个为 1
&^! 0100! = 4! ! AND NOT, bit clear。从 a 上清除所有 b 的标志位。
!!!!11 在 0、1、3 上设置了标志,检查 6 这三个进制位,如果是 1 就改为 0 即可。
演:
func main() {
a := 0
20
剩余177页未读,继续阅读
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
marryhe
- 粉丝: 4
- 资源: 57
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 岩石滑动与断层冲击地压:声发射特征分析
- 新时代煤炭工业八大战略新取向剖析
- 开采强度对华亭矿区冲击地压危险性的影响分析
- 新安煤矿探采对比:影响安全生产的关键因素与技术支撑
- 210MW循环流化床锅炉引风机变频改造优化与节能效果
- 浅埋煤层开采沉陷预测:方法应用与影响分析
- 优化巷道过陷落柱支护方案:数值模拟与现场试验
- 坚硬顶板定向断裂爆破技术:安全高效采煤新方案
- 北航2019算法课作业解析:投资策略与凸子多边形优化
- 断层破碎带垮冒下堆积体边界抗力分布关键影响因素
- 哈拉沟选煤厂优化末煤系统提高效率与处理能力
- 瓦斯涌出影响下采动煤体蠕变失稳研究
- 提升煤矿装载效率的可控箕斗定量装载设备设计
- 水分调控下烟煤瓦斯吸附特性对比研究
- 重介质悬浮液密度控制硬件设计与选型探讨
- 坚硬顶板巷道支护参数设计:现场测试与数值分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)