Go | 基本数据类型详解

简介: Go | 基本数据类型详解

前言


基本数据类型,变量存的就是值,也叫值类型。每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。

image.png


Printf 和 Println 的区别


  • printf 输出后不换行, println输出后自动换行;
  • printf 格式化输出,println 直接输出内容
  • Printf 根据format参数生成格式化的字符串并写入标准输出。


判断数据类型以及查看变量使用内存空间


package main
// import "unsafe"
// import "fmt"
// 引入多个
import (
"fmt"
"unsafe"
)
func main() {
  var i int8 = 12
  fmt.Println("i= ", i)
  var i2 uint8 = 129
  fmt.Println("i2= ", i2)
  var n = 12
  fmt.Printf("n的类型是%T\n", n) // n的类型是int
  var name = "xiao"
  fmt.Printf("name的类型是%T\n", name) // name的类型是string
  // 查看变量占用的字节大小和数据类型
  fmt.Printf("name的类型是%T", name, unsafe.Sizeof(name))
}


基本数据类型


数值型


整数类型 (默认值是0)


int, int8, int16, int32, int64 uint, uint8, uint16, uint32, uint64     无符号数(表示的范围更大) byte


  • bit: 计算机中的最小存储单位
  • byte: 计算机中基本存储单元
  • 1byte = 8bit (一个字节8位)

image.pngimage.pngimage.png


var i int8 = -129
// constant -129 overflows int8
var i2 uint8 = -129
// constant -129 overflows uint8


浮点类型 (默认值是0)


  • float32
  • float64(默认类型)

image.png


浮点数 = 符号位 + 指数位 + 尾数位

浮点数都是有符号的

使用浮点类型的时候就需要注意存在丢失精度的问题


var num1 float32 = 12.556883123132   // 精度会丢失
var num2 float64 = 12.556883123132   // 64位比32位精度要准确
fmt.Println("num1=", num1, "num2", num2) // num1= 12.556883 num2 12.556883123132
var num = 12.64
fmt.Printf("num的类型", num) // num的类型%!(EXTRA float64=12.64)
var num3 = 5.6e2   //  5.6 * 10^2 = 5.6 * 100 = 560
fmt.Println("num3=", num3)


字符型


没有专门的字符型,使用byte来保存单个字母字符


ASCII码(128个)


  • Go语言的字符使用UTF-8编码
  • 英文字母:1个字节
  • 汉字:3个字节
  • 字符必须使用单引号括起来,双引号会报错


单引号针对单个字符,字符串要使用双引号

UTF-8是对ASCII的扩容

var str1 byte = 'a'
var str2 byte = '0'
// 当直接输出byte时,输出的使对应字符的ASCII码值(十进制)
fmt.Println("str1", str1, "str2", str2) // str1 97 str2 48
fmt.Printf("str1=%c str2=%c", str1, str2) // str1=a str2=0
fmt.Printf("str1=%c", str1) // str1=a
fmt.Printf("str2=%c", str2) // str2=0
var name byte = '吖'
fmt.Printf("name=%c", name) // overflows byte 超出byte类型的存储范围了
// 汉字更换成int类型
var name int = '吖'
fmt.Printf("name=%c", name) // name=吖
var name1 int =22269
fmt.Printf("name1=%c", name1) // name1=国
// 数据类型只是为了定义存储空间的大小,对应计算机中的内存空间

image.png


布尔型(bool)(默认值是false)


用于逻辑运算,流程控制。bool类型只占用一个字节的内存空间

var a = false
fmt.Println(a)  // false
fmt.Println(unsafe.Sizeof(a))  // 1


字符串(string)(默认值是"")


UTF-8编码


字符串一经定义,则不能修改

var address string = "北京长城"
fmt.Println(address) // 北京长城
var str = "hello"
str[0] = 'a'     // cannot assign to str[0] (strings are immutable)
fmt.Println(str)
// 反引号
// 以字符串原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果。
// 字符串拼接, + 号要放在上面,否则会报错(因为go默认在一行后面加;号)
var str01 = "hello" + " world"
str01 += "  haha!" + "xixi" +
"heihei"
fmt.Println(str01)    // hello world  haha!xixiheihei


基本数据类型的默认值


var a int
var b float32
var c float64
var d bool
var e string
// %v表示按照变量的值输出
fmt.Printf("a=%d,b=%v,c=%v,d=%v e=%v", a,b,c,d,e)


上面输出: a=0,b=0,c=0,d=false e=


派生/复杂数据类型


  1. 指针(Pointer)
  2. 数组
  3. 结构体(struct)
  4. 管道(Channel)
  5. 函数
  6. 切片(slice)
  7. 接口(interface)
  8. map

后面陆续讲解复杂数据类型。


目录
相关文章
|
4天前
|
Go
go语言中的数据类型
go语言中的数据类型
17 0
|
4天前
|
Go
Go的数据类型
Go的数据类型
14 0
|
4天前
|
存储 Go
Go基本数据类型
主要介绍GO语言的基本数据类型
24 2
|
4天前
|
JSON JavaScript Go
Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档
553 2
|
7月前
|
Go
Go 语言学习之基础数据类型
Go 语言学习之基础数据类型
43 0
|
4天前
|
存储 安全 Go
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
|
4天前
|
存储 Go 开发者
【Go语言专栏】Go语言中的变量、常量和数据类型
【4月更文挑战第30天】Go语言以其简洁、高效和并发性备受开发者喜爱。本文聚焦变量、常量和数据类型。变量声明可使用`var`或类型推断,如`var a int = 10`和`b := "hello"`。常量用`const`声明,不可变,如`const pi float64 = 3.1415926`。数据类型包括基本类型(数值、布尔、字符串)和复合类型(数组、切片、结构体、接口)。理解这些基础将助力开发者深入学习Go语言的高级特性。
|
4天前
|
Go
Golang深入浅出之-Go数据类型详解:整型、浮点型与布尔型
【4月更文挑战第20天】Go语言基础数据类型包括整型(有符号和无符号,如`int8`、`uint32`)、浮点型(`float32`、`float64`)和布尔型(`true`、`false`)。理解它们的范围和特性,以及注意溢出、精度损失、类型转换等问题,是编写高效Go代码的关键。例如,整型溢出可能导致模运算,浮点数比较可能有精度误差,布尔型不应用于数值计算。了解这些易错点,能帮助写出更健壮的代码。
29 0
|
4天前
|
存储 Go 开发者
掌握Go语言:Go语言基本数据类型与特殊数据类型详解(8)
掌握Go语言:Go语言基本数据类型与特殊数据类型详解(8)
|
4天前
|
存储 算法 Go
Go语言高级数据类型详解
【2月更文挑战第2天】Go语言除了基础数据类型和引用类型外,还提供了一些高级数据类型,这些类型在特定场景下非常有用。本文将深入探讨Go语言中的高级数据类型,包括指针、自定义类型、匿名类型、结构体嵌入、接口嵌入和可变参数函数,帮助读者更全面地理解并掌握这些高级特性。