乔克视界 乔克视界
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档

乔克

云原生爱好者
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档
  • Docker

  • Golang

    • Golang基础知识

      • 开发环境搭建
      • 常量与变量
      • 基本数据类型
        • 复合数据类型
        • 流程控制
        • 运算符
        • 位运算符详解
        • 指针
        • map
        • 函数
        • defer
        • 类型别名与自定义类型
        • 结构体
        • 接口
        • 包
        • 文件操作
        • 反射
        • 并发
        • socket网络编程
        • HTTP网络编程
        • 单元测试
        • 基准测试
        • 并发测试
        • 示例函数
        • 性能优化
        • go module
        • 在Go中使用Makefile
        • 部署Go项目
      • Golang进阶知识

      • Golang常用包

    • AIOps

    • 专栏
    • Golang
    • Golang基础知识
    乔克
    2025-07-13
    目录

    基本数据类型

    # 整型

    • 有符号
      • int8
      • int16
      • int32
      • int64
    • 无符号
      • uint8
      • uint16
      • uint32
      • uint64
    • 特殊整型
      • uint,32 位操作系统就是 uint32,64 位操作系统就是 uint64
      • int,32 位操作系统就是 int32,64 位操作系统就是 int64
      • uintptr,无符号整型,用于存放指针

    注意:在使用int和 uint类型时,不能假定它是 32 位或 64 位的整型,而是考虑int和uint可能在不同平台上的差异。

    # 进制

    // 程序入口
    func main() {
    	// age = "17"
    	// fmt.Println("Hello World")
    	// fmt.Print("isOK")
    	// fmt.Printf("Age: %s", age)\n
    	var a1 = 10
    	fmt.Printf("十进制:%d\n", a1)
    	fmt.Printf("二进制:%b\n", a1)
    	fmt.Printf("八进制:%o\n", a1)
    	fmt.Printf("十六进制:%x\n", a1)
    
    	// 直接定义八进制
    	a2 := 077
    	fmt.Printf("直接声明八进制:%d\n", a2)
    	// 直接定义十六进制
    	a3 := 0x12321
    	fmt.Printf("直接声明十六进制:%d\n", a3)
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    # 浮点型

    Go 语言支持两种浮点型:

    • float32,使用常量 math.MaxFloat32 来定义;
    • float64,使用常量 math.MaxFloat64 来定义;

    打印浮点数,可以用 fmt 包配合%f ,如下:

    package main
    import (
            "fmt"
            "math"
    )
    func main() {
            fmt.Printf("%f\n", math.Pi)
            fmt.Printf("%.2f\n", math.Pi)
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 布尔类型

    Go 语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值。

    注意:

    1. 布尔类型变量的默认值为false。
    2. Go 语言中不允许将整型强制转换为布尔型.
    3. 布尔型无法参与数值运算,也无法与其他类型进行转换。

    # 复数

    复数有实部和虚部,complex64 的实部和虚部为 32 位,complex128 的实部和虚部为 64 位。如下:

    func main(){
        var c1 complex64
    	c1 = 1 + 2i
    	var c2 complex128
    	c2 = 2 + 3i
    	fmt.Println(c1)
    	fmt.Println(c2)
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 子符串

    Go 语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(")中的内容,可以在 Go 语言的源码中直接添加非 ASCII 码字符,例如:

    s1 := "Joker"
    s2 := "HelloWorld"
    
    1
    2

    如果是多行字符串,则是用反引号,它里面的内容会原样输出,比如:

    s1 := `
    	你好,
    	欢迎光临。
    `
    
    1
    2
    3
    4

    # 字符

    组成每个字符串的元素叫做字符 ,字符 用'' 括起来,如下:

    s1 := 'H'
    s2 := '你'
    
    1
    2

    Go 语言中的字符有两种:

    • uint8 类型,或者叫 byte 型,代表ASCII 码的一个符号;
    • rune 类型,代表一个UTF-8 符号;

    当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。

    Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

    package main
    
    import "fmt"
    
    func main() {
    	s1 := "Hello World,你好啊!"
    	// fmt.Printf(s1)
    	// 遍历字符串,Byte类型
    	for i := 0; i < len(s1); i++ {
    		fmt.Printf("%v(%c)", s1[i], s1[i])
    	}
    	fmt.Println()
    	// 遍历字符串,rune类型
    	for _, r := range s1 {
    		fmt.Printf("%v(%c)", r, r)
    	}
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    其输出结果如下:

    72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)239(ï)188(¼)140()228(ä)189(½)160( )229(å)165(¥)189(½)229(å)149(
    )138()239(ï)188(¼)129()
    ===============================================
    72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)65292(,)20320(你)22909(好)21834(啊)65281(!)
    
    1
    2
    3
    4

    从上可以看到,第一种遍历方法是按字节进行遍历的,而对于非英文字母或者数字来说,其占用的并非一个字节,比如中文在UTF-8 编码中就占用 3 个字节,这时候如果我们按着字节来遍历就会得到第一种结果,这种结果并不是我们想要的。我们就需要采用第二用遍历方式,rune 类型用来 表示UTF-8 字符,一个 rune 字符由一个或者多个字节组成。

    # 字符串转义

    特殊字符串需要保持其原生的意义,就需要对其进行转义,常用的如下表:

    转义符 含义
    \r 回车
    \n 换行
    \t 制表
    ' 单引号
    \ 反斜杠
    " 双引号

    比如:

    package main
    
    import "fmt"
    
    func main() {
    	s1 := "\"Hello World\""
    	fmt.Printf(s1)
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 字符串的常用操作

    方法 作用
    len(s) 求长度(是字节的长度)
    +或者 fmt.Sprintf 字符串拼接
    strings.Split 字符串切割
    strings.contains 判断字符串中是否包含
    strings.HasPrefix,strings.HasSuffix 判断字符串的前缀/后缀(布尔类型)
    strings.Index(),strings.LastIndex() 输出子串出现的位置(索引)
    strings.Join(a[]string, sep string) join 操作

    例子:

    package main
    
    import "fmt"
    import "strings"
    
    func main() {
    	s := "Hello World 你好啊!"
    	// 求长度
    	fmt.Println(len(s))
    	// 字符串拼接
    	s1 := "Joker"
    	s2 := "你好"
    	fmt.Println(s1 + s2)
    	s12 := fmt.Sprintf("%s%s", s1, s2)
    	fmt.Println(s12)
    	// 字符串切割
    	sSplit := strings.Split(s, " ")
    	fmt.Println(sSplit)
    	// 判断字符串是否包含
    	fmt.Println(strings.Contains(s, "H"))
    	fmt.Println(strings.Contains(s, "L"))
    	// 判断字符串的前缀
    	fmt.Println(strings.HasPrefix(s, "H"))
    	// 判断字符串的后缀
    	fmt.Println(strings.HasSuffix(s, "啊"))
    	// 判断字串出现的位置
    	fmt.Println(strings.Index(s, "H"))
    	// 判断子串最后出现的位置
    	fmt.Println(strings.LastIndex(s, "o"))
    	// join操作
    	fmt.Println(strings.Join(sSplit, "-"))
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    # 字符串的修改

    要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。

    package main
    
    import "fmt"
    
    func main() {
    	s1 := "hello"
    	// 1、强制转换
    	byteS1 := []byte(s1)
    	// 2、进行修改
    	byteS1[0] = 'H'
    	// 3、强制转换成字符串并打印
    	fmt.Println(string(byteS1))
    
    	s2 := "我爱你中国"
    	// 1、强制转换
    	runeS2 := []rune(s2)
    	// 2、修改
    	runeS2[3] = '祖'
    	// 3、强制转换成字符串并打印
    	fmt.Println(string(runeS2))
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    # 类型转换

    Go 语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

    强制类型转换的基本语法如下:

    T(表达式)
    
    1

    其中,T 表示要转换的类型。表达式包括变量、复杂算子和函数返回值等.

    上次更新: 2025/07/18, 11:04:43
    常量与变量
    复合数据类型

    ← 常量与变量 复合数据类型→

    最近更新
    01
    2025年,SRE在企业中可以做哪些事
    07-18
    02
    SRE 如何提升自己在团队中的影响力
    07-18
    03
    使用Go开发MCP服务
    07-18
    更多文章>
    Theme by Vdoing | Copyright © 2019-2025 乔克 | MIT License | 渝ICP备20002153号 |
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式