Go - 13 Go 数据类型

分为两种类型:
1.基本数据类型
        数值型:整数类型(有符号:int ; 无符号:uint;注意保小不保大),浮点类型(单精度float32/ 双精度float64  都是有符号的,精度有损失,float64精度比float32高;注意默认为float64 ,一般推荐使用float64, 精度更高)
        字符型:byte(Go语言的字符使用UTF-8编码 英文字母-1个字节,汉字-3个字节;在Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值即:var c1 byte = "a" var c2 int = "北"  可以通过格式化 %c 来输出; 
                字符型存储到计算机中:utf-8 (unicode码)包含 ascii码
                    存储:字符--->对应码值---->二进制---->存储
                    读取:二进制--->码值--->字符---->读取
                )
        布尔型:bool(只允许取值true和false; 占一个字节)
        字符串:string(在go中字符串是不可变的;且可以使用双引号也可以使用反引号,反引号会输出源码)
基本数据类型默认值:
        int           0
        float32    0
        float64    0
        bool        false
        string      ""
同基本数据类型转换:
        表达式:T(v)将值 v 转换为类型 T
        T 就是数据类型 比如:int32  int64 float32等等
        v 就是需要转换的变量;
        注意:被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!
        var i int8 = 100
        var num int32 = int32(i)
        // i 找个变量的类型还是 int8  而num的类型为 int32
        低精度--->高精度的
基本数据类型 与 string 互转
        int -%d float-%f  bool-%t byte-%c (具体%后跟什么可以看文档) 转  string
        1)fmt.Sprintf()  生成格式化字符串并返回字符串
                var num1  int = 99
                var str  string
                str = fmt.Sprintf("%d", num1)
                // str type string str==99  ; %q -->可以打印出 "99"
                fmt.Printf("str type %T str==%v", str, str)  
        2) strconv 包里的函数
                str = strconv.FormatInt(num1, 10)  // 第一个是变量,第二个是十进制
                str = strconv.Itoa(num1) // 这个很方便,但是得强转为 int
                strconv.FormatFloat()  // 参数比较多可以查看文档
                strconv.FormatBool()  // z只传 bool值的变量即可
 
        string 转 int  float bool byte
        1)strconv包里的 函数
                var str string = "true"
                var b bool
                // 会返回两个值:第一个是bool值,第二个err值 可以使用 _ 忽略
                b, _ = strconv.ParseBool(str)
                strconv.ParseInt()  // 参数参考文档
                strconv.ParseFloat() 
        注意:无法转成功则会使用默认值 即 0 false 等
2.派生/复杂数据类型()
        指针及其内存布局:
            1)基本数据类型,变量存的就是值,也叫值类型;
            2)获取变量的地址;可以通过 var i int = 10  fmt.Println("i 的地址==", &i)  ;   通过 &i 来查看变量i的内存的地址;
            3)指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值,比如 var ptr *int = &i ; 那这个ptr就是指针变量;ptr的类型 *int ; ptr的值就是&i(即内存地址)
            4)获取指针类型所指向的值,使用* ;比如 var ptr *int ,使用 *ptr 获取ptr指向的值,可以理解先取出ptr的值(内存地址),再根据值(内存地址)取出 值(变量的值)
            注意:指针变量类型和变量类型要保持一致
            值类型,都有对应的指针类型,形式为:*数据类型 比如int的对应的指针就是 *int ,float32 对应的指针类型就是 *float32 ,依次类推;
            值类型包括:基本数据类型int系列,float系列,bool , string, 数组和结构体struct
            应用类型:指针,slice切片,map,管道chan,interface等
            值类型和应用类型的使用特点:
                1)值类型,变量直接存储值,内存通常在栈中分配
                2)应用类型,变量存储的是一个地址,这个地址对应的空间才正真存储数据值,内存通常在堆中分配;
        数组
        结构体
        管道
        函数
        切片
        接口
        map
 
后续会补充完整
posted @ 2020-11-03 10:10  以赛亚  阅读(115)  评论(0编辑  收藏  举报