类型

简介: 类型

基本类型

bool

bool 类型表示一个布尔值,值为 true 或者 false 。示例:

a := true
b := false点击复制复制失败已复制


数字类型

有符号整型

类型 描述 大小 范围
int8 8 位有符号整型 8 [-128, 127]
int16 16 位有符号整型 16 [-32768, 32767]
int32 32 位有符号整型 32 [-2147483648, 2147483647]
int64 64 位有符号整型 64 [-9223372036854775808, 9223372036854775807]
int 根据不同的底层平台,表示 3264 位有符号整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。 32 位系统下是 32 位,而在 64 位系统下是 64 位。 32 位系统下是[-2147483648, 2147483647], 在 64 位系统下是[-9223372036854775808, 9223372036854775807]


Printf 方法中,使用 %T 格式说明符,可以打印出变量的类型。 Gounsafe 包提供了一个 Sizeof 函数,该函数接收变量并返回它的字节大小。


Tip

unsafe 包应该小心使用,因为使用 unsafe 包可能会带来可移植性问题


测试示例如下:

package main
import (  
    "fmt"
    "unsafe"
)
func main() {  
    var a int = 89
    b := 95
    fmt.Println("value of a is", a, "and b is", b)
    fmt.Printf("type of a is %T, size of a is %d", a, unsafe.Sizeof(a)) // a 的类型和大小
    fmt.Printf("\ntype of b is %T, size of b is %d", b, unsafe.Sizeof(b)) // b 的类型和大小
}点击复制复制失败已复制


输出结果为:

value of a is 89 and b is 95  
type of a is int, size of a is 8  
type of b is int, size of b is 8点击复制复制失败已复制


Tip

因为我的电脑是 64位 的,所以输出的都是8字节


无符号整型

类型 描述 大小 范围
uint8 8 位无符号整型 8 [0, 255]
uint16 16 位无符号整型 16 [0, 65535]
uint32 32 位无符号整型 32 [0, 4294967295]
uint64 64 位无符号整型 64 [0, 18446744073709551615]
uint 根据不同的底层平台,表示 3264 位无符号整型 32 位系统下是 32 位,而在 64 位系统下是 64 位。 32 位系统下是[0, 4294967295], 在 64 位系统下是[0, 18446744073709551615]


浮点型

  • float3232位浮点数
  • float6464位浮点数


浮点数的默认类型是 float64

package main
import (  
    "fmt"
)
func main() {  
    a, b := 5.67, 8.97
    fmt.Printf("type of a %T b %T\n", a, b)
    sum := a + b
    diff := a - b
    fmt.Println("sum", sum, "diff", diff)
    no1, no2 := 56, 89
    fmt.Println("sum", no1+no2, "diff", no1-no2)
}点击复制复制失败已复制


输出结果:

type of a float64 b float64
sum 14.64 diff -3.3000000000000007
sum 145 diff -33点击复制复制失败已复制


复数类型

  • complex64:实部和虚部都是float32 类型的的复数。
  • complex128:实部和虚部都是float64 类型的的复数。


Go 中内建函数 complex 用于创建一个包含实部和虚部的复数。 complex 函数的定义如下:

func complex(r, i FloatType) ComplexType点击复制复制失败已复制


该函数的参数分别是实部虚部,并返回一个复数类型。实部和虚部应该是相同类型,也就是 float32float64 。如果实部和虚部都是 float32 类型,则函数会返回一个 complex64 类型的复数。如果实部和虚部都是 float64 类型,则函数会返回一个 complex128 类型的复数。


还可以使用简短语法来创建复数:

c := 6 + 7i点击复制复制失败已复制


其他数字类型

  • byteuint8 的别名。
  • runeint32 的别名。


关于这两个类型的详细讨论,请转至笔记:Go语言基础——字符串


类型转换

Go 有着非常严格的强类型特征,并且没有自动类型提升或类型转换。所以如下代码会报错

package main
import (  
    "fmt"
)
func main() {  
    i := 55      //int
    j := 67.8    //float64
    sum := i + j //不允许 int + float64
    fmt.Println(sum)
}点击复制复制失败已复制


错误信息为:

main.go:10: invalid operation: i + j (mismatched types int and float64)点击复制复制失败已复制


如果要进行类型转换,需要显示声明类型转换,把 v 转换为 T 类型的语法是 T(v)


赋值的情况也是如此。把一个变量赋值给另一个不同类型的变量,需要显式的类型转换,示例如下:

package main
import (  
    "fmt"
)
func main() {  
    i := 10
    var j float64 = float64(i) // 若没有显式转换,该语句会报错
    fmt.Println("j", j)
}
目录
相关文章
|
8月前
|
机器学习/深度学习 编解码 vr&ar
NeurIPS 2024最佳论文,扩散模型的创新替代:基于多尺度预测的视觉自回归架构
本文详细解读NeurIPS 2024最佳论文《视觉自回归建模:基于下一尺度预测的可扩展图像生成》。该研究提出VAR模型,通过多尺度token图和VAR Transformer结构,实现高效、高质量的图像生成,解决了传统自回归模型在二维结构信息、泛化能力和计算效率上的局限。实验表明,VAR在图像质量和速度上超越现有扩散模型,并展示出良好的扩展性和零样本泛化能力。未来研究将聚焦于文本引导生成和视频生成等方向。
842 8
NeurIPS 2024最佳论文,扩散模型的创新替代:基于多尺度预测的视觉自回归架构
|
Rust 安全 编译器
初探 Rust 语言与环境搭建
Rust 是一门始于2006年的系统编程语言,由Mozilla研究员Graydon Hoare发起,旨在确保内存安全而不牺牲性能。通过所有权、借用和生命周期机制,Rust避免了空指针和数据竞争等问题,简化了并发编程。相较于C/C++,Rust在编译时预防内存错误,提供类似C++的语法和更高的安全性。Rust适用于系统编程、WebAssembly、嵌入式系统和工具开发等领域。其生态系统包括Cargo包管理器和活跃社区。学习资源如"The Book"和"Rust by Example"帮助新手入门。安装Rust可通过Rustup进行,支持跨平台操作。
311 2
初探 Rust 语言与环境搭建
|
存储 人工智能 物联网
端侧设备AI代理优化框架问世,领域内准确率可达97%
【7月更文挑战第30天】新框架Octo-planner提升端侧AI代理效率与准确性至97%。此框架由Nexa AI等机构合作研发,采用"Planner-Action"模式,将AI代理任务划分为规划与执行两部分,利用"Octopus"及"Phi-3 Mini"模型分别处理。通过fine-tuning技术及GPT-4辅助,实现在资源受限设备上的高性能。更多细节见论文: https://arxiv.org/pdf/2406.18082
224 1
|
安全 关系型数据库 分布式数据库
PolarDB-PG 安全体系全解,如何给客户7*24的放心
随着企业业务全面向数字化、在线化、智能化演进,企业面临着呈指数级递增的海量存储需求和挑战,传统的商业数据库已经难以满足和响应快速变化持续增长的业务诉求。云数据库凭借着成本、性能、业务连续性以及在线业务扩展等优势成为企业更优的选择。随着企业数据逐步上云,云数据库安全变得至关重要。云数据库安全不仅可以防止未授权访问和数据泄露问题,保护数据的机密性和完整性,还可以保护企业的声誉和客户信任,保障企业遵守法律法规的要求。只有通过确保云数据库的安全性,企业才能够在数字化时代中安心地利用云服务。
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的一周穿搭App附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的一周穿搭App附带文章源码部署视频讲解等
105 0
|
存储 网络协议 Ubuntu
Linux环境下SVN服务器的搭建与公网访问:使用cpolar端口映射的实现方法
由于文档资料越来越多,将所有资料都存放在自己的电脑上容易混淆,并且也不利于分享。这种情况下,考虑将资料上传SVN统一管理,这样一来其他人也能很方便的查略各种资料。
|
前端开发
【CSS动画02--卡片旋转3D】
【CSS动画02--卡片旋转3D】
|
存储 网络协议 算法
|
前端开发
CSS实现鼠标悬停图片向上浮动,放大,翻转
CSS实现鼠标悬停图片向上浮动,放大,翻转
455 0
|
NoSQL Java Redis
Springboot基于Redisson实现Redis分布式可重入锁【案例到源码分析】
Springboot基于Redisson实现Redis分布式可重入锁【案例到源码分析】
302 0
Springboot基于Redisson实现Redis分布式可重入锁【案例到源码分析】