• 忽然之间
    2019-03-16
    今日总结:

    ### 基本数据类型
    ```go
    // 整型
    int int8 int16 int32 int64

    // 无符号整型
    uint uint8 uint16 uint32 uint64

    // 浮点类型
    float32 float64

    // 复数
    complex64 complex128

    // 布尔类型
    bool

    // 字符
    string

    // 字节,uint8的别名
    byte

    // int32
    //表示一个Unicode 码点

    rune
    ```

    ### 零值

    > 当一个变量或者新值被创建时, 如果没有为其明确指定初始值,go语言会自动初始化其值为此类型对应的零值, 各类型零值如下:

    ```
    bool :false

    integer :0

    float :0.0

    string:""

    pointer, function, interface, slice, channel, map:nil

     
    ```

    对于复合类型, go语言会自动递归地将每一个元素初始化为其类型对应的零值。比如:数组, 结构体 。


    ### 整型占用字节问题

    int,uint整型:和机器平台有关,最小32位,占用4字节,64位,占用8字节。


    ### 类型转换

    不支持不同类型之间隐式转换,即便是类型别名和同类型之间也不行。


    ### 数值范围
    类型 | 长度(字节) | 数值范围
    --- |--- |---
    int8 | 1 | -128~127 (-2^(8-1) ~ 2^7-1)
    uint8 | 1 | 0~255 (0 ~ 2^8-1)
    int16 | 2 | -32768~32767
    uint16 | 2 | 0~65535
    int32 | 4 | -2^31 ~ 2^31-1 (-2147483648~2147483647)
    uint32 | 4 | 0~2^32-1 (0~4294967295)
    int64 | 8 | -2^63 ~2^63-1
    uint64 | 8 | 0~2^63

    ### int占用字节数测试
    ```go
    //
    //机器位数
    cpu := runtime.GOARCH
    //int占用位数
    int_size := strconv.IntSize
    ```

    ### string类型

    string 是值类型。默认初始化值是空字符串,不是nil(string类型零值为空字符串)
    ```go
    func TestString(t *testing.T) {

        var s string
        t.Logf("%T %q", s, s) //string ""
    }
    ```
    展开

    作者回复: 赞!

     1
     8
  • 行军伙夫
    2019-03-12
    我想了解一下 a, b = b, a 这个是如何进行交换的 有点不太明白
     1
     5
  • 熊大棒@KONAKONA
    2019-04-30
    做为一个资深的码农,怎么能够写代码这么磨蹭,而且还频繁打错基础单词呢?看着特别闹心(一个10年的Coder留言)……
    
     3
  • 静水流深
    2019-07-16
    老师,是否可以这样理解:
    type myInt = int ,指的是别名类型,与源类型是相同的类型;
    type myInt int ,指的是类型再定义,与源类型是不同的类型;

    作者回复: 可以这样简单理解

     1
     2
  • Ping me
    2019-12-05
    int和unit占多少字节是跟操作系统多少位有关对吗

    作者回复: 对。

    
     1
  • Ak
    2019-03-14
    两个个注意点:
    1.相同数值类型长度的变量之间不可以赋值或运算操作,不然报错;如:

    var a int
    var b int32
    c := a + b

    2.浮点型类型只有 float32 和 float64 ,并没有 float 类型。

    展开
     1
     1
  • 中年男子
    2019-03-06
    请问func TestXxx(t *testing.T)中 t是变量名,*testing.T是类型,那这是个什么类型呢?指针?T是testing包中的一个类型,*testing.T就是这个T类型的指针?您能说明一下怎么理解这个类型吗?

    作者回复: 是testing这个包中T类型的指针类型。
    testing这个包,在后面“测试”课程中,我们还会讲到

    
     1
  • fatty Jack
    2019-03-05
    老师请问下,下面t *testing.T这个参数写法怎么解释? t是变量名? *testing.T是变量类型?
    func TestXXXX(t *testing.T) {

    }
    谢谢

    作者回复: 你的理解是正确。

     1
     1
  • X中倪
    2019-07-30
    老师啊 ,有个问题,不知道答案是不是在后续章节中。
    golang中关于 “传值”还是“传引用”?
    如果是值类型,那么传递的就是“值”,
    如果是引用类型 传递的就是“引用”。
    其中还涉及到什么字典类型、通道类型、函数类型等 都会在后续章节出现吗?
    这些类型搞不懂 甚至没有听说过。 请多指教
    展开

    作者回复: go中都是传值的,至于不同类型,相关章节都有讲,可以耐心往后看

    
    
  • fanxy
    2019-07-28
    为什么老师的缩进是两个字符,go 的规范是两个字符还是四个字符呀?
    
    
  • YI🎐
    2019-06-01
    类型别名在项目中有什么实际意义没有,只是另外取一个名字,有什么好处?

    作者回复: 这个不仅仅增加了代码的可读性,由于别名与类型也不能实现隐式转化还提高了正确性。同时,你也可以为你的别名类型定义新的方法。

     1
    
  • 熊大棒@KONAKONA
    2019-04-30

    这里有一个type MyInt很关键的地方没有提出解释,我做了一下简单的断点输出。简单来说,MyInt无论定义的是什么类型,都不是该类型。这里定义的是int64类型,但并不是int64类型,而是MyInt类型。在你的意识里,你认为这是int64的MyInt类型,但是机器并不这么认为。

    代码如下:

    package test

    import (
        "fmt"
        "testing"
    )

    type MyInt int64

    func TestWhat(t *testing.T) {
        var a int32 = 1
        var b int64
        b = int64(a)

        var c MyInt
        const f = "%T(%v)\n"
        fmt.Printf(f, c, c)
        fmt.Printf(f, b, b)
        c = MyInt(b)
        fmt.Printf(f, c, c)
    }


    输出结果如下:
    KONAKONAs-MAC:test mac$ go test
    test.MyInt(0)
    int64(1)
    test.MyInt(1)
    PASS
    ok _/Users/mac/Documents/GoLearning/src/ch1/types/test 0.006s


    展开
    
    
  • ___
    2019-03-15
    type MyInt int
    这个MyInt不是应该为新定义的类型吗?

    type MyInt = int
    这样是可以相互赋值的

    作者回复: 是定义一个MyInt类型,其实就是给int起个别名。

    
    
我们在线,来聊聊吧