Golang Go语言 学习笔记(2)
Golang Go语言 学习笔记(2)
Go 数据类型有如下类型。
- 基础类型
- 符合类型
- 引用类型
- 接口类型 类型内容很多只能慢慢学习,今天学习基础类型。
基础类型
-
数字
- 有符号无符号
- Unicode 字符 rune 类型是和 int32 等价的类型
- byte 也是 uint8 类型的等价类型
- 计算溢出 高位截断
var u uint8 = 255 fmt.Println(u, u+1, u*u) // "255 0 1" var i int8 = 127 fmt.Println(i, i+1, i*i) // "127 -128 1"
- 位运算
var x uint8 = 1<<1 | 1<<5var y uint8 = 1<<1 | 1<<2
fmt.Printf("%08b\n", x) // “00100010”, the set {1, 5} fmt.Printf("%08b\n", y) // “00000110”, the set {1, 2}
fmt.Printf("%08b\n", x&y) // “00000010”, the intersection {1} fmt.Printf("%08b\n", x|y) // “00100110”, the union {1, 2, 5} fmt.Printf("%08b\n", x^y) // “00100100”, the symmetric difference {2, 5} fmt.Printf("%08b\n", x&^y) // “00100000”, the difference {5}
for i := uint(0); i < 8; i++ { if x&(1<<i) != 0 { // membership test fmt.Println(i) // “1”, “5” } }
fmt.Printf("%08b\n", x<<1) // “01000100”, the set {2, 6} fmt.Printf("%08b\n", x>>1) // “00010001”, the set {0, 4}
- 浮点型
一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度;通常应该优先使用 float64 类型,因为 float32 类型的累计计算误差很容易扩散,并且 float32 能精确表示的正整数并不是很大(译注:因为 float32 的有效 bit 位只有 23 个,其它的 bit 位用于指数和符号;当整数大于 23bit 能表达的范围时,float32 的表示将出现误差)
-
字符串:一个字符串是一个不可改变的字节序列
- 不变性意味如果两个字符串共享相同的底层数据的话也是安全的,这使得复制任何长度的字符串代价是低廉的
- 编码:编码是一个基础,但是很复杂的东西,很多原理都跟编码有关。
- ASC II:是最初的编码定义,用一个字节来表示 0-127 表示英文和符号
- Unicode:随着计算机的广泛使用,其他国家的语言和文字需要展示,一个字节不够用了所以用 4 个字节来保存,诞生了 unicode 编码,至今 unicode 已经 120000 的字符了
- Unicode 官方
- UTF-8:由于 unicode 需要 4 个字节,有字符实际用不到这么多存储为,但是占用了这么的空间很浪费,所以 UTF-8 可变长字编码格式产生了,它位不同的长度的 Uicode 编码使用不用的表示方式。如下
0xxxxxxx runes 0-127 (ASCII) 110xxxxx 10xxxxxx 128-2047 (values <128 unused) 1110xxxx 10xxxxxx 10xxxxxx 2048-65535 (values <2048 unused) 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 65536-0x10ffff (other values unused)
- Go 语言的 range 循环在处理字符串的时候,会自动隐式解码 UTF8 字符串
- 标准库中四个重要的库
- btyes:btye 的查找,替换,比较,截取,拆分,合并等功能
- 因为字符串是只读的,因此逐步构建字符串会导致很多分配和复制
- strings:字符串 btye 的查找,替换,比较,截取,拆分,合并等功能
- strconv:字符串转化
- unicode:给字符分类
- btyes:btye 的查找,替换,比较,截取,拆分,合并等功能
-
布尔:没有什么特别注意的,就是要讲数字当 bool 值需要做一个函数转换
func itob(i int) bool { return i != 0 } ```
-
常量:常量表达式的值在编译期计算,而不是在运行期。
- iota 可以批量生成常量
type Weekday int
const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday ) //复杂例子 const ( _ = 1 << (10 * iota) KiB // 1024 MiB // 1048576 GiB // 1073741824 TiB // 1099511627776 (exceeds 1 << 32) PiB // 1125899906842624 EiB // 1152921504606846976 ZiB // 1180591620717411303424 (exceeds 1 << 64) YiB // 1208925819614629174706176 )
- 无类型常量:我个人理解无类型常量有点像 php 不定义变量类型,系统自动识别,后面学习到接口时有重要的作用。
总结
虽然每种语言都有这些类型,但是每种语言在细节处理上有相似也有不同,这些相似和不同就体现出了不同人的思考方式,总之代码是死的,思维是活的。多思考多实践,形成自己的思维体系更重要。
更多关于Golang Go语言 学习笔记(2)的实战教程也可以访问 https://www.itying.com/category-94-b0.html
学过 c 的话 golang 不是手到擒来?
更多关于Golang Go语言 学习笔记(2)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
不要太容易,只要 c 功力深绝对轻松驾驭 go
关于您分享的“Golang Go语言学习笔记(2)”,很高兴看到您对Go语言的学习热情。以下是一些专业角度的补充和建议,希望能帮助您更深入地理解这门强大的编程语言。
Go语言以其简洁、高效和并发支持而闻名。在您的学习笔记中,可能已经涵盖了基础语法、数据类型和函数等入门内容。接下来,您可以重点关注以下几个方面:
-
并发编程:Go语言的goroutine和channel是其并发编程的两大核心特性。深入学习并实践这些特性,对于掌握Go语言的精髓至关重要。
-
标准库和第三方库:Go语言的标准库非常强大,涵盖了网络编程、文件操作、文本处理等多个方面。同时,Go社区也涌现出了许多优秀的第三方库,如数据库驱动、Web框架等,这些都能极大地提升开发效率。
-
错误处理:Go语言对错误处理有着独特的理念,通过返回错误值的方式来进行。熟练掌握这种错误处理方式,对于编写健壮的代码至关重要。
-
测试:Go语言内置了强大的测试框架,支持单元测试、基准测试和示例测试。编写测试用例,不仅可以帮助您验证代码的正确性,还能提升代码的可维护性。
-
实践项目:理论学习之外,通过实际项目来巩固所学知识也是非常重要的。可以尝试编写一些简单的Web应用、CLI工具或数据处理程序等。
希望这些建议能对您的Go语言学习之路有所帮助,祝您学习愉快!