zoukankan      html  css  js  c++  java
  • Go之基本数据类型

    一、整形

    Go语言里支持有符号和无符号两种整型。这里的符号就是正负号。

    1、分类:

    有符号的整型:int , int8 , int16 , int32 , int64

    无符号的整型:uint,uint8,uint16,uint32,uint64 其它:uintptr(指针小节单独介绍)

    2、说明:

    ①8,16,32,64表示的是二进制数,即整型大小,1个字节(字节叫byte)= 8bits(1bit就是一位二进制)

    ②int/uint比较特殊,它会根据不同的系统进行匹配,比如64位系统他就会存成64位的整型,32位系统它就会存成32位的整型,但是需要强调的是:int类型和int64或者int32不是同类型,不能直接进行运算。

    3、范围:

    二、浮点型

    1、分类:

    float32 ,float64

    2、说明:

    float32,可以显示8位,精确到7位(含整数位),如下:

    var a float32 = 123456.785
    fmt.Println(a)   # 结果:123456.78
    ​
    var a float32 = 1.23456785
    fmt.Println(a)   # 结果:1.2345679

    float64,可以显示17位,精确到16位(含整数位)

    三、复数类型

    我们把形如a+bi(a叫做复数的实部,b叫做复数的虚部,a、b的类型皆为浮点型,i是虚数单位)的数称为复数。

    1、分类:

    complex64(complex64里,a,b皆是float32) complex128(complex64里,a,b皆是float64)

    2、定义:

    var v1 complex64       # 初始值为(0+0i)
    v2 := 3.2 + 12i        # 不指定类型的,默认是complex128
    v3 := complex(3.2,12)  # complex128

    四、bool类型

    bool类型很简单,就两个值,true、false。支持逻辑运算:

    true || false   #  true
    true && true  # true
    !true            # false

    五、字符串类型

    1、分类:

    string类型有两种表示方法,一种就用双引号引起来(”“),一种是用反引号引起来(``)

    2、说明:

    虽然 “”,``都可以表示字符串,但两者之间也有区别 先说“”,这样的字符串叫做解释型字符串,字符串里可以使用转义符号“”,常用转义字符如下:

    
         换行
    
         回到行首
    "     双引号
    \     反斜杠

    再说``,这样的字符串叫做非解释型字符串,非解释型字符串不支持转义符号,会原样输出引号内的内容,包括换行、空格等等。

    3、字符串的操作

    ①字符串逻辑比较

    支持 !=, == , > , < 

    ②字符串拼接

    用“+”,“+=”进行字符串拼接

    ③字符串输出格式化

    通过使用fmt.Printf("")来实现字符串输出时的格式化,实现如下:

    var a int = 520
    fmt.Printf("xxx,%d",a)  # 结果:"xxx,520"

    其中%d用来占位,a用来传值给%d 其它常用指令符如下:

    ④获取字符串字节长度

    使用len(字符串)获取:
    fmt.Println(len("wo我"))   # 中文占3个字节,所以结果是5

    按索引访问字符串字节

    字符串“wo我”,长度为5,即5个字节,“w“”o“分别占一个字节,”我“占3个字节。字符串会按照字节,从前到后依次用索引标记,第一个字节为0,第二个字节为1,以此类推。

    我们可以通过索引访问到指定字节。如下:(得到的是utf-8的十进制表示)

    var a = "wo我"
    ​
    fmt.Println(a[0])     # 结果是119,119是“w”的utf-8编码的十进制表示
    fmt.Println(a[2])     # 结果是230,“我”占3个字节,230是我的第一个字节

    字符串切片操作

    形如:字符串[起始字节索引:结束字节索引]。省略起始索引,默认就从0开始,省略结束索引,默认就以最后一个索引结束。这样我们可以得到一个新的字符串。

    强调:1、索引是按字节标记的;2、[起始索引:终止索引]是顾头不顾尾,或者说左闭右开。

    var a = "我很帅"
    var b = a[0:3]
    fmt.Println(b)    # 结果:"我",[0:2]刚好切出了表示"我"的三个字节
    var c = a[3:]
    fmt.Println(c)    # 结果:"很帅",结束索引被省略,默认切到最后
    var d = a[:3]
    fmt.Println(d)    # 结果:"我",起始索引被省略,默认从头开始切
    var e = a[:]
    fmt.Println(e)    # 结果:"我很帅",都省略,默认从头切到最后

    字符串的遍历

    我们使用for i,v := range 字符串 {} 来遍历字符串

    for i,v := range "我是haha" {
        fmt.Println(i,v)
    }
    ​
    结果:0 25105    # 从0开始计数,25105是unicode中“我”的序号(十进制)
        3 26159        # 因为“我”占3个字节,所以,“是”的索引就是从3开始
        6 104           # “h”占一个字节
        7 97
        8 104
        9 97

    当然,学了printf格式化输出之后,unicode码点我们就可以用%c处理:

    for i,v := range "我是haha"{
        fmt.Printf("%d,%c
    ",i,v)
    }
    ​
    结果:0,我
         3,是
         6,h
         7,a
         8,h
         9,a

    补充:强制类型转化

    强制类型转化只适用于数字类型之间

    注意点:转化后的类型要足矣表示转化前的类型,不然结果会很奇怪

     

    strings包

    Go语言为了简化字符串的复杂操作,在标准库中提供了一个名为strings的包,里面集成了很多功能,我们直接调用就好,不需要再自己编写。

    下面我们来学习strings包中的几个常用的功能:

    ①、是否以...开头:strings.HasPrefix(str, "...")

    var str1 = "我很帅"
    fmt.Println(strings.HasPrefix(str1, ""))    # true

    ②、是否以...结尾:strings.HasSuffix(str, "...")

    var str1 = "我很帅"
    fmt.Println(strings.HasSuffix(str1, "很帅"))   # true

    ③、是否包含...:strings.Contains(str, "...")

    var str1 = "我真的很帅"
    fmt.Println(strings.Contains(str1, "真的"))   # true

    特别的:

    var str1 = "我真的很帅"
    fmt.Println(strings.Contains(str1, ""))      # true

    ④、是否包含....中任意字符:strings.ContainsAny(str, "...")

    var str1 = "我真的很帅"
    fmt.Println(strings.ContainsAny(str1, "真帅"))   # true

    特别的:

    var str1 = "我真的很帅"
    fmt.Println(strings.ContainsAny(str1, ""))      # false

    ⑤、查找....第一次出现的索引:strings.Index(str, "...")

    若存在就返回指定字符串第一个字符的索引,若不存在,就返回-1

    var str1 = "我真的真的很帅"
    fmt.Println(strings.Index(str1, "真的"))   # 3
    ​
    var str1 = "我真的真的很帅"
    fmt.Println(strings.Index(str1, "很丑"))   # -1

    ⑥、查找....最后一次出现的索引:strings.LastIndex(str, "...")

    若存在就返回指定字符串第一个字符的索引,若不存在,就返回-1,使用如下:

    var str1 = "我真的真的很帅"
    fmt.Println(strings.LastIndex(str1, "真的"))     # 9

    ⑦、字符串替换:strings.Replace(str, oldstr, newstr, n)

    oldstr表示需要被替换的字符串,newstr表示替换内容,n表示匹配个数,n为-1表示匹配所有

    var str1 = "我真的真的真的很帅"
    fmt.Println(strings.Replace(str1, "真的", "非常", 2))   # 我非常非常真的很帅
    ​
    var str1 = "我真的真的真的很帅"  
    fmt.Println(strings.Replace(str1, "真的", "非常", -1))  # 我非常非常非常很帅

    ⑧、频率统计:strings.Count(str, target)

    target表示需要统计的字符串,返回总个数

    var str1 = "我真的真的真的很帅"
    fmt.Println(strings.Count(str1,"真的"))     # 3

    小技巧(统计字符数量)

    var str1 = "我真的真的真的很帅"
    var lenStr1 = strings.Count(str1,"")   # 1

    ⑨、大小写转换

    strings.ToLower(str),全部转成小写

    strings.ToUpper(str),全部转成大写

    var str = "老王是dSB"
    fmt.Println(strings.ToLower(str))     # 老王是dsb
    fmt.Println(strings.ToUpper(str))     # 老王是DSB

    ⑩、修剪

    strings.Trim(str,target)

    strings.TrimLeft(str,target)

    strings.TrimRight(str,target)

    target是被修剪的字符串,trim用来修剪首尾,TrimLeft用来修剪首部,TrimRight用来修剪尾部。

    strings.TrimSpace(str),用来修剪首尾的空格换行

    var str = "!!!golang!!!"
    fmt.Println(strings.Trim(str,""))        # golang
    fmt.Println(strings.TrimLef(str,""))     # golang!!!
    fmt.Println(strings.TrimRight(str,""))   # !!!golang
    ​
    var str = "
    	golang
    	"
    fmt.Println(strings.TrimSpace(str))       # golang

    ⑪、分割:strings.Split(str, target)

    target是用来分割字符串的字符串,结果是以target为分隔点得到的一个slice切片

    var str = "a,b,c,d"
    fmt.Println(strings.Split(str, ","))  # [a b c d]
    ​
    var str = "我很帅"
    fmt.Println(strings.Split(str, ""))    # [我 很 帅]

    ⑫、插入:strings.Join(strslice, target)

    strslice是一个切片类型的数据,如⑪中分割所得到的,target为需要插入的字符串,得到的结果是每一个slice切片中的元素拼上插入字符串得到的新字符串

    var str = "a,b,c,d"
    var strslice = strings.Split(str, ",")     # [a b c d]
    fmt.Println(strings.Join(strslice, ","))   # a,b,c,d

    strconv包

     

  • 相关阅读:
    linux 网络编程
    linux之有名管道
    linux之无名管道
    linux进程
    Linux中的内核链表
    dell戴尔服务器配置RAID5(3块硬盘做RAID5+1块热备)(转发)
    盘点SQL on Hadoop中用到的主要技术
    垃圾回收算法
    JDK 中的监控与故障处理工具-05 (jstack)
    JDK 中的监控与故障处理工具-04 (jmap)
  • 原文地址:https://www.cnblogs.com/zhangguosheng1121/p/11453437.html
Copyright © 2011-2022 走看看