详解Go语言中的数据类型及类型转换

目录
  • 1、基本数据类型
  • 2、基础数据类型转换
  • 3、基本数据类型转为字符串
  • 4、strconv的使用
  • 5、字符串转为基础类型

1、基本数据类型

数据类型有很多,先研究一下基础的,例如:布尔型、数字类型、字符串类型。

数字类型有uint8、uint16、uint32、uint64、int8、int16、int32、int64(uint和int区别在于uint为无符号整数,即只支持正数,不支持负数形式)

数字浮点型有fload32、float64、complex64、complex126(后面两个均为实数和虚数类型,暂时先不研究)

样例代码如下:

//数据类型
func test_data() {
	var a bool
	var b int16
	var c uint64 = 1231254353452
	var d float32 = 1.78
	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
	fmt.Println(d)
	fmt.Println("int8范围:", math.MinInt8, math.MaxInt8)
	fmt.Println("uint8范围:", math.MaxUint8)
}

执行结果

false
0                                               
1231254353452                                   
1.78                                            
int8范围: -128 127                              
uint8范围: 255

注意

1、如果没有赋值的基础数据类型变量具有初始值,不像java默认为null。bool类型的初始值为false,int的初始值为0。

2、uint和int的取值范围不一样,uint只是正数。

2、基础数据类型转换

在工程中常常遇到数据类型转换问题,测试一下。

样例代码如下

//数据类型转换
func test_convert() {
	var num int = 10
	var num1 float32 = float32(num)
	var num2 float64 = float64(num)
	fmt.Printf("num类型为%T,num1类型为%T,num2类型为%T\n", num, num1, num2)
}

执行结果

num类型为int,num1类型为float32,num2类型为float64

注意一下Printf中格式化的动词使用,特意找了下,整理一下。

动词 功能
%v 按照值的本来值输出
%+v 在%v基础上,对结构体字段名和值进行展开
%#v 输出Go语言语法格式的值
%T 输出Go语言数据类型
%% 输出%本体
%b 输出以二进制方式显示的整型
%o 输出以八进制方式显示的整型
%d 输出以十进制方式显示的整型
%x 输出以十六进制方式显示的整型,小写
%X 输出以十六进制方式显示的整型,大写
%U 以Unicode字符方式输出
%f 以浮点型方式输出
%p 指针,十六进制方式显

3、基本数据类型转为字符串

这也是工程中经常使用的场景。

样例代码如下,先使用fmt的Sprintf方法转换。

//基础数据类型转为string
func test_convert_string() {
	var a int = 10
	var b float64 = 1.8
	var c bool = true
	var d byte = 'd'
	var e uint64 = 8
	var str string
	fmt.Println(str + "a")
	str = fmt.Sprintf("%d", a)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	str = fmt.Sprintf("%f", b)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	str = fmt.Sprintf("%t", c)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	str = fmt.Sprintf("%c", d)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	str = fmt.Sprintf("%b", e)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
}

执行结果

a                                               
str类型为string,str=10                          
str类型为string,str=1.800000                    
str类型为string,str=true                        
str类型为string,str=d                           
str类型为string,str=1000

注意

1、可以看到如果没有对字符串类型做初始复制,会默认为空字符串。

4、strconv的使用

使用strconv可以对各种数据类型进行字符串转换。

样例如下

//strconv的使用
func test_strconv() {
	var i int = 10
	var x int = 999
	var f float64 = 1.8
	var t bool = false
	var z int = 97
	var str string
	// 十进制int
	str = strconv.FormatInt(int64(i), 10)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	//十六进制int
	str = strconv.FormatInt(int64(x), 16)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	//浮点型,f表示格式,3表示位数,64表示转换成float64
	str = strconv.FormatFloat(float64(f), 'f', 3, 64)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	//布尔类型
	str = strconv.FormatBool(t)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	//string函数和strconv.itoa区别
	var str1 = strconv.Itoa(z)
	var str2 = string(z)
	fmt.Printf("str1类型为%T,str1=%v\n", str1, str1)
	fmt.Printf("str2类型为%T,str2=%v\n", str2, str2)
}

执行结果

str类型为string,str=10                          
str类型为string,str=3e7                         
str类型为string,str=1.800                       
str类型为string,str=false                       
str1类型为string,str1=97                        
str2类型为string,str2=a

注意

1、FormatInt参数可以选择10进制或者16进制。

2、FormatFloat参数可以选择保留几位小数。

3、Itoa方法可以将int转为string,但是string方法会把数字转换为ASCII码值等于该整型数字的字符。

5、字符串转为基础类型

使用strconv可以将字符串转化为基础类型。

样例代码如下

//字符串转为基础类型
func test_string_convert() {
	var str string = "true"
	b, _ := strconv.ParseBool(str)
	fmt.Printf("b类型为%T,b=%v\n", b, b)

	str = "111"
	// 默认返回int64
	i, _ := strconv.ParseInt(str, 10, 64)
	fmt.Printf("i类型为%T,i=%v\n", i, i)

	str = "1.908"
	f, _ := strconv.ParseFloat(str, 64)
	fmt.Printf("f类型为%T,f=%v\n", f, f)

	str = "abc"
	c, c1 := strconv.ParseInt(str, 10, 64)
	fmt.Printf("c类型为%T,c=%v\n", c, c)
	fmt.Printf("c1类型为%T,c1=%v\n", c1, c1)
}

执行结果

b类型为bool,b=true                              
i类型为int64,i=111                              
f类型为float64,f=1.908
c类型为int64,c=0
c1类型为*strconv.NumError,c1=strconv.ParseInt: parsing "abc": invalid syntax

注意

1、":="等于声明变量加赋值。

2、ParseInt返回的int类型为int64,ParseFloat返回的float类型为float64。

3、返回的值有两个,如果解析失败,则范围该数据类型的初始化值,比如:int类型返回0。第二个值为异常,如果没有异常则为空。

到此这篇关于详解Go语言中的数据类型及类型转换的文章就介绍到这了,更多相关Go数据类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Go语言数据类型详细介绍

    目录 一.Go 语言两大数据类型 二.基础类型 三.复合类型 指针 四.数组(array) 五.切片(slice) 六.字典/映射(map) 七.通道(channel) 八.结构体(struct) 九.接口(interface) 十.错误(error) 一.Go 语言两大数据类型 Go 语言数据类型包含基础类型和复合类型两大类. 基础类型包括: 布尔类型 bool. 数值类型 int,int8,int16,int32,int64,float32,float64. uint8,uint16,uin

  • Go语言中int、float、string类型之间相互的转换

    目录 前言 整形转字符串 fmt.Sprintf 使用方法 strconv.Itoa 使用方法 strconv.FormatInt 入参 使用方法 浮点型转字符串 fmt.Sprintf 入参 使用方法 字符串转整形 strconv.Atoi 使用方法 strconv.ParseInt 使用方法 字符串转浮点型 strconv.ParseFloat 使用方法 总结 前言 Go 开发中经常设计到类型转换,本文就重点记录下 整形.浮点型和字符串类型互相转换的方法. 整形转字符串 fmt.Sprint

  • GO语言基本数据类型总结

    本文实例总结了GO语言基本数据类型.分享给大家供大家参考.具体如下: 1.注释(与C++一样) 行注释://块注释:/* ...*/ 2.标识符 可以这么说,除了数字开头的不允许,符号开头的不允许,关键字不允许,其他的Unicode字符组合都可以."_33"也可以是标识符."我们"也可以是标识符.标识符也区分大小写. (1).以大写字母开头的标识符是公开的.(这个很有意思) (2).其他任何标识符都是私有的. (3).空标识符"_"是一个占位符,

  • golang的强制类型转换实现

    golang是一种强类型语言,虽然在代码中经常看到这种写法,i:=10这其实这是编译器自动做了类型推断在编译期间.编译器会对数据进行类型检查.不同类型的数据不能赋值,不能在函数中传参.强类型语言有一些优势,很多的错误会在编译期间被检查出来,不想php和python等弱类型语言,很多错误只有运行到才能被发现.同样,强类型也有一些缺点,写代码的时候要考虑数据类型了,失去了一些灵活性. 言归正传,开始golang的类型转换问题 golang的类型转换和C/C++ java等语言的类型转换还有点区别 C

  • 手把手带你走进Go语言之类型转换

    目录 概述 数据类型转换 浮点转整数 字符串转整数 整数转字符串 概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. 数据类型转换 数据类型转换可以帮助我们将一种数据类型的变量转换为另外一个种类型的变量. 格式: type_name(expression) 浮点转整数 浮点转整数是从高精度向低精度转换, 小数点后面会被舍弃. 例子: package main import "fmt" func main() { // 定义float

  • 详解Go语言中的数据类型及类型转换

    目录 1.基本数据类型 2.基础数据类型转换 3.基本数据类型转为字符串 4.strconv的使用 5.字符串转为基础类型 1.基本数据类型 数据类型有很多,先研究一下基础的,例如:布尔型.数字类型.字符串类型. 数字类型有uint8.uint16.uint32.uint64.int8.int16.int32.int64(uint和int区别在于uint为无符号整数,即只支持正数,不支持负数形式) 数字浮点型有fload32.float64.complex64.complex126(后面两个均为

  • 详解易语言中的数据类型

    各种数据存放在磁盘或内存中都有其不同的存放格式,因此就存在不同的数据类型.了解各种数据的特性,对编程开发来说是十分重要. 程序中经常会进行一些运算,易语言中的运算都要使用运算符进行识别处理,并通过运算表达式来完成运算操作.程序中对各数据之间的关系的描述也要通过运算符. 1.易语言的数据类型 一个程序内部应包括两个方面的内容:1.数据的描述.2.操作步骤,即对程序动作的描述. 数据是程序操作的对象,操作的结果会改变数据的内容.打个比方:要做一道菜,做菜前先选择烹饪的原材料(即对数据进行描述),然后

  • 详解C语言中不同类型的数据转换规则

    不同类型数据间的混合运算与类型转换 1.自动类型转换 在C语言中,自动类型转换遵循以下规则: ①若参与运算量的类型不同,则先转换成同一类型,然后进行运算 ②转换按数据长度增加的方向进行,以保证精度不降低.如int型和long型运算时,先把int量转成long型后再进行运算 a.若两种类型的字节数不同,转换成字节数高的类型 b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型 ③所有的浮点运算都是以双精度进行的,即使是两个float单精度量运算的表达式,也要先转换成double

  • 详解Go语言中泛型的实现原理与使用

    目录 前言 问题 解决方法 类型约束 重获类型安全 泛型使用场景 性能 虚拟方法表 单态化 Go 的实现 结论 前言 原文:A gentle introduction to generics in Go byDominik Braun 万俊峰Kevin:我看了觉得文章非常简单易懂,就征求了作者同意,翻译出来给大家分享一下. 本文是对泛型的基本思想及其在 Go 中的实现的一个比较容易理解的介绍,同时也是对围绕泛型的各种性能讨论的简单总结.首先,我们来看看泛型所解决的核心问题. 问题 假设我们想实现

  • 详解C语言中二级指针与链表的应用

    目录 前言 二级指针讲解 链表的应用 定义双链表的结构体 创建双链表 前言 这篇文章即将解决你看不懂或者不会写链表的基本操作的问题,对于初学者而言,有很多地方肯定是费解的.比如函数的参数列表的多样化,动态分配内存空间函数malloc等,其实这些知识和指针联系紧密,尤其是二级指针.那么开始好好的学习这篇文章吧! 二级指针讲解 简述:其实就是一个指针指向另一个指针的地址. 我们都知道指针指向地址,但是指针自身也是一个变量,当然也可以被二级指针所指向. 语法:形如 int x = 10; int *q

  • 详解C语言中结构体(struct)的用法

    目录 粉丝问答 三种结构体类型变量说明 1. 先定义结构,再定义结构变量 2. 定义结构体类型的同时说明变量 3. 直接说明结构变量 结构体成员表示方法 结构体指针做参数 结构体初始化 定义变量的同时初始化 先定义在初始化 常用初始化 typedef与struct 前置声明 结构体对齐 粉丝问答 有个粉丝在群里问了这样一个问题,问题在图中已经标出,如下图. DQuestsion 头文件的结构体的定义为: typedef struct{ u8 bmRequestType; u8 bRequest;

  • 详解Java语言中的抽象类与继承

    目录 一.实验目的 二.实验要求 三.实验报告要求 四.实验小结 一.实验目的 1.掌握抽象类的设计: 2.掌握抽象方法方法的实现: 3.熟悉类的向下向上转型,以及子类实例化父类对象的基本要求: 4.掌握通过类的继承实现抽象类. 二.实验要求 (一)编写一个Shape抽象类,其中包含有: 1个成员变量:表示长度,数据类型为double.当类为Circle时,表示半径:当类为Square时,表示其边长: 2个抽象方法area().perimeter(),分别用于计算图形的面积.周长. public

  • 详解C# 泛型中的数据类型判定与转换

    提到类型转换,首先要明确C#中的数据类型,主要分为值类型和引用类型: 1.常用的值类型有:(struct) 整型家族:int,byte,char,short,long等等一系列 浮点家族:float,double,decimal 孤独的枚举:enum 孤独的布尔:bool 2.常用的引用类型有: string,class,array,delegate,interface 值得注意的是,无论是值类型还是引用类型,在C#中都派生于object,没错,这家伙就是万恶之源! 正是因为有了这一特性,于是我

  • 详解Go语言中关于包导入必学的 8 个知识点

    1. 单行导入与多行导入 在 Go 语言中,一个包可包含多个 .go 文件(这些文件必须得在同一级文件夹中),只要这些 .go 文件的头部都使用 package 关键字声明了同一个包. 导入包主要可分为两种方式: 单行导入 import "fmt" import "sync" 多行导入 import( "fmt" "sync" ) 如你所见,Go 语言中 导入的包,必须得用双引号包含,在这里吐槽一下. 2. 使用别名 在一些场

  • 详解R语言中生存分析模型与时间依赖性ROC曲线可视化

    R语言简介 R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. 人们通常使用接收者操作特征曲线(ROC)进行二元结果逻辑回归.但是,流行病学研究中感兴趣的结果通常是事件发生时间.使用随时间变化的时间依赖性ROC可以更全面地描述这种情况下的预测模型. 时间依赖性ROC定义 令 Mi为用于死亡率预测的基线(时间0)标量标记. 当随时间推移观察到结果时,其预测性能取决于评估时间 t.直观地说,在零时间测量的标记值应该

随机推荐