Golang 字面量的表示

文章目录

1.前言

在 Go 语言中,字面量是用来表示固定值的表达式。Go 支持几种类型的字面量,包括整型、浮点型、字符串、字符、布尔值以及复合类型(如数组、切片、结构体、映射等)。

下面我将介绍一些在 Go 语言中使用字面量的常见技巧和最佳实践。

2.字面量

整型和浮点型字面量

十进制、八进制、十六进制和二进制表示:

go 复制代码
dec := 42           // 十进制
oct := 052          // 八进制,前缀是0
hex := 0x2A         // 十六进制,前缀是0x或0X
bin := 0b101010     // 二进制,前缀是0b或0B(Go 1.13+)

浮点型字面量:

go 复制代码
float1 := 3.14
float2 := 6.02e23   // 科学计数法
float3 := .123      // 有效但没有前导整数

数值字面表示中使用下划线分段来增强可读性。

从 Go 1.13 开始,下划线可以出现在整数、浮点数和虚部数字面量中,以用做分段符以增强可读性。 但是要注意,在一个数值字面表示中,一个下划线_不能出现在此字面表示的首尾,并且其两侧的字符必须为(相应进制的)数字字符或者进制表示头。

一些合法和不合法使用下划线的例子:

go 复制代码
/ 合法的使用下划线的例子
6_9          // == 69
0_33_77_22   // == 0337722
0x_Bad_Face  // == 0xBadFace
0X_1F_FFP-16 // == 0X1FFFP-16
0b1011_0111 + 0xA_B.Fp2i

// 非法的使用下划线的例子
_69        // 下划线不能出现在首尾
69_        // 下划线不能出现在首尾
6__9       // 下划线不能相连
0_xBadFace // x不是一个合法的八进制数字
1_.5       // .不是一个合法的十进制数字
1._5       // .不是一个合法的十进制数字

字符串和字符字面量

普通字符串:

go 复制代码
str := "Hello, world!"

原生字符串(反引号):可以包含换行符,不支持转义序列。

go 复制代码
rawStr := `Hello,
world!`

字符(rune)字面量:表示单个 Unicode 字符。

go 复制代码
char := 'A'          // rune 类型,代表 Unicode 码点

布尔型字面量

go 复制代码
trueVal := true
falseVal := false

复合类型字面量

数组和切片:

go 复制代码
array := [3]int{1, 2, 3}
slice := []int{1, 2, 3}

结构体:

go 复制代码
type Person struct {
    Name string
    Age  int
}
person := Person{"John Doe", 30}

映射(Map):

go 复制代码
dict := map[string]int{"one": 1, "two": 2}

使用字段名初始化结构体

这有助于提高代码的可读性,特别是当结构体有多个字段时。

go 复制代码
person := Person{
    Name: "Jane Doe",
    Age:  32,
}

使用索引初始化复合类型

对于数组、切片和映射,可以指定索引或键来初始化。

go 复制代码
slice := []int{0: 1, 1: 2, 2: 3}
mapExample := map[string]int{"first": 1, "second": 2}

3.结论

在 Go 语言中,字面量提供了一种简洁明了的方式来创建和初始化变量。通过使用不同类型的字面量,开发者可以清晰地表达他们的意图,同时保持代码的清晰和易于维护。以上介绍的字面量表示技巧可以帮助你更高效地使用 Go 语言。


参考文献

基本类型和它们的字面量表示 - Go语言101

相关推荐
weixin_460443563 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
子兮曰3 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
海鸥-w6 小时前
什么是AOP
java
Cc.Y6 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
paopaokaka_luck6 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787056 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev6 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
Sarvartha6 小时前
Lambda 表达式和函数式接口
java·开发语言
IMPYLH6 小时前
HTML 的 <video> 元素
前端·html
计算机毕业设计杰瑞7 小时前
【计算机毕设精品】基于SpringBoot的一体化教务与学业质量管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目
java·spring boot·课程设计