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

相关推荐
胚芽鞘6811 小时前
关于java项目中maven的理解
java·数据库·maven
岁忧2 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
CJi0NG2 小时前
【自用】JavaSE--算法、正则表达式、异常
java
Nejosi_念旧2 小时前
解读 Go 中的 constraints包
后端·golang·go
一斤代码2 小时前
vue3 下载图片(标签内容可转图)
前端·javascript·vue
风无雨2 小时前
GO 启动 简单服务
开发语言·后端·golang
Hellyc2 小时前
用户查询优惠券之缓存击穿
java·redis·缓存
中微子2 小时前
React Router 源码深度剖析解决面试中的深层次问题
前端·react.js
小明的小名叫小明2 小时前
Go从入门到精通(19)-协程(goroutine)与通道(channel)
后端·golang
光影少年2 小时前
从前端转go开发的学习路线
前端·学习·golang