01 整数类型
整数类型依照有/无符号划分,可分为有符号整数和无符号整数,二者依照大小划分,有 8 位、16 位、32 位和 64 位:
大小 | 8 位 | 16 位 | 32 位 | 64 位 |
---|---|---|---|---|
有符号 | int8 | int16 | int32 | int64 |
无符号 | uint8 | uint16 | uint32 | uint64 |
此外,还有两种整数类型,别离是 int 和 uint,其大小与原生的有/无符号整数类型雷同,都是 32 位或 64 位。
其中,int32 和 uint8 别离有类型别名是 rune 和 byte,二者可调换应用。须要留神的是,int 和 uint 都有别于大小明确的类型,也就是说,int 和 int32 是两种不同的类型,必须显示转换。
var a intvar b int32var c runevar d bytevar e uint8func main() { fmt.Printf("a=%d type:%T\n", a, a) fmt.Printf("b=%d type:%T\n", b, b) fmt.Printf("c=%d type:%T\n", c, c) fmt.Printf("d=%d type:%T\n", d, d) fmt.Printf("e=%d type:%T\n", e, e) if c == b { fmt.Println("rune 类型是 int32 的类型别名,二者能够调换应用") } if d == e { fmt.Println("byte 类型是 uint8 的类型别名,二者能够调换应用") }}
02 浮点数类型
浮点数类型有两种,别离是 float32 和 float64,大多数状况下,倡议优先应用 float64,因为 float32 的运算容易产生误差。
var f float32var g float64func main() { fmt.Printf("f=%g type:%T\n", f, f) fmt.Printf("g=%g type:%T\n", g, g)}
03 布尔类型
bool 型的值只有两种可能,true 和 false,在 Go 语言中,bool 型的零值是 false,布尔值无奈隐式转换成数值 0 或 1,反之亦然。
var h boolfunc main() { fmt.Printf("h=%t type:%T\n", h, h)}
04 字符串类型
字符串是不可变的带双引号的字节序列,它能够蕴含任意数据,包含 0 值字节,不可变意味着多个字符串能够共享一块内存空间。
如图所示,同一块内存空间,蕴含字符串 s 、字符串 hello 和字符串 world。
字符串操作:
- len 函数
内置的 len 函数返回字符串的字节数,并非字符的个数,UTF-8 的简体中文,一个字符占三个字节。
- 下标拜访字符
通过下标拜访字符串,能够失去第 i 个字符。
- 子串生成
子串生成操作 s[i:j] 产生一个新字符串,内容取自原字符串的字节,下标从 i (含边界值)开始,直到 j(不含边界值)。新字符串的大小是 j-i 个字节。
须要留神的是,如果下标越界,或者 j 的值小于 i,将触发宕机异样。
操作数 i 和 j 的默认值别离是 0 [字符串的起始地位]和 len(s) [字符串的终止地位],如果省略 i 或 j,或两者都省略,则取默认值。
- 字符串连贯
加号(+)运算符连贯两个字符串而生成一个新字符串。
var i stringfunc main() { fmt.Printf("i=%s type:%T\n", i, i) i = "hello golang" fmt.Printf("字符串 i 的长度:%d\n", len(i)) fmt.Printf("字符串 i 的第一个字符:%c\n", i[0]) j := i[0:5] fmt.Printf("子字符串 j 的值:%s\n", j) k := i[5:] fmt.Printf("子字符串 k 的值:%s\n", k) l := i[:5] fmt.Printf("子字符串 l 的值:%s\n", l) m := i[:] fmt.Printf("子字符串 m 的值:%s\n", m) n := "hello " o := "world" p := n + o fmt.Printf("连贯字符串 p 的值:%s\n", p)}
Go语言基础知识