05-Golang的基本数据类型

news2025/1/20 10:45:19

Golang的基本数据类型

  • 变量数据类型
  • 整型类型基本使用及细节
    • 基本介绍
    • 整数类型
    • 演示案例
    • 整型的使用细节
  • 浮点类型基本使用及细节
    • 基本介绍
    • 浮点型的分类
    • 案例演示
    • 使用细节
  • 字符类型基本使用及细节
    • 基本介绍
    • 案例演示
    • 字符类型本质探讨
  • 布尔类型的使用
    • 基本介绍
  • 字符串类型基本使用及细节
    • 基本介绍
    • 基本使用
    • 使用细节
  • 基本数据类型默认值
    • 基本数据类型一览表
  • 基本数据相互转换
    • 基本介绍
    • 基本语法
    • 细节说明
  • 基本数据与string的相互转换
    • 基本数据转string
      • 基本介绍
    • string类型转基本数据类型
      • 基本介绍
    • 注意事项
  • 指针及内存分布
    • 基本介绍

变量数据类型

每一种数据都定义了明确的数据类型,在内存中分配了不同的内存空间

数据类型

  • 基本数据类型
    • 数值型
      • 整数类型(int, int8, int 16, int32, uint, uint8, uint16, uint32, uint64, byte)
      • 浮点类型(float32, float64)
    • 字符型(没有专门的字符型,使用byte来保存当个字母字符)
    • 布尔型(bool)
    • 字符串(string)[官方将string归属到基本数据类型]
  • 派生/复杂数据类型
    • 1.指针(Pointer)
    • 2.数组
    • 3.结构体(struct)
    • 4.管道(Channel)
    • 5.函数(也是一种类型)
    • 6.切片(slice)
    • 7.接口(interface)
    • 8.map

整型类型基本使用及细节

基本介绍

Golang的整数类型就是用于存放整数值的,比如12,23,34

整数类型

在这里插入图片描述
在这里插入图片描述

演示案例

package main
import fmt


//演示golang中整数类型的使用
func main(){
	
	var i int = 10
	fmt.Println("i=", i)
	
	//测试int8的范围
	var j int8 = -128
	fmt.Println("j=", j)

	//测试uint8的范围
	var k uint8 = 255
	fmt.Println("k=", k)
}

整型的使用细节

1.Golang各整数类型分:有符号和无符号,int和uint的大小和系统有关

2.Goalng的整型默认声明为int型

3.如何在程序查看某个默认变量的字节大小和数据类型

4.Golang程序中整型变量在使用时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量使用占用空间小的的数据类型【如:年龄】

5.bit:计算机中最小的存储单位。byte:计算机中基本存储单元

package main
import "fmt"
import "unsafe"


func main(){
	//整型的使用细节
	var n1 = 10  //n1是什么类型?
	//如何查看一下某个变量的数据类型
	//fmt.Println()可以用作于格式化输出
	fmt.Println("n1 的 类型 %T ", n1)

	//如何在程序查看某个默认变量的字节大小和数据类型
	var n2 int64 = 10
	//unsage.Sizeof(n2)是unsafe包的一个函数,可以返回n2变量占用的字节数
	fmt.Println("n2 的 类型 %T n2占用的字节数是 %d", n2, unsafe.Sizeof(n2))
}

在这里插入图片描述

浮点类型基本使用及细节

基本介绍

小数类型就是用于存放小数的,如:1.2,4.5

浮点型的分类

在这里插入图片描述

案例演示

package main
import "fmt"



func main(){
	//小数的使用细节
	var price float32 = 21.4
	fmt.Println("price=", price)
	
	var num1 float32 = -0.0000089
	var num2 float64 = -95465465.465
	fmt.Println("num1",num1, "num2",num2 )
}

使用细节

在这里插入图片描述

字符类型基本使用及细节

基本介绍

Goalng中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存

字符串就是一串固定长度的字符链接起来的字符序列。Go的字符串是由单个字节链接起来的,也是就说对于传统的字符创自由字符组成的,而Go的字符串不同,它由字节组成的。

案例演示

package main
import "fmt"


//演示golang中字符类型使用
func main(){
	
	var c1 byte = 'a'
	var c2 byte = '0' //字符的0

	//当我们直接输出byte值,就是输出了的对应的字符码值
	//'a' ==>
	fmt.Println("c1=", c1)
	fmt.Println("c2=", c2)
	
	//如果我们希望输出对应的字符,需要使用格式化输出
	fmt.Println("c1=%c c2=%c2\n", c1, c2)

	var c3 int = '北' //overflow溢出
	fmt.Println("c3=%c3 c3对应码值=%d",c3, c3)
}

在这里插入图片描述

  • 如果保存的字符在ASCII表的,比如[0-1,a-z, A-Z]直接可以保存到byte

  • 如果保存的字符对应码值大于255,可以考虑使用int类型保存

  • 如果需要安装字符的方式输出,需要格式化输出,即fmt.Println(“%c”,c)…

字符类型本质探讨

  • 1.字符型存储到计算机中,需要将字符对应的码值(整数)找出来
    • 存储:字符---->对应码值---->二进制----->存储
    • 读取:二进制----->码值----->字符----->读取
  • 2.字符和码值的对应关系是通过字符编码表决定的(是规定好的)

布尔类型的使用

基本介绍

  • 1.布尔类型也叫bool类型,bool类型数据值允许读取true和false

  • 2.bool类型占一个字节

  • 3.boolean类型适于逻辑运算,一般用于程序流程控制

package main
import "fmt"

//演示golang中bool类型的使用
func main(){
	var b = false
	fmt.Println("b=", b)
	//1.bool类型占用存储空间是一个字节
	fmt.Println("b的占用空间=" unsafe.Sizeof(b))
}

字符串类型基本使用及细节

基本介绍

字符串就是一串固定长度的字符连接起来的字符序列,Go的字符串是由单个字节链接起来的。Go语言的字符串的字节使用UTF-8编码识别Unicode文本

基本使用

package main
import "fmt"

//演示golang中string类型使用
func main(){
	//string的基本使用
	var address string = "北京长城"
	fmt.Println(address)
}

使用细节

  • 1.Go语言的字符串的字节使用UTF-8编码识别Unicode文本,这样Golang同时使用UTF-8编码,乱码问题不会困扰程序员

  • 2.字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的
    在这里插入图片描述
    3.字符串的两种表达形式

  • (1):双引号:会识别转义字符

  • (2):反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果

//输出源代码等效果
	str2 := "abc\nabc"
	fmt.Println(str2)

	//使用的反引号
	str3 := `
	//演示golang中string类型使用
func main(){
	//string的基本使用
	var address string = "北京长城"
	fmt.Println(address)

	//字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的
	// var str = "hello"
	// srt[0] = 'a' //这里不能修改str的内容,即go中的字符串是不可变的

	//字符串的两种表示形式,双引号,会识别转义字符,反引号
	//以字符串的原生形式输出,包括换行和特殊字符,可以实现方式攻击
	//输出源代码等效果
	str2 := "abc\nabc"
	fmt.Println(str2)
	`
	fmt.Println(str3)
  • 4.字符串拼接方式
var str string
str = " hello " + " world! "
fmt.Println(str)
str += "ok"
fmt.Println(str)
  • 5.当一行字符串太长时,需要使用到多行字符串,可以如下处理,但是要注意,需要保留+号在上一行
str := "hello" +
	" world ! "
fmt.Println(str)

基本数据类型默认值

基本数据类型一览表

在go中,数据类型都有一个默认值,当程序没有赋值的时候,就会保留默认值,在go中默认值又叫零值。

​ 基本数据类型的默认值如下:
在这里插入图片描述

package main
import "fmt"


func main(){
	var a int //0
	var b float32 //0
	var c float64 //0
	var isMrried bool //false
	var name string // " "
    //这里的%v表示按照白能量的值输出
	fmt.Printf("a=%d,b=%f,c=%f,isMrried=%v name=%v",a,b,c,isMrried, name)
}

在这里插入图片描述

基本数据相互转换

基本介绍

Golang和java/c不同Go在不同类型的变量之间赋值时需要显示转换。就是说Golang中数据类型不能自动转换

基本语法

表达式T(v)将值变化为类型T

T:就是数据类型,比如int32,int64,float32等等

v:就是需要转换的变量

package main
import "fmt"

//演示golang中基本数据类型的转换
func main(){
	var i int = 100
	//希望将 i => float
	var n1 float32 = float32(i)
	var n2 int8 = int8(i)
	var n3 int64 = int64(i)  //低精度->高精度



	fmt.Printf("i=%v n1=%v n2=%v n3=%v", i ,n1, n2,n3)
}

在这里插入图片描述

细节说明

  • 1.Go中,数据类型的转换可以是从表示范围小—>表示范围大,也可以范围大—>范围小
  • 2.被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化
  • 3.在转换中,比如将int64转成int8,编译时不会标错,只是转换的结果是按溢出处理,和我们希望的结果不一样。因此在转换的时候需要考虑范围。

基本数据与string的相互转换

基本数据转string

基本介绍

在程序开发中我们经常要将基本数据类型转换成string类型。

或者将string类型转换成基本数据类型。

方式一:fmt.Sprintf(“%参数”,表达式)

  • 1.参数需要和表达式的数据类型相匹配
  • 2.fmt.Sprintf()会返回转换后的字符串

方式二:使用strconv包的函数
在这里插入图片描述

package main
import (
	"fmt"
	_ "unsafe"
	"strconv"
)

//演示golang中基本数据练习转成string使用
func main(){
	var num1 int = 99
	var num2 float64 = 23.456
	var b bool = true
	var myChar byte = 'h'
	var str string //空的str

	//使用第一种方式来装换 fmt.Sprinf方法

	str = fmt.Sprintf("%d", num1)
	fmt.Printf("str type %T str=%v\n", str, str)
	
	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str type %T str=%v\n", str, str)
	
	str = fmt.Sprintf("%t", b)
	fmt.Printf("str type %T str=%v\n", str, str)
	
	str = fmt.Sprintf("%c", myChar)
	fmt.Printf("str type %T str=%v\n", str, str)

	//第二种方式strconv函数
	var num3 int = 99
	var num4 float64 = 23.456
	var b2 bool = true

	str = strconv.FormatInt(int64(num3), 10)
	fmt.Printf("str type %T str=%q\n", str, str)
	
	//说明:'f' 格式 10:表示小数位保留10位, 64表示这个小数是float64
	str = strconv.FormatFloat(num4, 'f', 10, 64)
	fmt.Printf("str type %T str=%q\n", str, str)

	str = strconv.FormatBool(b2)
	fmt.Printf("str type %T str=%q\n", str, str)
    
    //strconv包中有一个函数Itoa
    var num5 int64 = 4567
    str = strconv.Itoa(int(num5))
    fmt.Printf("str type %T str=%q\n", str, str)

}

在这里插入图片描述

string类型转基本数据类型

基本介绍

1.使用strconv包的函数
在这里插入图片描述
2.返回的是int64或者float64,如希望要得到int32,float32等如下处理:
在这里插入图片描述

package main
import (
	"fmt"
	"strconv"
)

//演示golang中string转成基本数据类型使用
func main(){
	
	var str string = "true"
	var b bool
	
	//1.strconv.ParseBool(str)函数会返回两个值(value bool, err error)
	//2.因为只想获取到value bool,不想获取 err  所以使用——忽略
	b , _ = strconv.ParseBool(str)
	fmt.Printf("b type %T b=%v\n", b, b)

	var str2 string = "123456789"
	var n1 int64
	var n2 int
	n1, _ = strconv.ParseInt(str2, 10, 64)
	n2 = int(n1)
	fmt.Printf("n1 type %T n1=%v\n", n1, n1)
	fmt.Printf("n2 type %T n2=%v\n", n2, n2)

	var str3 string = "123.456"
	var f1 float64
	f1, _ = strconv.ParseFloat(str3, 64)
	fmt.Printf("f1 type %T f1=%v\n", f1, f1)
}

在这里插入图片描述

注意事项

在奖string类型转成基本数据类型时,要确保string类型能够转成有效的数据,比如可以将“123”转成一个整数,但是不能把“hello”转成一个整数,如果这样做,Golang直接将其转成0,其他类型也是一样的道理

指针及内存分布

基本介绍

  • 1.基本数据类型,变量存的就是值,也叫值类型

  • 2.获取变量的地址,用&,比如:var num int ,获取num的地址:&num

  • 3.指针类型,变量村的是一个地址,这个地址指向的空间村的才是值,比如: var ptr *int = &num]()

  • 4.获取指针类型所指向的值使用:*,比如 var *ptr int,使用 *ptr获取p指向的值

package main
import (
	"fmt"
)

//演示golang中指针类型
func main(){
	
	//基本数据类型在内存布局
	var i int = 10
	//查询i的地址
	fmt.Println("i的地址=", &i)
	
	//1.ptr 是一个指针bianlaing
	//2.ptr 的类型 *int
	//3.ptr 本身的&i
	var ptr *int = &i
	fmt.Printf("ptr=%v\n", ptr)
	fmt.Printf("ptr 的地址=%v\n", ptr)
	fmt.Printf("ptr 指向的值=%v", *ptr)

}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复变函数的积分

复变函数的积分化解成曲线积分的问题。 那化成第一类曲线积分还是第二类曲线积分?(高等数学 中有讲第一类曲线积分和第二类曲线积分)。 路径是有方向的,由起点和终点不同,路径有正向和负向。 复变函数的积分归结起来…

「学习方法」Scratch、Python、C++如何学才能融会贯通?

前言 相信很多家长朋友都发现一个问题:“编程教育正在以飞快的速度渗透于孩子们的培养体系中,这是为什么呢?原因很简单,这是因为通过专业的编程教育可以全面提升孩子的逻辑思维、创造力、动手能力等,让孩子们拥有更全…

线程池的使用

线程池 3大方法、7大参数、4种拒绝策略 好处:降低资源的消耗、提高响应的速度、方便管理、 线程池可以理解为银行业务 三大方法 第1大方法:单个线程 ExecutorService threadExecutor Executors.newSingleThreadExecutor(); 第2大方法&a…

c语言 操作符详解例题 数据存储 指针初阶 水仙花数 杨辉三角 逆序字符串 喝汽水问题 打印图形 猜凶手

【题目名称】 下面代码的结果是&#xff1a;a #include <stdio.h> int i; int main() {i--; sizeof的返回值是无符号整型if (i > sizeof(i)) i四个字节所以是4。算出的结果类型是unsigned int无符号和有符号比较大小 会先把有符号整型转化为无符号。 -1放到内…

浏览器底部导航栏遮盖问题

欧吼&#xff0c;算是遇到两次了这种问题。每次解决完都觉得很无语&#x1f92e; 先看问题如图&#xff08;怕公司说我泄露他们啥信息&#xff0c;于是打了非常离谱且难看的马赛克&#x1f60a;&#xff09;&#xff1a; 本来要在底部导航栏上方展示底部信息。 电脑上看倒是好…

怎样设计产品帮助中心?以下几点不可忽视

在日常产品的使用过程中&#xff0c;我们经常会遇到一些关于产品的使用相关问题&#xff0c;此时我们会去翻阅产品的说明书&#xff0c;而对于线上的产品来说&#xff0c;一般都会搭配对应的帮助文档&#xff0c;帮助文档可以提供关于用户在使用过程中遇到的各种问题的解答&…

【再学Tensorflow2】TensorFlow2的建模流程:Titanic生存预测

TensorFlow2的建模流程1. 使用Tensorflow实现神经网络模型的一般流程2. Titanic生存预测问题2.1 数据准备2.2 定义模型2.3 训练模型2.4 模型评估2.5 使用模型2.6 保存模型参考资料在机器学习和深度学习领域&#xff0c;通常使用TensorFlow来实现机器学习模型&#xff0c;尤其常…

03Python算数运算符及变量基本使用

算数运算符 算数运算符 是完成基本的算术运算使用的符号&#xff0c;用来处理四则运算 运算符描述实例加10 20 30-减10 - 20 -10*乘10 * 20 200/除10 / 20 0.5//取整除返回除法的整数部分&#xff08;商&#xff09; 9 // 2 输出结果 4%取余数返回除法的余数 9 % 2 1*…

干货 | 云原生时代的灰度发布有几种“姿势”?

随着企业数字化转型进程不断发展&#xff0c;云原生时代的来临&#xff0c;企业应用越来越多&#xff0c;不得不面对应用程序升级的巨大挑战。传统的停机发布方式&#xff0c;新旧版本应用切换少则停机30分钟&#xff0c;多则停机10小时以上&#xff0c;愈发无法满足业务端的需…

java入门及环境配置

java三大版本 JavaSE: 标准版&#xff08;桌面程序&#xff0c;控制台开发........) JavaEE: 嵌入式开发&#xff08;手机&#xff0c;小家电.....&#xff09; JavaEE: E企业级开发&#xff08;web端&#xff0c;服务器开发...&#xff09; JDK、JRE、JVM: Java安装开发环境&a…

信息化时代企业数据防泄露工作该怎么做

场景描述 信息化时代发展迅速&#xff0c;数据防泄露一词也频繁的出现在我们身边。无论企业或政府单位&#xff0c;无纸化办公场景越来越多&#xff0c;数据泄露的时间也层出不穷。例如&#xff1a;世界最大职业中介网站Monster遭到黑客大规模攻击&#xff0c;黑客窃取在网站注…

计算机毕设Python+Vue药品销售平台(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

模板二(基础算法)

目录 快速排序 归并排序 二分 整数二分 浮点数二分 前缀和 一维前缀和 二维前缀和 差分 一维差分 二维差分 双指针 位运算 离散化 区间合并 快速排序 方法一&#xff1a;定义两个新数组&#xff0c;a[ ],b[ ],每次将大于x的放到a中&#xff0c;小于x的放到b中&…

【矩阵论】6.范数理论——范数估计——许尔估计谱估计

6.3 许尔估计 任意方阵 A(aij)nnA(a_{ij})_{n\times n}A(aij​)nn​ &#xff0c;全体根 λ(A){λ1,⋯,λn}\lambda(A)\{\lambda_1,\cdots,\lambda_n\}λ(A){λ1​,⋯,λn​} &#xff0c;满足 ∣λ1∣2⋯∣λn∣2≤∑∣aij∣2\vert \lambda_1\vert^2\cdots\vert \lambda_n\ve…

数据存储格式

文章目录数据存储格式1 行列存储比较2 ORC文件格式2.1 文件级2.1.1 Post scripts2.1.2 File Footer2.1.3 File MetaData2.2 Stripe级2.2.1 Stripe Footer2.2.2 Row Data2.2.3 Index Data3 Parquet文件格式3.1 Header3.2 Data3.2.1 Row Group3.2.2 Column Chunk3.2.3 Page3.3 Fo…

正则表达式判断数字

判断 正负整数,正负小数 表达式: ^[-]?([0]{1,1}|[1-9]{1,1}[0-9]*?)[.]?[\\d]{1,}$ import java.util.Scanner; import java.util.regex.Pattern; public static void main(String[] args) { Pattern pattern Pattern.compile("^[-]?([0]{1,1}|[1-9]{1,1}…

3dtiles数据解析

1.解析json文件 2.解析b3dm模型 (1)b3dm模型文件时二进制文件&#xff0c;其中包含glTF文件&#xff1a; 当使用tiny_gltf库解析glTF时&#xff0c;需要减去(28byte featuretable的byte batchTable的byte ): bool TinyGLTF::ExtractGltfFromMemory(Model *model,std::string…

JVM - 内存区域划分 类加载机制 垃圾回收机制

目录 1. 内存区域划分 2. 类加载 2.1 双亲委派模型 3. 垃圾回收机制 (GC) 3.1 如何判断一个对象是否为 "垃圾" 3.1 可达性分析 3.2 垃圾回收算法 1. 内存区域划分 JVM 作本质上是一个 Java 进程, 它启动的时候, 就会从操作系统申请一大块内存, 并且把这一大块…

CSS学习(七):盒子模型,圆角边框,盒子阴影和文字阴影

原文链接&#xff1a;CSS学习&#xff08;七&#xff09;&#xff1a;盒子模型&#xff0c;圆角边框&#xff0c;盒子阴影和文字阴影 1. 盒子模型 页面布局要学习三大核心&#xff1a;盒子模型&#xff0c;浮动和定位。学习好盒子模型能非常好的帮助我们页面布局。 1.1 看透…

肽基脯氨酰异构酶底物:1926163-51-0,WFY-pSer-PR-AMC

WFYpSPR-AMC, Pin1底物类似显色底物H- trp - phi - tir - ser (PO₃H₂)-Pro-Arg-pNA。 磷酸肽在生命过程中发挥重要作用&#xff0c;磷酸化的位置在多肽上的Tyr、Ser&#xff0c;Thr&#xff0c;。目前磷酸肽合成一般都采用磷酸化氨基酸&#xff0c;目前使用的都是单苄基磷酸化…