最近买了两本书准备学习一下Go语言,其中一本是《Go语言高并发与微服务实战》另外一本是《Go Web编程实战派》,第一本是为了深入了解一下Go语言在高并发中的魅力,买第二本的原因是因为刚刚从Java转到Go语言,所以想更快的学习一些工作中可能接触到的Go Web相关的知识。
众所周知,Go语言是Google于2009年开源的一门编程语言,原名GoLanguage也叫Golang。它可以在不损失应用程序性能的情况下极大地降低代码的复杂度。相比较其他编程语言,它具备了简洁、快速、安全、并行、有趣、开源、内存管理、数组安全、编译迅速等等一些列特点。
话不多少,我会先学习《Go Web编程实战派》这本书,跟随我一起走进Go语言学习的海洋吧!!!
Go语言的基本数据类型分为布尔型、数字类型、字符串类型、复合类型这4种。其中复合类型又分为:数组类型、切片类型、Map类型、结构体类型。Go语言常见的基本数据类型:
类型 | 说明 |
---|---|
布尔型 | 布尔型的值只可以是常量true或者false。eg:var b bool = true |
数字类型 | 包含以下类型: uint8:无符号8位整型(0~255) int8:有符号的8位整型(-128~127) uint16:无符号16位整型(0~65535) int16:有符号的16位整型(-32768~32767) uint32:无符号32位整型(0~429496295) int32:有符号32位整型(-2147483648~2147483647) uint64:无符号64位整型(0~188446744073709551615) int64:有符号64位整型(-9223372036854775808~9223372036854775807) uint:32或者64无符号整型 int:32或者64有符号整型 float32:1EEE-754 32位浮点型数 float64:1EEE-754 64位浮点型数 complex64:32实数和虚数 complex128:64实数和虚数 byte:和uint8等价的,另外的名称 rune:和int8等价的,另外的名称 uintptr:无符号的整型,用来存放指针 |
字符串类型 | 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用的是UTF-8编码标识Unicode文本 |
复合类型 | 包含数组类型、切片类型、Map类型、结构体类型 |
布尔型的值只可以是常量true或者false。比如说if和for语句的条件部分都是布尔类型的值,并且==和<等比较操作也会产生布尔型值
一元操作符(!)对应的逻辑“非”操作,因此当我们使用 !true 的时候它代表的值就是false。
Go语言对于值之间的比较有非常严格的限制,只有两个相同类型的值才可以进行比较。
如果值的类型是接口(interface),这我时候我们必须都要实现相同的接口。
如果其中的一个值是常量,则另外一个值可以不是常量,但是类型必须和该常量的类型保持一致。
如果以上的条件都不满足,则必须在将其中的一个值的类型转换成另外一个值的类型。
布尔类型可以和&&(and)和||(or)操作符结合。如果运算符左边的值已经可以确定整个布尔表达式的值,则运算符右边的值将不在进行求值。
package main
import "fmt"
func main() {
var language1 string = "java"
var language2 string = "javascript"
if language1 == "go" && language2 == "java" {
fmt.Println(language1)
}
}
布尔值并不会隐转换为数字值0或1,反之亦然,必须使用if语句显示的进行转换。
package main
import "fmt"
func main() {
flag1 := 0
flag2 := true
if flag2 {
flag1 = 1
fmt.Println(flag1)
}
}
当我们经常要做这种类型转换的时候,我们可以封装一个函数:
func boolToInt(b bool) int {
if b {
return 1
}
return 0
}
如果反过来我们需要把数值转化到布尔型,这个时候我们也可以封装一个函数进行操作
func intToBool(i int) bool {
return i != 0
}
Go语言中绝对不允许将布尔型强制转换为整型,会出现报错(Cannot covert type bool to type int)
Go语言中支持整型和浮点型数字,同时原生也支持复数,其中位的运算才用的是补码。
Go语言也有基于架构的类型,例如:int、uint、uintptr。这些类型的长度都是根据运算程序所在的操作系统类型决定的。在32操作系统中,int和uint就是32位(4个字节),在64位操作系统中,他们就都是64位(8字节)
符号 | 类型和描述 |
---|---|
uint8 | 无符号8位整型(0~255) |
int8 | 有符号的8位整型(-128~127) |
uint16 | 无符号16位整型(0~65535) |
int16 | 有符号的16位整型(-32768~32767) |
uint32 | 无符号32位整型(0~429496295) |
int32 | 有符号32位整型(-2147483648~2147483647) |
uint64 | 无符号64位整型(0~188446744073709551615) |
int64 | 有符号64位整型(-9223372036854775808~9223372036854775807) |
uint | 32或者64无符号整型 |
int | 32或者64有符号整型 |
float32 | 1EEE-754 32位浮点型数 |
float64 | 1EEE-754 64位浮点型数 |
complex64 | 32位实数和虚数 |
complex128 | 64位实数和虚数 |
byte | 和uint8等价的,另外的名称 |
rune | 和int8等价的,另外的名称 |
uintptr | 无符号的整型,用来存放指针 |
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用的是UTF-8编码标识Unicode文本。由于UTF-8这个编码占用的字节长度是不确定的,所以在GO语言中,字符串会根据需要占用1~4字节,这个与其他语言是完全不同的(eg:java始终使用2个byte)。
字符串是一种值类型。更深入讲,字符串就是字节的定长数组。
声明和初始化而非常容易:
str := "123456"
上述代码已经声明了一个叫str的变量并且给它赋值了”123456“
在Go语言中,字符串的字面量使用英文双引号(“)或者反引号(`)创建。
双引号用来创建可解析的字符串,支持转义但是不能用来引用多行;
反引号用来创建原生的字符串字面量,可能由多行组成,但是不支持转义,并且可以除反引号之外的所有字符
用双引号来创建可解析的字符串
用反引号创建书写多行消息、html、正则表达式
虽然Go语言中的字符串是不可变的,但是字符串支持级联操作(+)和追加操作(+=)
package main
import "fmt"
func main() {
str := "yuliuyun say : "
str1 := "\"hello zachariah\""
str2 := str + str1
str += str1
fmt.Printf(str + "\n")
fmt.Print(str2)
}
未完…