• golang基本数据类型


    数据类型介绍#

    Go语言中的数据类型分为:基本数据类型和复合数据类型

    • 基本数据类型:整型、浮点型、布尔型、字符串

    • 复合数据类型:数组、切片、结构体、函数、map、通道(channel)、接口等

    基本数据类型:#

    整型#

    整型分为两个大类:

    • 有符号整型按长度分为:int8、int16、int32、int64
    • 对应的无符号整型:uint8、uint16、uint32、uint64
    • image-20240218175158230

    特殊整型:

    image-20240218180702269

    // 定义int类型
    var num int = 10
    
    var number int  // 默认值为0
    
    // 转换为 int32
    var b  = int32(num)
    
    
    
    浮点型#

    Go语音支持两种浮点型,数据格式遵循IEEE 754标准

    • float32:最大的范围约为-3.4e38~3.4e38,可以使用math.MaxFloat32定义

    • float64:最大的范围约为-1.8e308~1.8e308,可以使用math.MaxFloat64定义

    • import (
      	"fmt"
      	"math"
      )
      
      func main() {
      
      	fmt.Println(-math.MaxFloat32)
      	fmt.Println(math.MaxFloat32)
      	fmt.Println(-math.MaxFloat64)
      	fmt.Println(math.MaxFloat64)
      
      }
      
      

    定义浮点型

    func main() {
    
    	var a float32 = 3.12 // 占用4个字节
    	var b float64 = 5.12 // 占用8个字节
      var c float // 默认值为0
    
    	fmt.Println(a)
    	fmt.Println(b)
    }
    

    格式化输出

    func main() {
    	var a float32 = 3.123123623
    	fmt.Printf("%f", a)   // 默认保留6位小数且四舍五入,3.123124
    	fmt.Printf("%.2f", a) // 默认保留2位小数且四舍五入 3.12
      
    
    
    	var fn float32 = 3.14e2  // 用科学技术法表示浮点型
    	fmt.Printf("%f", fn) // 314.000000
    
    
    
    
    }
    
    

    默认浮点类型

    func main() {
     // 在32位系统中,没有显示声明,则默认是float32,在64位系统中,就是float64
    	a := 3.1233123
    	fmt.Printf("%T", a)
    
    
    

    浮点型精度丢失问题

    image-20240218184034616

    可以使用第三方包来解决精度损失问题->: https://github.com/shopspring/decimal

    布尔型#
    • 布尔类型变量的默认值为false

    • Go语言中不允许将整型强制转换为布尔型

    • 布尔型无法参与数值运算,也无法与其他类型进行转换

    var flag bool = true
    var status bool // 默认值为false
    
    字符串#

    声明字符串类型:

    func main() {
    	var work string // 默认值为空
    	var name string = "木子"  // 显示的声明字符串类型
    	var car = "梅赛德斯奔驰AMG GLE 53 Couple" // 根据表达式推导变量的类型
    	city := "Beijing" // 根据表达式推导变量的类型
    	fmt.Println(work)
    	fmt.Println(name)
    	fmt.Println(car)
    	fmt.Println(city)
    
    }
    

    字符串转义符

    通常使用/来进行字符串的特殊符号转义

    func main() {
    	// \n 表示换行
    	str1 := "this \nis str"
    	// C:\Go\bin 输出反斜杠
    	str2 := "C:\\Go\\bin"
    
    	// C:Go"bin 输出“
    	str3 := "C:Go\"bin"
    
    	fmt.Println(str1)
    	fmt.Println(str2)
    	fmt.Println(str3)
    
    }
    
    

    输出多行字符串

    使用双引号"" 只能输出一行字符串,不能输出多行,如果要输出多行,使用反引号 ``

    func main() {
    	str1 := `
       第一行内容 
       第二行内容
    `
    	fmt.Println(str1)
    }
    

    字符串的常用方法

    import (
    	"fmt"
    	"strings"
    )
    
    func main() {
    	var str1 = "this is str"
    	// 输出字符串的长度
    	fmt.Println(len(str1))
    	// 拼接字符串 使用 + 号
    	str2 := "你好"
    	fmt.Println(str2 + str1)
    
    	// 拼接字符串 使用fmt.Sprintf,fmt.Sprintf的作用是格式化字符串赋值给新串
    	str3 := fmt.Sprintf("%v %v", str2, str1)
    	fmt.Println(str3)
    
    	// strings.Split,分割字符串,需要引入strings包,Split方法第一个参数是要分割的字符串,第二个参数是以什么进行分割
    	var str4 = "123-456-789"
    	arr := strings.Split(str4, "-")
    	fmt.Println(arr) // [123 456 789] 切片数组
    
    	// strings.Join(),把一个切片连接成一个字符串 第一个参数是要连接的数组,第二个参数是以什么连接
    	str5 := strings.Join(arr, "*")
    	fmt.Println(str5) // 123*456*789
    
    	// strings.Contains(),判断一个字符串是否包含另一个字符串,包含返回true,否则false
    	str6 := "this is str"
    	str7 := "this"
    	flag := strings.Contains(str6, str7)
    	fmt.Println(flag) // true
    
    	// 	strings.HasPrefix() / 	strings.HasSuffix() 字符串前缀、后缀判断
    	str8 := "this is str"
    	str9 := "this"
    	// 判断 str8的前缀是不是str9,是则是true,否则false
    	first := strings.HasPrefix(str8, str9)
    	fmt.Println(first)
    	// 判断str8的后缀是不是str,是则是true,否则false
    	last := strings.HasSuffix(str8, "str")
    	fmt.Println(last)
    
    	//	strings.Index() / 	strings.LastIndex() 子串出现的位置
    	// 子串在str8中出现的位置,从前往后查找 查找不到返回-1
    	indexNum := strings.Index(str8, "is")
    	fmt.Println(indexNum) // 2
    	// 子串在str8中出现的位置,从后往前查找 查找不到返回-1
    	lastNum := strings.LastIndex(str8, "s")
    	fmt.Println(lastNum) // 8
    
    }
    
    
    byte和rune类型#

    组成每个字符串的元素叫做字符,可以通过遍历字符串元素获得字符,字符用单引号``包裹起来

    Go语言的字符有两种:

    • uint8类型,就是byte型,代表了ascii码的一个字符

    • rune类型,代表一个utf-8字符

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

    • 字符串中的单个字符,一个汉字占用3个字节(utf-8),一个字母占用一个字节,使用len方法的长度根据类型获取

    • Go 使用了 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理

    func main() {
    	// golang中定义字符,字符属于int类型,对应ascii码数值
    	a := 'a'
    	b := '0'
    	// 当我们直接输出字符的时候,输出的是这个字符对应的ascii码的数值
    	fmt.Println(a) // 97
    	fmt.Println(b) // 48
    
    	// 原样输出字符 使用%c格式化输出 , 相应 Unicode 码点所表示的字符
    	fmt.Printf("%c", a) // a
    
    }
    

    修改字符串

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

    func main() {
    	s1 := "big"
    	// 1.将字符串s1 转换为byte类型
    	byteStr := []byte(s1)
    
    	// 2.将byte类型的第一个字符修改为p
    	byteStr[0] = 'p'
    	// 3. 将修改后的byte转回string类型
    	fmt.Println(string(byteStr)) // pig
    
    	// 如果字符串中有中文,转换为则需要为rune类型
    	s2 := "你好golang"
    	// 1. 将s2转为rune类型
    	runeStr2 := []rune(s2)
    	// 2. 将转换后的第一个字符修改
    	runeStr2[0] = '李'
    	// 3. 将修改后的字符转回string类型
    	fmt.Println(string(runeStr2))
    
    }
    
    
    数值类型之间的转换#
    import (
    	"fmt"
    	"strconv"
    )
    
    func main() {
    
    	/*
    
    		数值类型的转换 int、float建议从低位转换成高位,如果是高位转换低位可能会溢出
    		不同的数据类型不可以进行比较、运算,会报类型错误
    
    	*/
    
    	// int类型转换
    	var int1 int8 = 10
    	var int2 int16 = 20
    	fmt.Println(int16(int1) + int2)
    
    	// 整型和浮点型转换
    	var float1 float32 = 20.312
    	fmt.Println(float32(int2) + float1)
    
    	/* 字符串转换方式一:通过Sprintf将其他类型转换为string */
    
    	var t bool = true
    	var b byte = '7'
    	// int类型转换string
    	str1 := fmt.Sprintf("%d", int1)
    	fmt.Println(str1)
    	// float类型转换string
    	str2 := fmt.Sprintf("%f", float1)
    	fmt.Println(str2)
    	// bool转换为string
    	str3 := fmt.Sprintf("%t", t)
    	fmt.Println(str3)
    	// 字符转换为string
    	str4 := fmt.Sprintf("%c", b)
    	fmt.Println(str4)
    
    	/* 字符串转换方式二: 使用strconv,需要import strconv包*/
    	var i1 int = 20
    	// 数字转换字符串
    	s1 := strconv.FormatInt(int64(i1), 10) // 第一个参数是int64的数值,第二个参数是int类型的进制
    	fmt.Println(s1)
    
    	// 浮点转字符串
    	var f1 float32 = 20.23
    	s2 := strconv.FormatFloat(float64(f1), 'f', 2, 64) // Param:要转换的值、格式化类型、保留的位数、64位or32位
    	fmt.Println(s2)
    
    	// bool转换字符串
    	s3 := strconv.FormatBool(t)
    	fmt.Println(s3)
    
    	// 字符转换字符串
    	s4 := strconv.FormatUint(uint64(b), 10) // Param:unit64的数值、输出的进制
    	fmt.Println(s4)
    
    	/* string类型转换为数值型*/
    
    	var string1 string = "10"
    	// string 转换为int 返回值有两个,结果和错误
    	num1, _ := strconv.ParseInt(string1, 10, 64) // Param:字符串、进制、位数
    	fmt.Println(num1)
    
    	// string转换为float
    	var string2 string = "3.14"
    	float2, _ := strconv.ParseFloat(string2, 64) // Param:字符串、位数
    	fmt.Println(float2)
    
    }
    
  • 相关阅读:
    文件操作【详解】
    Java并发和多线程编程学习(一) 并发初探和底层原理
    MySQL数据库索引以及使用唯一索引实现幂等性
    LeetCode——贪心篇(一)
    【Django入门】第一个Django项目
    vue中的全局事件总线 $bus
    一文读懂K-Means原理与Python实现
    vue3实现塔罗牌翻牌
    综合案例_文件上传的原理和综合案例_文件上传案例的客户端
    深圳SMT贴片行业MES系统解决方案~MES系统服务商~先达智控
  • 原文地址:https://www.cnblogs.com/Mickey-7/p/18021432