当前位置: 首页 > article >正文

golang 基本数据类型

1.  go语言的数据类型简介

golang的数据类型分为两大类,一类是基本数据类型和符合数据类型;

按照传递的内容分:传递本身数据和传递地址;

golang和java很相似,都是值传递,不过分为传递的值和传递的地址,传递地址的叫做引用传递;

2.基本数据类型

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

2.1 整数类型

(1)介绍

类型范围占用空间有无符号
int8-2^7到2^7-11个字节
int16-2^15到2^15-12个字节
int32-2^31到2^31-14个字节
int64-2^63到2^63-18个字节
uint80到2^8-11个字节
uint160到2^16-12个字节
uint320到2^32-14个字节
uint640到2^64-18个字节

        注意: 在使用 int 和 uint 类型时,不能假定它是 32 位或 64 位的整型,而是考虑 int 和 uint可能在不同平台上的差异。
        注意事项: 实际项目中整数类型、切片、 map 的元素数量等都可以用 int 来表示。
        在涉及 到二进制传输、为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使 用 int 和 uint 。

(2)整数常见的进制以及占位符表示

package main

import "fmt"

func main() {
	//二进制
	a := 0b1001
	fmt.Printf("%d \n", a)
	fmt.Printf("%b \n", a)
	//十进制
	b := 0377
	fmt.Printf("%o \n", b)
	//十六进制
	c := 0xff
	fmt.Printf("%d \n", c)
    // 显示数据的数据类型
    fmt.Printf("%T \n",c)
}

2.2 浮点数

类型存储空间范围
float324字节-3.403e38~3.403e38
float648字节-1.798e308~1.798e308
import (
	"fmt"
	"unsafe"
)

func main() {
	var float1 float32 = 1.23
	fmt.Printf("%f \n", float1) //默认保留6位小数
	fmt.Printf("%.2f \n", float1)
	//float32 占用4位,并且类型位float32
	var a float32 = 3.14
	fmt.Printf("值为%v--%f,类型%T\n", a, a, a)
	fmt.Println(unsafe.Sizeof(a)) //占4个字节
	//float64 占用8位,并且类型位float64
	var b float64 = 1.23
	fmt.Printf("值为%v--%f,类型%T\n", b, b, b)
	fmt.Println(unsafe.Sizeof(b))

}

Golang 中 float 精度丢失问题

        几乎所有的编程语言都有精度丢失这个问题,这是典型的二进制浮点数精度损失问题,在定

长条件下,二进制小数和十进制小数互转可能有精度丢失。这个问题在银行系统中特别致命。

如何解决:在java中有一个叫做bigdecimal的类可以解决这个问题,在golang中也有一个decimal可以解决这个问题

package main

import (
	"fmt"
	"github.com/shopspring/decimal"
)

func main() {
	decimal1, err := decimal.NewFromString("1129.6")
	decimal2, err := decimal.NewFromString("100")
	result := decimal1.Mul(decimal2)
	if err != nil {
		fmt.Println("转化失败:", err)
	}
	fmt.Println(result)
}

2.3 布尔类型

var fl = false
if f1 {
    fmt.Println("true")
} else {
    fmt.Println("false")
}

2.4 字符串类型

Go语言里的字符串的内部实现使用UTF-8编码。字符串的值为双引号(")中的内容

字符串处理的基本方法

package main

import (
	"fmt"
	"strings"
)

func main() {
	var str string = "hello,world"
	//len求字符串的长度
	fmt.Println(len(str))
	//fmt.sprintf拼接字符串
	fmt.Println(fmt.Sprintf("我真的%s", "帅"))
	//字符串中是否包含
	fmt.Println(strings.Contains(str, "hello"))
	//以,分割字符串
	fmt.Println(strings.Split(str, ","))
	arr := []string{"hello", "world"}
	//拼接字符串,sep什么为间隔
	fmt.Println(strings.Join(arr, ","))
	//是否有后缀
	fmt.Println(strings.HasSuffix(str, "world"))
	//是否有前缀
	fmt.Println(strings.HasPrefix(str, "hello"))
	//子字符串最开始出现的位置
	fmt.Println(strings.Index(str, "ell"))
	//子字符串最后开始出现的位置
	fmt.Println(strings.LastIndex(str, "l"))
}

2.5字符

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

Go语言中的字符有以下两种类型

uint8类型:或者叫byte型,代表了ACII码的一个字符
rune类型:代表一个UTF-8字符
当需要处理中文,日文或者其他复合字符时,则需要用到rune类型,rune类型实际上是一个int32

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

需要注意的是,在go语言中,一个汉字占用3个字节(utf-8),一个字母占用1个字节

package main

import "fmt"

func main() {
	var a byte = 'a'
	fmt.Println(a)
	fmt.Printf("%c \n", a)
	s := "你好,golang"
	//使用len 循环相当于打印的是ascii码
	for i := 0; i < len(s); i++ {
		fmt.Printf("%v(%c)\t", s[i], s[i])
	}
	//通过rune打印的是 utf-8字符
	for i, i2 := range s {
		fmt.Println(i, i2)
	}

	s1 := "golang"
	byte1 := []byte(s1)
	byte1[0] = 'o'
	fmt.Println(string(byte1))

	s2 := "你好,世界"
	byte2 := []rune(s2)
	byte2[0] = '不'
	fmt.Println(string(byte2))
}

3.基本数据类型的转化

3.1数值类型的转化
package main

import "fmt"

func main() {
	var a int16 = 8
	var b int64 = 16
	fmt.Println(int64(a) + b)

	var c int8 = 12
	var d float32 = 32
	fmt.Println(float32(c) + d)
}
3.2 转化成字符串
import (
	"fmt"
	"strconv"
)

func main() {
	//通过sprint转化成字符串
	s1 := fmt.Sprintf("%d", 1)
	fmt.Println(s1)
	//痛殴strconv转化
	var num float64 = 3.14
	fmt.Println(strconv.FormatFloat(num, 'f', -1, 64))
}
3.3 字符串转化成int和float类型

import (
	"fmt"
	"strconv"
)

func main() {
	str := "10"
	str2 := "3.14"
	fmt.Println(strconv.ParseInt(str, 10, 64))
	fmt.Println(strconv.ParseFloat(str2, 64))

}


http://www.kler.cn/news/361651.html

相关文章:

  • 【数据结构与算法】时间、空间复杂度详解
  • 华为配置 之 Console线路配置
  • 手机玩黑色沙漠?GameViewer远程玩黑色沙漠教程
  • 复习:react 中的 refs,怎么使用,有哪些使用场景
  • QT的文件操作类 QFile
  • Imagic: Text-Based Real Image Editing with Diffusion Models
  • NGINX 保护 Web 应用安全之基于 IP 地址的访问
  • 多品牌摄像机视频平台EasyCVR海康大华宇视视频平台如何接入多样化设备
  • IDEA如何查看所有的断点(Breakpoints)并关闭
  • Apple提出MM1.5:多模态大型语言模型微调的方法、分析和见解
  • 什么是第二层区块链?
  • GO之流程控制
  • stm32f103zet6 ili9341(fsmc) freertos 制作数字电子时钟
  • vue3 + ts + element-plus 二次封装 el-dialog
  • PostgreSQL的前世今生
  • python实现机器狗的行动控制
  • 【云原生】Kubernetes部署Jenkins静动Slave
  • 原型模式和建造模式的区别
  • STL源码剖析:适配器
  • 如何生成测试覆盖率的报告
  • 计算机毕业设计 基于Python的智能停车系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】
  • 【树莓派】树莓派搭建个人服务器
  • Java框架精品项目【用于个人学习】
  • 探索 Python Web 开发:从框架到爬虫
  • QLORA:高效微调量化大型语言模型
  • export 与 export default 对应import的写法