首页 > 其他分享 >golang基础知识查漏补缺(持续更新)

golang基础知识查漏补缺(持续更新)

时间:2023-02-26 16:01:03浏览次数:43  
标签:语句 ... 查漏 原生 基础知识 golang 面值 字符串 表达式

表达式与语句

简单来说,一个表达式表示一个值,而一条语句表示一个操作。 但是在实际中,有些个表达式可能同时表示多个值,有些语句可能是由很多更基本的语句组成的。 另外,根据场合不同,某些语句也可以被视为表达式。

参考链接:​​​https://www.bookstack.cn/read/Golang101-v1.16.a-1/expressions-and-statements.html​​

布尔值

布尔值可以和&&(AND)和||(OR)操作符结合,并且有短路行为:如果运算符左边值已经可以确定整个布尔表达式的值,那么运算符右边的值将不再被求值,因此下面的表达式总是安全的:

s != "" && s[0] == 'x'

其中s[0]操作如果应用于空字符串将会导致panic异常。

因为​​&&​​的优先级比​​||​​高(助记:​​&&​​对应逻辑乘法,​​||​​对应逻辑加法,乘法比加法优先级要高),下面形式的布尔表达式是不需要加小括弧的:

if 'a' <= c && c <= 'z' ||
'A' <= c && c <= 'Z' ||
'0' <= c && c <= '9' {
// ...ASCII letter or digit...
}

布尔值并不会隐式转换为数字值0或1,反之亦然。必须使用一个显式的if语句辅助转换:

i := 0
if b {
i = 1
}

如果需要经常做类似的转换,包装成一个函数会更方便:

// btoi returns 1 if b is true and 0 if false.
func btoi(b bool) int {
if b {
return 1
}
return 0
}

数字到布尔型的逆转换则非常简单,不过为了保持对称,我们也可以包装一个函数:

// itob reports whether i is non-zero.
func itob(i int) bool { return i != 0 }

字符串面值

字符串值也可以用字符串面值方式编写,只要将一系列字节序列包含在双引号内即可:

"Hello, world"

在一个双引号包含的字符串面值中,可以用以反斜杠​​\​​开头的转义序列插入任意的数据。下面的换行、回车和制表符等是常见的ASCII控制代码的转义方式:

\a      响铃
\b 退格
\f 换页
\n 换行
\r 回车
\t 制表符
\v 垂直制表符
\' 单引号(只用在 '\'' 形式的rune符号面值中)
\" 双引号(只用在 "..." 形式的字符串面值中)
\\ 反斜杠

一个原生的字符串面值形式是`...`,使用反引号代替双引号。在原生的字符串面值中,没有转义操作;全部的内容都是字面的意思,包含退格和换行,因此一个程序中的原生字符串面值可能跨越多行(译注:在原生字符串面值内部是无法直接写`字符的,可以用八进制或十六进制转义或+"`"连接字符串常量完成)。唯一的特殊处理是会删除回车以保证在所有平台上的值都是一样的,包括那些把回车也放入文本文件的系统(译注:Windows系统会把回车和换行一起放入文本文件中)。

原生字符串面值用于编写正则表达式会很方便,因为正则表达式往往会包含很多反斜杠。原生字符串面值同时被广泛应用于HTML模板、JSON面值、命令行提示信息以及那些需要扩展到多行的场景。

const GoUsage = `Go is a tool for managing Go source code.

Usage:
go command [arguments]
...`

标签:语句,...,查漏,原生,基础知识,golang,面值,字符串,表达式
From: https://blog.51cto.com/u_13622854/6086633

相关文章

  • golang,jwt-go实现生成token,中间件验证token
    前后端分离的项目。现在基本上都是JWT在go中通过https://github.com/dgrijalva/jwt-go 可以实现token的创建也解析注意:因为是案例,所以代码中很多配置是写死的,正常开发肯......
  • Golang微服务(二)
    Golang微服务(二)目录Golang微服务(二)注册中心选型consul环境consul常用API服务的增删查、健康检查gRPC的健康检查服务的负载均衡(相同服务多实例注册)配置中心nacos环境nacos......
  • Golang基于Mysql分布式锁实现集群主备
    背景集群中如果需要主备,可以基于Redis、zk的分布式锁等实现,本文将介绍如何利用Mysql分布式锁进行实现。原理数据库中包含数据字段(此处为Master的主机名)、版本号和上......
  • 基于图的路径搜索技术基础知识
    基于搜索的路径规划目录基于搜索的路径规划1.0图搜索基础1.1ConfigurationSpace(配置空间)1.2C-spaceObstacle1.3总结2.0图和搜索技术2.1图2.2图搜索概述2.3图......
  • 【感知机与神经网络基础知识(入门)】
    感知机与神经网络基础知识(入门)先看定义:人工神经网络(ArtificialNeuralNetworks,简写为ANNs)也简称为神经网络(NNs)在这里插入图片描述或称作连接模型(ConnectionModel),它......
  • 预训练语言模型基础知识串讲
    预训练语言模型基础知识串讲_Bolin-BGI的CSDN博客 ......
  • golang中的close函数
    close函数是用于关闭通道的。官方解释(摘自close函数源代码注释):Theclosebuilt-infunctionclosesachannel,whichmustbeeitherbidirectionalorsend-only.Itsho......
  • golang 日志
    packagelogimport( "NOONASN/global" "github.com/natefinch/lumberjack" "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" "path" "path/filepath")func......
  • Golang Slice
    Golang—SliceSlice是Go语言中的一种数据类型,又称动态数组,依托数组实现,可以方便的进行扩容、传递等,实际使用中比数组更灵活。实现原理Slice依托数组实现,底层数组对......
  • Android 基础知识4-2.10 GridLayout(网格布局)详解
    一、GridLayout(网格布局)概述        GridLayout布局是Android4.0以后引入的新布局,和TableLayout(表格布局)有点类似,不过它功能更多,也更加好用,最大的特点是放......