作用
告诉编译器这个数据(变量)应该以多大内存空间存储
关于类型
- 编译器要求:每个值必须在经过编译后属于某个类型(因为go是静态类型语言)
- 自定义类型:新类型不会拥有原基础类型所附带的方法(新的类型,方法需要重新创建)
基础类型

详情
| 类型 | 名称 | 长度 | 零值 | 说明 |
|---|---|---|---|---|
| bool | 布尔类型 | 1 | false | 其值不为真即为家,不可以用数字代表true或false |
| byte | 字节型 | 1 | 0 | uint8别名 |
| rune | 字符类型 | 4 | 0 | 专用于存储unicode编码,等价于uint32 |
| int, uint | 整型 | 4或8 | 0 | 32位或64位 |
| int8, uint8 | 整型 | 1 | 0 | -128 ~ 127, 0 ~ 255 |
| int16, uint16 | 整型 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 |
| int32, uint32 | 整型 | 4 | 0 | -21亿 ~ 21 亿, 0 ~ 42 亿 |
| int64, uint64 | 整型 | 8 | 0 | |
| float32 | 浮点型 | 4 | 0.0 | 小数位精确到7位 |
| float64 | 浮点型 | 8 | 0.0 | 小数位精确到15位 |
| complex64 | 复数类型 | 8 | ||
| complex128 | 复数类型 | 16 | ||
| uintptr | 整型 | 4或8 | ⾜以存储指针的uint32或uint64整数 | |
| string | 字符串 | “” | utf-8字符串,注意字符串的零值是 “” |
unicode 编码集(规定了字符的数字编码) UTF8 为 unicode 的具体实现方案之一(规定了数字编码的实际存储方案)
bool
bool只有两个值,
- true
- false
注意: 整形无法做类型转换,成为 bool
package mainimport "fmt"func main() {c := bool(1)fmt.Println("c := ", c)}
输出
D:\projects\gocode\go100\breakdemoλ go run main.go# command-line-arguments.\main.go:7:11: cannot convert 1 (type untyped int) to type bool
字符串
字符串就是一串固定长度的字符连接起来的字符序列。 go的字符串是由单个字节连接起来的。go语言的字符串的字节是使用 utf8 编码的 unicode文本
- 使用双引号
- 字符串可以有一个或者多个字符组成
- 字符串都是隐藏了一个结束符
\0 - 支持原字符

x4F60 x597D , x4E16 x754C;
编码参考 unicode utf8 ascii https://www.zhihu.com/question/23374078
func main() {str := "你好,世界" // 你好,世界fmt.Printf("str len is: %d\n", len(str))}// str len is: 13
utf8编码介绍
utf8编码规则
根据上表,解读 UTF-8 编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
下面,还是以汉字严为例,演示如何实现 UTF-8 编码。严的 Unicode 是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800 - 0000 FFFF),因此严的 UTF-8 编码需要三个字节,即格式是1110xxxx 10xxxxxx 10xxxxxx。然后,从严的最右边二进制位开始,依次从右往左填入上边格式中的x,多出的位补0。这样就得到了,严的 UTF-8 编码是11100100 10111000 10100101,转换成十六进制就是E4 B8 A5。
例子
func TestStringToRune(t *testing.T) {s := "中华人民共和国"for _, c := range s {t.Logf("%[1]c %[1]x", c)}}// output:// 中 4e2d// 华 534e// 人 4eba// 民 6c11// 共 5171// 和 548c// 国 56fd
字符与字符串区别
如下代码
import "fmt"func main() {var ch bytevar str stringch = 'a'fmt.Println(ch)str = "a"fmt.Println(str)}/*output97a*/
type 关键字
Type关键字在Go中作用非常重要,比如:
- 定义结构体
- 定义接口
- 自定义类型
- 定义类型别名
自定义类型由一组值以及作用于这些值的方法组成,类型一般有类型名称,往往从现有类型组全通过type关键字构造出来一个新的类型
复杂类型
stuct
package mainimport ("fmt")func main() {type Person struct{}var p Personfmt.Printf("p type is : %T, value is: %v", p, p)}
输出
D:\projects\gocode\go100\breakdemoλ go run main.gop type is : main.Person, value is: {}
