请关注我的个人博客
Go开发入门
变量的定义,赋值
变量声明:Go的变量名首字母不能为数字
未初始化的变量声明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15var 变量名 变量类型
var a int // 声明 int 类型的变量
var b [10] int // 声明 int 类型数组
var c []int // 声明 int 类型的切片 [] 内赋初值是数组,不赋值是切片
var d *int // 声明 int 类型的指针
打印结果为
//a={0},b={[0 0 0 0 0 0 0 0 0 0]},c={[]},d={<nil>}
那么未初始化的变量默认值为:
整型和浮点型变量: 0
字符串: 0
布尔: false
函数,指针: nil
初始化的变量声明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15var 变量名 变量类型 = 表达式
var a int = 10
//编译器自动推断格式
var 变量名 = 表达式
//简短声明格式(短变量声明格式)
变量名 := 表达式
:= 可以高效的创建新变量,在内存中开辟空间
var 省略
编译器自动推断类型
声明变量首选这种形式
只能用在函数体内,不能作为全局变量来声明
变量名不能是被定义过的,不然会报错变量多重赋值
1 | go可以进行多变量赋值,变量与变量之间逗号隔开 |
匿名变量
1
主要用于函数返回值,返回我们需要的字段
数据类型
- 布尔型
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 - 数字类型
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。 - 字符串类型:
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。 - 派生类型:
1
2
3
4
5
6
7
8
9包括:
(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型
更详细的可以参考这篇博文,写的非常详细
格式化输出语句
通用
1
2
3
4%v value,值的默认表示
%+v 类似%v,但输出结构体时会添加字段名
%#v 值的 Go 语法表示
%T 值的数据类型Go语法表示,如: int , string等布尔
1
%t true或false
整数
1
2
3
4
5
6
7
8
9
10%b 二进制表示
%c 相应Unicode码点所表示的字符
%d 十进制表示
%8d 整形长度为8,不足8则在数值前补空格 超出以实际为准
%08d 数字长度是8,不足8位的,数字前补0 超出以实际为准
%o 八进制表示
%q 单引号围绕的字符字面值,由Go语法安全地转义
%x 十六进制表示,字母形式为小写 a-f
%X 十六进制表示,字母形式为大写 A-F
%U Unicode格式:U+1234,等同于 "U+%04X"浮点,复数
1
2
3
4
5
6%b 无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat中的 'b' 转换格式一致。例如 -123456p-78
%e 科学计数法,例如 -1234.456e+78
%E 科学计数法,例如 -1234.456E+78
%f 有小数点而无指数,例如 123.456
%g 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出
%G 根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出字符串和bytes的slice表示:
字符串或切片的无解译字节 1
2
3%q 双引号围绕的字符串,由Go语法安全地转义
%x 十六进制,小写字母,每字节两个字符
%X 十六进制,大写字母,每字节两个字符指针:
1
2
3
4
5
6
7
8
9
10
11
12%p 十六进制表示,前缀 0x
这里没有 'u' 标记。若整数为无符号类型,他们就会被打印成无符号的。类似地,这里也不需要指定操作数的大小(int8,int64)。
对于%v来说默认的格式是:
bool: %t
int, int8 etc.: %d
uint, uint8 etc.: %d, %x if printed with %#v
float32, complex64, etc: %g
string: %s
chan: %p
pointer: %p
由此可以看出,默认的输出格式可以使用%v进行指定,除非输出其他与默认不同的格式,否则都可以使用%v进行替代(但是不推荐使用)对于复合对象:
1
2
3
4
5里面的元素使用如下规则进行打印:
struct: {field0 field1 ...}
array, slice: [elem0 elem1 ...]
maps: map[key1:value1 key2:value2]
pointer to above: &{}, &[], &map[]宽度和精度:
1
2
3
4
5
6
7宽度是在%之后的值,如果没有指定,则使用该值的默认值,精度是跟在宽度之后的值,如果没有指定,也是使用要打印的值的默认精度.例如:%9.2f,宽度9,精度2
%f: default width, default precision
%9f width 9, default precision
%.2f default width, precision 2
%9.2f width 9, precision 2
%9.f width 9, precision 0
这里有一些练习
弟弟从事java开发,学习go纯属个人爱好,喜欢go的语法和特点,点击这里移步我的个人博客