Go语言基本语法(二)变量类型与类型转换

变量类型

Go语言(又称Golang)提供了一系列丰富的基本数据类型来满足不同的编程需求。以下是一些主要的基本数据类型及其示例:

1. 整型 (Integer Types)

`int`, `int8`, `int16`, `int32`, `int64`: 用于存储整数。`int`的具体大小依赖于目标架构(通常是32位或64位),而其他类型明确指定存储大小。

Go 复制代码
var age int = 30
var byteValue int8 = 127

2. 无符号整型 (Unsigned Integer Types)

`uint`, `uint8`, `uint16`, `uint32`, `uint64`: 类似于有符号整型,但只存储非负数。

Go 复制代码
var maxValue uint8 = 255

3. 浮点型 (Floating-point Types)

`float32`, `float64`: 用于存储小数。`float64`提供了更高的精度,是默认的浮点类型。

Go 复制代码
var pi float64 = 3.14159

4. 复数类型 (Complex Types)

`complex64`, `complex128`: 分别由两个float32和两个float64组成,用于存储复数。

Go 复制代码
var c complex128 = 3 + 4i

5. 布尔型 (Boolean Type)

`bool`: 只有两种可能的值:`true` 或 `false`,常用于条件判断。

Go 复制代码
var isTrue bool = true

6. 字符串类型 (String Type)

  • 字符串是由Unicode字符序列组成的,用双引号(`"`)包围。
Go 复制代码
var greeting string = "Hello, World!"

7. 字节与字符类型

字符串中的每一个元素叫做"字符",在遍历或者单个获取字符串元素时可以获得字符。

Go语言的字符有以下两种:

  • 一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。
  • 另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型。

byte 类型是 uint8 的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题,例如 var ch byte = 'A',字符使用单引号括起来。

Go 复制代码
var asciiChar byte = 'A'
var unicodeChar rune = '世'

类型转换

在Go语言中,由于它是一种静态类型语言,数据类型转换不是隐式的,而是需要程序员显式地进行。数据类型转换允许你改变一个变量或表达式的类型,以便能够在不同类型的上下文中正确使用它们。以下是关于Go语言中数据类型转换的一些关键点和示例:

基本转换语法

数据类型转换的基本语法是在目标类型前加上一个类型转换操作符,后跟待转换的表达式。例如,要将一个整型变量转换为浮点型,你可以这样做:

Go 复制代码
var intValue int = 10
var floatValue float64 = float64(intValue)

安全性和精度问题
**安全转换** :低精度类型转换到高精度类型通常是安全的,不会导致信息丢失。例如,将`int8`转换为`int64`。

**精度损失** :当从浮点型转换到整型时,小数部分会被截断,这可能会导致数据丢失。
**类型不兼容**:并非所有类型之间都可以直接转换,比如字符串和整数之间直接转换是不允许的,需要使用特定的包如`strconv`来进行转换。

特殊情况
**整型和浮点型转换** :可以直接通过类型转换操作符完成,但要注意精度损失。

**字符串和其他类型转换**:要将整型、浮点型转换为字符串,或者从字符串转换为整型、浮点型,可以使用`strconv`包中的函数,如`strconv.Itoa`、`strconv.ParseInt`、`strconv.FormatFloat`等。

示例:

Go 复制代码
**整型转换**
  var a int = 100
  var b int64 = int64(a)


**浮点型转换**
  var x float32 = 3.14
  var y float64 = float64(x)


**字符串与整型转换**
  s := "123"
  i, err := strconv.ParseInt(s) // 转换字符串到整型
  if err != nil {
      fmt.Println("转换错误:", err)
  } else {
      fmt.Println("转换后的整型:", i)
  }
  
  j := 456
  str := strconv.Itoa(j) // 转换整型到字符串
  fmt.Println("转换后的字符串:", str)
相关推荐
迷失蒲公英16 分钟前
XML与Go结构互转实现(序列化及反序列化)
xml·开发语言·golang
玉红7772 小时前
R语言的数据类型
开发语言·后端·golang
lvbu_2024war013 小时前
MATLAB语言的网络编程
开发语言·后端·golang
Bony-4 小时前
Go语言反射从入门到进阶
开发语言·后端·golang
每天写点bug5 小时前
【golang】map遍历注意事项
开发语言·算法·golang
tatasix8 小时前
Go Redis实现排行榜
开发语言·redis·golang
Bony-11 小时前
Go语言高并发实战案例分析
开发语言·后端·golang
ac-er888811 小时前
Golang并发机制以及它所使⽤的CSP并发模型
开发语言·后端·golang
Pandaconda11 小时前
【Golang 面试题】每日 3 题(六)
开发语言·笔记·后端·面试·职场和发展·golang·go
峰子201213 小时前
Go语言实现守护进程的挑战
开发语言·后端·面试·架构·golang·go