• go-08-基本数据类型-字符串和布尔值


    一、字符

    Go 中,独立的字母、数字和符号被统称为字符。
    通过拼接多个字符并使用双引号包裹起来,就得到了字符串字面量,在 Go 中使用 string 表示。

    独立的字符需要使用英文的单引号包裹起来,就像下面的代码里一样:

    var w = 'a'
    
    • 1

    代码点

    实际上计算机存储字符、符号和表情的时候,存储的是它们对应的一个到多个数字,这些数字称为 代码点。

    统一码联盟(Unicode Consortium)定义了每个字符对应的代码点。
    例如,大写字母 A 对应的代码点为 65,表情😃 对应的代码点为 128515。
    这些可以使用格式化输出中的 %c%v 来验证。

        fmt.Printf("%c %[1]v\n", 'A') // A 65
        fmt.Printf("%c %[1]v\n", '😃') // 😃 128515
    
    • 1
    • 2

    rune 类型

    Go 中使用 rune(符文)类型用于表示单个Unicode 的代码点,该类型是 int32 类型的别名。

        var pi rune = 960
        var alpha rune = 940
        fmt.Printf("%v -> %[1]c \n%v -> %[2]c\n", pi, alpha)
    
    • 1
    • 2
    • 3

    以上代码将会输出

    960 -> π 
    940 -> ά
    
    • 1
    • 2

    实际上二进制数据可以使用 byte 类型表示,它是 uint8 类型的别名。
    byte 也可以表示 美国信息交换标准代码(ASCII)中的英文字符(总供 128个字符,包含了英文标点符号)。

        var bang byte = 33
        fmt.Printf("%v -> %[1]c\n", bang) // 33 -> !
    
    • 1
    • 2

    实际上 Go 提供了相应的字符字面量句法,可以直接使用单引号包裹单个字符,这样 Go 会自动推导出其类型为 rune

        pi1 := 'π'
        var pi1 = 'π'
        var pi1 rune = 'π'
    
    • 1
    • 2
    • 3

    实际输出时,类型会显示 int32

    二、字符串

    1 声明 string

    默认情况下,Go 会把双引号包裹起来的字面值推断为 string 类型。
    如下代码的作用是一样的:

    s = "Go"
    var s = "Go"
    var s string = "Go"
    
    • 1
    • 2
    • 3

    2 零值

    字符串的零值是 ""

    var blank string
    
    • 1

    3 原始字符串字面量

    若果你执行打印出 \n 而不是打印新的一行,需要使用反引号 ``

    fmt.Println("hello\nworld")
    fmt.Println(`hello\nworld`)
    
    • 1
    • 2

    如上代码谁打印出如下内容:

    hello
    world
    hello\nworld
    
    • 1
    • 2
    • 3

    这种反引号的方式,可以让原始字符串字面量实现跨越多个文本行。

    fmt.Println(`
            hello
            world
    `)
    
    • 1
    • 2
    • 3
    • 4

    这会输出

            hello
            world
        
    
    • 1
    • 2
    • 3

    使用场景,Windows 系统的文件路径就非常适合使用原始字符串字面量。

    path := `C:\go`
    fmt.Println(path)
    
    • 1
    • 2

    4 获取字符串中的字符

    字符串可以使用字符在字符串中的索引来获取到这个字符,但是无法修改字符串。

        msg := "hello"
        c := msg[3]
        fmt.Printf("字符字面值是%c 代码点是%[1]v\n",c) // 字符字面值是l 代码点是108
    
    • 1
    • 2
    • 3

    实现把小写字母转换为大写的程序

        c := 'g'
        c = c - 'a' + 'A'
        fmt.Printf("%v - %v + %v\n", 'g', 'a', 'A') // 103 - 97 + 65
        fmt.Printf("%c %[1]v\n", c) // G 71
    
    • 1
    • 2
    • 3
    • 4

    二、布尔值 bool

    布尔值的取值返回只有 truefalse

        t := true
        f := false
        fmt.Printf("%v %[1]T\n", t) // true bool
        fmt.Printf("%v %[1]T\n", f) // false bool
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    C++数组类的自实现,使其可以保存学生成绩,并进行降序排列
    uniapp app获取keystore等一系列常用数据
    【低代码】ivx详解之系统架构
    Airpods的电池健不健康不直观,但例行检查很重要!如何检查Airpods的电池健康状况
    IEEE Transactions on Industrial Electronics工业电子TIE修改稿注意事项及提交须知
    Azides-PEG-PLGA 叠氮-聚乙二醇-聚乳酸-羟基乙酸共聚物 的参数信息
    线上JVM thread 3000+ 未OOM的思考
    [附源码]Python计算机毕业设计Django的中点游戏分享网站
    Centos7下载安装Tomcat应用服务器
    react-antd项目,一个多tab页面,共用一个title相同的table表格,并且在切换tab时实现数据更新
  • 原文地址:https://blog.csdn.net/qq_22648091/article/details/126820375