YMLiang

请关注我的个人博客

Go开发入门

变量的定义,赋值

变量声明:Go的变量名首字母不能为数字

  • 未初始化的变量声明:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
       var 变量名 变量类型
    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
    15
    var 变量名 变量类型 = 表达式
    var a int = 10

    //编译器自动推断格式
    var 变量名 = 表达式

    //简短声明格式(短变量声明格式)
    变量名 := 表达式

    := 可以高效的创建新变量,在内存中开辟空间
    var 省略
    编译器自动推断类型
    声明变量首选这种形式
    只能用在函数体内,不能作为全局变量来声明
    变量名不能是被定义过的,不然会报错
  • 变量多重赋值

1
2
3
4
5
go可以进行多变量赋值,变量与变量之间逗号隔开
a, b, c, d := 1, 2, true, "def"
fmt.Printf("a={%d},b={%d},c={%v},d={%v} \n", a, b, c, d)

a, b = b, a // a,b互换位置
  • 匿名变量

    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的语法和特点,点击这里移步我的个人博客

 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 , 总访问量为 次 。
Copyright 2018-2019 YMLiang'BLOG   |   京ICP备 - 19039949  |  载入天数...载入时分秒...