【Go】二、Go的基本数据类型

文章目录

  • 0、进制
  • 1、变量的声明
  • 2、数据类型
  • 3、整型
  • 4、浮点型
  • 5、字符类型
  • 6、布尔类型
  • 7、字符串类型
  • 8、基本数据类型的默认值
  • 9、类型转换
  • 10、基本类型转String
  • 11、String转其他类型

0、进制

N进制,逢N进一

在这里插入图片描述

1、变量的声明

//声明 + 赋值
var age int = 18
//声明、赋值、使用
func main(){
	var age int
	age = 18
	fmt.Println("age = ", age)
}

通过变量名在内存中找到它(通过房间号找到在一栋楼里找到某个房间),变量类型,即区分空间大小(类比单人间、双人间)

在这里插入图片描述
变量定义的四种形式:

package main
import "fmt"
func main(){
	//定义在{}中的变量叫:局部变量
	//第⼀种:变量的使⽤⽅式:指定变量的类型,并且赋值,
	var num int = 18
	fmt.Println(num)
	
	//第⼆种:指定变量的类型,但是不赋值,使⽤默认值
	var num2 int
	fmt.Println(num2)
	
	//第三种:如果没有写变量的类型,那么根据=后⾯的值进⾏判定变量的类型 (⾃动类型推断)
	var num3 = "tom"
	fmt.Println(num3)
	
	//第四种:省略var,注意 := 不能写为 = 
	sex := "男"
	fmt.Println(sex)
}

也可一次声明多个变量,不论局部还是全局变量

package main
import "fmt

//全局变量:定义在函数外的变量
var n7 = 100
var n8 = 9.7

//设计者认为上⾯的全局变量的写法太麻烦了,可以⼀次性声明:
var (
	n9 = 500
	n10 = "netty"
)

func main(){
	//声明多个变量:
	var n1,n2,n3 int
	fmt.Println(n1)    //0
	fmt.Println(n2)	   //0
	fmt.Println(n3)    //0
	
	var n4,name,n5 = 10,"jack",7.8
	fmt.Println(n4)
	fmt.Println(name)
	fmt.Println(n5)
	
	n6,height := 6.9,100.6
	fmt.Println(n6)
	fmt.Println(height)
	
	
	fmt.Println(n7)
	fmt.Println(n8)
	
	fmt.Println(n9)
	fmt.Println(n10)
}

2、数据类型

在这里插入图片描述

3、整型

有符号整数型:

在这里插入图片描述

//首位为符号位,127即
0111 1111 

无符号型:

在这里插入图片描述

//255即
1111 1111

其他类型:

在这里插入图片描述

不加类型声明整形,go默认是int类型:

在这里插入图片描述

导入unsafe包,查看变量所占的字节数:

在这里插入图片描述

4、浮点型

不同于Java的float和double,go中是float32和float64:

在这里插入图片描述

package main
import "fmt"
func main(){
        //定义浮点类型的数据:
        var num1 float32 = 3.14
        fmt.Println(num1)
        //可以表示正浮点数,也可以表示负的浮点数
        var num2 float32 = -3.14
        fmt.Println(num2)
        //浮点数可以用十进制表示形式,也可以用科学计数法表示形式  E 大写小写都可以的
        var num3 float32 = 314E-2 
        fmt.Println(num3)
        var num4 float32 = 314E+2
        fmt.Println(num4)
        var num5 float32 = 314e+2
        fmt.Println(num5)
        var num6 float64 = 314e+2
        fmt.Println(num6)
        //浮点数可能会有精度的损失,所以通常情况下,建议你使用:float64 
        var num7 float32 = 256.000000916
        fmt.Println(num7)
        var num8 float64 = 256.000000916
        fmt.Println(num8)
        //golang中默认的浮点类型为:float64 
        var num9 = 3.17
        fmt.Printf("num9对应的默认的类型为:%T",num9)
}

运行发现精度损失:

在这里插入图片描述

因此,通常建议用float64,且go中浮点类型默认也是float64

5、字符类型

和Java有char不同,Go中没有专⻔的字符类型,如果要存储单个字符(字⺟),⼀般使⽤byte类型来保存,且Go中字符使用utf-8编码

package main
import "fmt"
func main(){
        //定义字符类型的数据:
        var c1 byte = 'a'
        fmt.Println(c1)//97
        var c2 byte = '6'
        fmt.Println(c2)//54
        var c3 byte = '('
        fmt.Println(c3 + 20)//40
        //字符类型,本质上就是一个整数,也可以直接参与运算,输出字符的时候,会将对应的码值做一个输出
        //字母,数字,标点等字符,底层是按照ASCII进行存储。
        var c4 int = '中'
        fmt.Println(c4)
        //汉字字符,底层对应的是Unicode码值
        //对应的码值为20013,byte类型溢出,能存储的范围:可以用int
        //总结:Golang的字符对应的使用的是UTF-8编码(Unicode是对应的字符集,UTF-8是Unicode的其中的一种编码方案)
        var c5 byte = 'A'
        //想显示对应的字符,必须采用格式化输出
        fmt.Printf("c5对应的具体的字符为:%c",c5)
}

在这里插入图片描述

关于转义字符:

import "fmt"
func main(){
        //练习转义字符:
        //\n  换行
        fmt.Println("aaa\nbbb")
        //\b 退格
        fmt.Println("aaa\bbbb")
        //\r 光标回到本行的开头,后续输入就会替换原有的字符
        fmt.Println("aaaaa\rbbb")
        //\t 制表符
        fmt.Println("aaaaaaaaaaaaa")
        fmt.Println("aaaaa\tbbbbb")
        fmt.Println("aaaaaaaa\tbbbbb")
        //\"
        fmt.Println("\"Golang\"")
}

在这里插入图片描述

6、布尔类型

package main
import "fmt"
func main(){
        //测试布尔类型的数值:
        var flag01 bool = true
        //true
        fmt.Println(flag01)
        var flag02 bool = false
        //false
        fmt.Println(flag02)
        var flag03 bool = 5 < 9
        //true
        fmt.Println(flag03)
}

7、字符串类型

字符串是不可变的:指的是字符串⼀旦定义好,其中的字符的值不能变,如str[0] = 'b‘

  • 如果字符串中没有特殊字符,字符串的表示形式⽤双引号
  • 如果字符串中有特殊字符,字符串的表示形式⽤反引号 ``
  • +号进行字符串拼接
package main
import "fmt"
func main(){
        //1.定义一个字符串:
        var s1 string = "你好Golang"
        fmt.Println(s1)
        //2.字符串是不可变的:指的是字符串一旦定义好,其中的 字符 的值不能改变
        var s2 string = "abc"
        s2 = "def"
        //s2[0] = 't'
        fmt.Println(s2)
        //3.字符串的表示形式:
        //(1)如果字符串中没有特殊字符,字符串的表示形式用双引号
        //var s3 string = "asdfasdfasdf"
        //(2)如果字符串中有特殊字符,字符串的表示形式用反引号 ``
        var s4 string = `
        package main
        import "fmt"
        
        func main(){
                //测试布尔类型的数值:
                var flag01 bool = true
                fmt.Println(flag01)
        
                var flag02 bool = false
                fmt.Println(flag02)
        
                var flag03 bool = 5 < 9
                fmt.Println(flag03)
        }
        `
        fmt.Println(s4)
        //4.字符串的拼接效果:
        var s5 string = "abc" + "def"
        s5 += "hijk"
        fmt.Println(s5)
        //当一个字符串过长的时候:注意:+保留在上一行的最后
        var s6 string = "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" +
         "def"+ "abc" + "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+
          "abc" + "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+ "abc" +
           "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+ "abc" + "def" + 
           "abc" + "def"+ "abc" + "def"
        fmt.Println(s6)
}

在这里插入图片描述

最后,注意换行拼接时,+保留在上⼀⾏的最后,因为和Java不一样,没封号,你换行,编译器会认为这个语句结束了

在这里插入图片描述

8、基本数据类型的默认值

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

9、类型转换

go不同类型变量之间赋值,需要显式转换(强制转换)

语法:
T(v)
//将值v转换为类型T
package main
import "fmt"
func main(){        
        var n1 int = 100
        //进行类型转换:
        //var n2 float32 = n1  在这里自动转换不好使,比如显式转换
        var n2 float32 = float32(n1)
        fmt.Println(n2)


        //注意:n1的类型其实还是int类型,只是将n1的值100转为了float32而已,n1还是int的类型
        fmt.Printf("%T",n1)  //int
        fmt.Println()


        //将int64转为int8的时候,编译不会出错的,但是会数据的溢出
        var n3 int64 = 888888
        var n4 int8 = int8(n3)
        fmt.Println(n4)//转型后结果是56,就像把一个大面包强塞到一个小盒子,面包肯定要掉渣


        var n5 int32 = 12
        var n6 int64 = int64(n5) + 30  //一定要匹配=左右两边的数据类型
        fmt.Println(n6)


        var n7 int64 = 12
        var n8 int8 = int8(n7) + 127  //编译通过,但是结果可能会溢出
        
        //var n9 int8 = int8(n7) + 128 //编译不会通过
        fmt.Println(n8)
        //fmt.Println(n9)
}

注意最后的两个,int8类型-128到127,所以这个编译能通过,但是结果可能会溢出

var n7 int64 = 12
var n8 int8 = int8(n7) + 127  

而这个则编译都不通过:

var n9 int8 = int8(n7) + 128 

10、基本类型转String

  • 方式一:fmt.Sprintf(“%参数”,表达式)
package main
import "fmt"
func main(){
        var n1 int = 19
        var n2 float32 = 4.78
        var n3 bool = false
        var n4 byte = 'a'
        //int转string %d
        var s1 string = fmt.Sprintf("%d",n1)
        fmt.Printf("s1对应的类型是:%T ,s1 = %q \n",s1, s1)
        var s2 string = fmt.Sprintf("%f",n2)
        fmt.Printf("s2对应的类型是:%T ,s2 = %q \n",s2, s2)
        var s3 string = fmt.Sprintf("%t",n3)
        fmt.Printf("s3对应的类型是:%T ,s3 = %q \n",s3, s3)
        //byte转string %c
        var s4 string = fmt.Sprintf("%c",n4)
        fmt.Printf("s4对应的类型是:%T ,s4 = %q \n",s4, s4)    //%q即将结果用引号引起来
}
  • 方式二:使⽤strconv包的函数
package main
import(
        "fmt"
        "strconv"
)

func main(){
        var n1 int = 18
        //参数:第一个参数必须转为int64类型 ,第二个参数指定字面值的进制形式为十进制
        var s1 string = strconv.FormatInt(int64(n1),10)  
        fmt.Printf("s1对应的类型是:%T ,s1 = %q \n",s1, s1)   //18
        
        var n2 float64 = 4.29
        //第二个参数:'f'(-ddd.dddd)  第三个参数:9 保留小数点后面9位  第四个参数:表示这个小数是float64类型
        var s2 string = strconv.FormatFloat(n2,'f',9,64)        
        fmt.Printf("s2对应的类型是:%T ,s2 = %q \n",s2, s2)
        
        var n3 bool = true
        var s3 string = strconv.FormatBool(n3)
        fmt.Printf("s3对应的类型是:%T ,s3 = %q \n",s3, s3)
}

11、String转其他类型

使用strconv包的函数

package main
import(
        "fmt"
        "strconv"
)
func main(){
        //string-->bool
        var s1 string = "true"
        var b bool
        //ParseBool这个函数的返回值有两个:(value bool, err error),返回值结果不能只用一个变量去接收
        //value就是我们得到的布尔类型的数据,err表示可能出现的错误
        //我们只关注得到的布尔类型的数据,err可以用_直接忽略
        b , _ = strconv.ParseBool(s1)
        fmt.Printf("b的类型是:%T,b=%v \n",b,b)


        //string---》int64
        var s2 string = "19"
        var num1 int64
        num1,_ = strconv.ParseInt(s2,10,64)
        fmt.Printf("num1的类型是:%T,num1=%v \n",num1,num1)


        //string-->float32/float64
        var s3 string = "3.14"
        var f1 float64
        f1,_ = strconv.ParseFloat(s3,64)   //转float64
        fmt.Printf("f1的类型是:%T,f1=%v \n",f1,f1)

		//注意下面转完后,输出Boolean的默认值false
        var s4 string = "golang"
        var b1 bool
        b1 , _ = strconv.ParseBool(s4)
        fmt.Printf("b1的类型是:%T,b1=%v \n",b1,b1)   

		
		//无效转,最后输出int的默认值0
        var s5 string = "golang"
        var num2 int64
        num2,_ = strconv.ParseInt(s5,10,64)
        fmt.Printf("num2的类型是:%T,num2=%v \n",num2,num2)
}

string向基本数据类型转换的时候,一定要确保string类型能够转成有效的数据类型,否则最后得到的结果就是按照对应类型的默认值输出

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机20v数字电压表仿真系统设计

**单片机设计介绍&#xff0c;基于单片机20v数字电压表仿真系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机20V数字电压表仿真系统设计是一个结合了硬件与软件设计的综合性项目。以下是对该设计概要的详细描述…

使用 CSS 实现多立方体悬停颜色效果实现

使用 CSS 实现多立方体悬停效果实现 效果展示 CSS 知识点 filter 属性的 hue-rotate 值运用使用 CSS 实现立方体 场景布局分析 从效果图可以看出&#xff0c;要实现 3*3 的立方体集合&#xff0c;我们需要考虑一下怎么安排小立方体的布局。我这里的做法是使用span实现单个小…

账号微服务短信验证码发送工具单元测试

账号微服务短信验证码发送工具单元测试 注意sms的 app-code #----------sms短信配置-------------- sms:app-code: dd7829bedfaf4373875aa91abba82523template-id: JM1000372package net.xdclass.config;import org.springframework.context.annotation.Bean; import org.spri…

klmanga 章节链接获取

两年前还是可以直接爬的&#xff0c;现在章节不显示了 直接爬取下来的源码章节显示loading&#xff0c;在源码中可以看到是通过js加载出来的&#xff0c;搜索loadChapterDate dataFile atob(FR)&#xff0c;这是将FR的值用base64解码赋予dataFile 根据这段var paramsnew …

原生JS/JQuery封装请求工具类

原生JS的用途 原生 JavaScript 是一种用于开发网络应用程序的编程语言。它可以用于网页开发、服务器端开发和移动应用开发等多个方面。以下是原生 JavaScript 的一些主要用途&#xff1a; 网页开发&#xff1a;原生 JavaScript 可用于处理 DOM&#xff08;文档对象模型&#x…

指针知识大礼包,让你的编程之路更顺畅(四)

1. 回调函数是什么&#xff1f; 2. qsort使⽤举例 3. qsort函数的模拟实现 4. sizeof和strlen的对⽐ 5. 数组和指针笔试题解析 6. 指针运算笔试题解析 正文开始&#xff1a; 1. 回调函数是什么&#xff1f; 回调函数就是⼀个通过 函数指针 调⽤的函数。 如果你把函数的…

【JavaSE】一维数组和二维数组详解

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 一维数组 基本语法 初始化 遍历和打印 数组是引用型变量 基本类型变量与引用类型变量的区别 null 数组传参和返回 总结 二维数组 基本语法 初始化 遍历和打印 一维数组…

动态表情包怎么制作?超简单的gif动画制作方法

动态gif表情包非常的收大众欢迎&#xff0c;小编也不例外。日常聊天斗图中都少不了它们的存在&#xff0c;gif表情包能够调节聊天的氛围。那么&#xff0c;这种gif表情包是怎么做的呢&#xff1f;下面就跟着小编一起来看看制作gif动画图片的方法&#xff0c;不需要下载任何软件…

基于GA遗传优化的离散交通网络双层规划模型设计matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于GA遗传优化的离散交通网络双层规划模型设计.优化输出路段1和路段2的收费情况收敛过程。 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序…

独家原创!TCN-BiGRU-Attention一键实现西储大学故障诊断与讲解!附带处理好的Excel故障诊断数据集!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 数据介绍与故障诊断讲解 1.数据预处理 2.特…

【Python】基础语法(1)

目 录 一.常量和表达式二.变量和类型变量是什么变量的语法(1) 定义变量(2) 使用变量 变量的类型(1) 整数(2) 浮点数(小数)(3) 字符串(4) 布尔(5) 其他 为什么要有这么多类型?动态类型特性 三.注释注释是什么注释的语法(1) 注释行(2) 文档字符串 注释的规范 四.输入输出和用户交…

Android熄屏/亮屏,旋转屏幕/横竖屏切换生命周期变化与activity销毁重建

Android熄屏/亮屏&#xff0c;旋转屏幕/横竖屏切换生命周期变化与activity销毁重建 1、熄屏/亮屏 熄屏后&#xff0c;Android生命周期走&#xff1a; onPause onStop 接着点亮Android手机屏幕&#xff0c;生命周期走&#xff1a; onRestart onStart onResume 2、旋转屏幕&…

JavaScript动态渲染页爬取——Playwright的使用

Playwright的使用 Playwright是微软在2020年年初开源的新一代自动化测试工具&#xff0c;其功能和Selenium、Pyppeteer等类似&#xff0c;都可以驱动浏览器进行各种自动化操作。Playwright对市面上的主流浏览器都提供了支持&#xff0c;API功能简洁又强大&#xff0c;虽然诞生…

nginx界面管理工具之nginxWebUI 搭建与使用

nginx界面管理工具之nginxWebUI 搭建与使用 一、nginxWebUI 1.nginx网页配置工具 官网地址: http://www.nginxwebui.cn 源码地址&#xff1a;https://git.chihiro.org.cn/chihiro/nginxWebUI 2.功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议…

EXCEL VBA将word里面的指定的关键词替换掉后并标记红色字体

EXCEL VBA将word里面的指定的关键词替换掉后并标记红色字体 Sub 开关() Call 新建副本 Call ReplaceAndHighlightInFolder End Sub Sub 新建副本()fpath ThisWorkbook.Path & "\"Dim MyFile As ObjectSet MyFile CreateObject("Scripting.FileSystemObjec…

FireWorks:加速科学计算和工作流程的强大工具

FireWorks&#xff1a;加速科学计算和工作流程的强大工具 FireWorks是一个功能强大的开源工具&#xff0c;旨在简化和加速科学计算和工作流程。它提供了一个灵活的编排框架&#xff0c;使研究人员和工程师能够高效地设计、管理和执行复杂的计算任务和工作流。本文将深入探讨Fir…

Hadoop安装部署-DataNode集群版

Hahoop分布式文件系统支持DataNode节点的大规模扩展&#xff0c;本文主要描述DataNode集群版的安装部署。 如上所示&#xff0c;Hadoop分布式文件系统中每个文件是以数据块的方式存储在不同的DataNode中&#xff0c;每个数据块都支持高可用性&#xff0c;当其中一个数据块对应的…

vue watch 深度监听

vue2文档&#xff1a;API — Vue.js vue3文档&#xff1a;侦听器 | Vue.js watch 可以用来监听页面中的数据&#xff0c;但如果监听的源是对象或数组&#xff0c;则使用深度监听&#xff0c;强制深度遍历源&#xff0c;以便在深度变更时触发回调。 一&#xff0c;监听 <t…

项目管理—项目合同签订后客户又不认了

大家好&#xff0c;我是不会魔法的兔子&#xff0c;是一名执业律师&#xff0c;创建[项目管理者的法小院儿]&#xff0c;持续从法律的角度分享项目管理中的风险及预防问题&#xff0c;让项目管理者能够提早发现与解决项目执行过程中的风险&#xff0c;同时欢迎大家一起交流&…

从快递公司内部辞职的快递员才告诉你的寄快递的真相!

我们知道现在寄快递有很多种方法&#xff0c;但是每种方法也都花费不少&#xff0c;但是我们知道最省钱的寄快递的方法吗&#xff1f;别急&#xff0c;小编了解到快递员告诉我许多快递物流的真相。我们寄快递无非就是去快递驿站寄快递&#xff0c;然后称重&#xff0c;然后计算…