当前位置: 首页 > news >正文

初始Go语言2【标识符与关键字,操作符与表达式,变量、常量、字面量,变量作用域,注释与godoc】

文章目录

  • Go语言基础语法
    • 标识符与关键字
    • 操作符与表达式
    • 变量、常量、字面量
      • 变量类型
      • 变量声明
      • 变量初始化
      • 常量
      • 字面量
    • 变量作用域
    • 注释与godoc
      • 注释的形式
      • 注释的位置
      • go doc
      • godoc


Go语言基础语法

标识符与关键字

  go变量、常量、自定义类型、包、函数的命名方式必须遵循以下规则:

  1. 首字符可以是任意Unicode字符或下划线。
  2. 首字符之外的部分可以是Unicode字符、下划线或数字。
  3. 名字的长度无限制。

理论上名字里可以有汉字,甚至可以全是汉字,但实际中不要这么做。

Go语言关键字

break  default  func  interface  select  case  defer  go  map  struct  chan  else  goto  package  switch  const  if  range  type  continue  for  import  return  fallthrough  var

常量

true  false  iota  nil   

数据类型

int  int8  int16  int32  int64  uint  uint8  uint16  uint32  uint64  uintptr  float32  float64  complex128  complex64  bool  byte  rune  string  error

函数

make  len  cap  new  append  copy  close  delete  complex  real  imag  panic  recover

操作符与表达式

算法术运算符

运算符描述
+相加
-相减
*相乘
/相除
%求余
//arithmetic 算术运算
func arithmetic() {var a float32 = 8var b float32 = 3var c float32 = a + bvar d float32 = a - bvar e float32 = a * bvar f float32 = a / bfmt.Printf("a=%.3f, b=%.3f, c=%.3f, d=%.3f, e=%.3f, f=%.3f\n", a, b, c, d, e, f)
}

关系运算符

运算符描述
==检查两个值是否相等,如果相等返回 True 否则返回 False
!=检查两个值是否不相等,如果不相等返回 True 否则返回 False
>检查左边值是否大于右边值,如果是返回 True 否则返回 False
>=检查左边值是否大于等于右边值,如果是返回 True 否则返回 False
<检查左边值是否小于右边值,如果是返回 True 否则返回 False
<=检查左边值是否小于等于右边值,如果是返回 True 否则返回 False
//relational 关系运算符
func relational() {var a float32 = 8var b float32 = 3var c float32 = 8fmt.Printf("a==b吗 %t\n", a == b)fmt.Printf("a!=b吗 %t\n", a != b)fmt.Printf("a>b吗 %t\n", a > b)fmt.Printf("a>=b吗 %t\n", a >= b)fmt.Printf("a<c吗 %t\n", a < b)fmt.Printf("a<=c吗 %t\n", a <= c)
}

逻辑运算符

运算符描述
&逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False
||逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False
!逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True
//logistic 逻辑运算符
func logistic() {var a float32 = 8var b float32 = 3var c float32 = 8fmt.Printf("a>b && b>c吗 %t\n", a > b && b > c)fmt.Printf("a>b || b>c吗 %t\n", a > b || b > c)fmt.Printf("a>b不成立,对吗 %t\n", !(a > b))fmt.Printf("b>c不成立,对吗 %t\n", !(b > c))
}

位运算符

运算符描述
&参与运算的两数各对应的二进位相与(两位均为1才为1)
|参与运算的两数各对应的二进位相或(两位有一个为1就为1)
^参与运算的两数各对应的二进位相异或,当两对应的二进位相同时为0,不同时为1。作为一元运算符时表示按位取反,,符号位也跟着变
<<左移n位就是乘以2的n次方。a<<b是把a的各二进位全部左移b位,高位丢弃,低位补0。通过左移,符号位可能会变
>>右移n位就是除以2的n次方。a>>b是把a的各二进位全部右移b位,正数高位补0,负数高位补1
//bit_op 位运算
func bit_op() {fmt.Printf("os arch %s, int size %d\n", runtime.GOARCH, strconv.IntSize) //int是4字节还是8字节,取决于操作系统是32位还是64位var a int32 = 260fmt.Printf("260     %s\n", util.BinaryFormat(a))fmt.Printf("-260    %s\n", util.BinaryFormat(-a)) //负数用补码表示。在对应正数二进制表示的基础上,按拉取反,再末位加1fmt.Printf("260&4   %s\n", util.BinaryFormat(a&4))fmt.Printf("260|3   %s\n", util.BinaryFormat(a|3))fmt.Printf("260^7   %s\n", util.BinaryFormat(a^7))     //^作为二元运算符时表示异或fmt.Printf("^-260   %s\n", util.BinaryFormat(^-a))     //^作为一元运算符时表示按位取反,符号位也跟着变fmt.Printf("-260>>10 %s\n", util.BinaryFormat(-a>>10)) //正数高位补0,负数高位补1fmt.Printf("-260<<3 %s\n", util.BinaryFormat(-a<<3))   //负数左移,可能变成正数//go语言没有循环(无符号)左/右移符号   >>>  <<<
}

赋值运算符

运算符描述
=简单的赋值运算符,将一个表达式的值赋给一个左值
+=相加后再赋值
-=相减后再赋值
*=相乘后再赋值
/=相除后再赋值
%=求余后再赋值
<<=左移后赋值
>>=右移后赋值
&=按位与后赋值
|=按位或后赋值
^=按位异或后赋值
//assignment 赋值运算
func assignment() {var a, b int = 8, 3a += bfmt.Printf("a+=b %d\n", a)a, b = 8, 3a -= bfmt.Printf("a-=b %d\n", a)a, b = 8, 3a *= bfmt.Printf("a*=b %d\n", a)a, b = 8, 3a /= bfmt.Printf("a/=b %d\n", a)a, b = 8, 3a %= bfmt.Printf("a%%=b %d\n", a) //%在fmt里有特殊含意,所以需要前面再加个%转义一下a, b = 8, 3a <<= bfmt.Printf("a<<=b %d\n", a)a, b = 8, 3a >>= bfmt.Printf("a>>=b %d\n", a)a, b = 8, 3a &= bfmt.Printf("a&=b %d\n", a)a, b = 8, 3a |= bfmt.Printf("a|=b %d\n", a)a, b = 8, 3a ^= bfmt.Printf("a^=b %d\n", a)
}

变量、常量、字面量

变量类型

类型go变量类型fmt输出
整型int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64%d
浮点型float32 float64%f %e %g
布尔型bool%t
指针uintptr%p
引用map slice channel%v
字节byte%c
任意字符rune%c
字符串string%s
错误error%v

变量声明

  Go语言变量必须先声明再使用,所谓使用指读取或修改。
标题声明

var name string 
var age int 
var isOk bool

批量声明

var ( name string age int isOk bool 
)

变量初始化

  如果声明后未显式初始化,数值型初始化0,字符串初始化为空字符串,布尔型初始化为false,引用类型、函数、指针、接口初始化为nil。

var a string="china"  //初始化一个变量
var a="china"  //类型推断为string
var a,b int=3,7  //初始化多个变量
var a,b="china",7  //初始化多个变量,每个变量都单独地执行类型推断     

  函数内部的变量(非全局变量)可以通过:=声明并初始化。

a:=3

  下划线表示匿名变量。匿名变量不占命名空间,不会分配内存,因此可以重复使用。

_=2+4

常量

  常量在定义时必须赋值,且程序运行期间其值不能改变。

const PI float32=3.14const(PI=3.14E=2.71
)const(a=100b	//100,跟上一行的值相同c	//100,跟上一行的值相同
)

iota

const(a=iota	//0b		//1c		//2d		//3
)const(a=iota 	//0b		//1_		//2d		//3
)const(a=iota 	//0b=30    c=iota 	//2d		//3
)const(_=iota		// iota =0KB=1<<(10* iota) 	// iota =1MB=1<<(10* iota) 	// iota =2GB=1<<(10* iota) 	// iota =3TB=1<<(10* iota) 	// iota =4
)const(a,b=iota+1, iota+2	//1,2  iota =0c,d			//2,3  iota =1e,f			//3,4  iota =2
)

字面量

  字面量–没有出现变量名,直接出现了值。基础类型的字面量相当于是常量。

fmt.Printf("%t\n", 04 == 4.00) //用到了整型字面量和浮点型字面量
fmt.Printf("%v\n", .4i) //虚数字面量 0.4i
fmt.Printf("%t\n", '\u4f17' == '众') //Unicode和rune字面量
fmt.Printf("Hello\nWorld\n!\n") //字符串字面量

变量作用域

  对于全局变量,如果以大写字母开头,所有地方都可以访问,跨package访问时需要带上package名称;如果以小写字母开头,则本package内都可以访问。
  函数内部的局部变量,仅本函数内可以访问。{}可以固定一个作用域。内部声明的变量可以跟外部声明的变量有冲突,以内部的为准–就近原则。

var (A=3	//所有地方都可以访问b=4	//本package内可以访问
)func foo(){b:=5  //本函数内可以访问{b:=6  //本作用域内可以访问}
}

注释与godoc

注释的形式

  • 单行注释,以//打头。
  • 多行注释有2种形式:
    1. 连续多行以//打头,注意多行注释之间不能出现空行。
    2. 在段前使用/*,段尾使用*/。
  • 注释行前加缩进即可写go代码。
  • 注释中给定的关键词。NOTE: 引人注意,TODO: 将来需要优化,Deprecated: 变量或函数强烈建议不要再使用。
//Add 2个整数相加
//返回和。
//
//NOTE: 注释可以有多行,但中间不能出现空行(仅有//不算空行)。
func Add(a, b int) int {return a + b
}/*
Sub 函数使用示例:for i:=0;i<3;i++{Sub(i+1, i)}
看到了吗?只需要行前缩进,注释里就可以写go代码,是不是很简单。
*/
func Sub(a, b int) int {return a - b
}//TODO: Prod 该函数不能并发调用,需要优化
func Prod(a, b int) int {return a * b
}//Deprecated: Div 不要再调用了
func Div(a, b int) int {return a / b
}

注释的位置

  针对行的注释在行上方或右侧。函数的上方在func xxx()上方。结构体的注释在type xxx struct上方。包注释在package xxx的上方。一个包只需要在一个地方写包注释,通常会专门写一个doc.go,里面只有一行package xxx和关于包的注释。

// FormatBool, FormatFloat, FormatInt, and FormatUint convert values to strings:
//
//	s := strconv.FormatBool(true)
//	s := strconv.FormatFloat(3.1415, 'E', -1, 64)
//	s := strconv.FormatInt(-42, 16)
//	s := strconv.FormatUint(42, 16)
package fmt

go doc

  go doc是go自带的命令。

go doc entrance_class/util

上述命令查看entrance_class/util包的注释。

godoc

  godoc是第三方工具,可以为项目代码导出网页版的注释文档。安装godoc命令如下

go get -u golang.org/x/tools/cmd/godoc
go install golang.org/x/tools/cmd/godoc@latest

启动http服务:

godoc -http=:6060

用浏览器访问http://127.0.0.1:6060 ,可以查看go标准库的文档。

相关文章:

初始Go语言2【标识符与关键字,操作符与表达式,变量、常量、字面量,变量作用域,注释与godoc】

文章目录Go语言基础语法标识符与关键字操作符与表达式变量、常量、字面量变量类型变量声明变量初始化常量字面量变量作用域注释与godoc注释的形式注释的位置go docgodocGo语言基础语法 标识符与关键字 go变量、常量、自定义类型、包、函数的命名方式必须遵循以下规则&#xff…...

Vue计算属性详解

目录 ​编辑 1、什么是计算属性 2、为什么要有计算属性 1. 为什么不是使用模板语法 2. 为什么不是使用method对于复杂逻辑 3. 什么时候要用计算属性 4. 定义计算属性fullName 5. 计算属性的配置项 1、什么是计算属性 写在computed对象中的属性&#xff0c;本质上是…...

rk3568-AD按键驱动调试

rk3568-AD按键驱动调试转载请备注&#xff1a;daisy.skye的博客_CSDN博客-Qt,嵌入式,Linux领域博主dts设备树节点 /rk356x_linux_220118/kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi 板级设备树dts /home/scooper/jkD7/20221221/ido_evb3568_v2_android11_sdk/kernel/…...

Docker三剑客之swarm

一、什么是docker swarm Swarm是Docker公司推出的用来管理docker集群的平台&#xff0c;几乎全部用GO语言来完成的开发的&#xff0c;代码开源在https://github.com/docker/swarm&#xff0c; 它是将一群Docker宿主机变成一个单一的虚拟主机&#xff0c;Swarm使用标准的Docker…...

Lucene Solr Elasticsearch三者之间的关系,怎么选?

Lucene简介&#xff1a; Lucene主要用于构建文本搜索应用程序&#xff0c;包括Web搜索引擎、桌面搜索工具和商业应用程序。它提供了诸如单词分析、查询解析、搜索结果排序等功能&#xff0c;可以轻松地在大量文档中快速搜索和查找相关信息。 Lucene具有以下特点&#xff1a; …...

为你的网站加上Loading等待加载效果吧 | Loading页面加载添加教程

为你的网站加上Loading等待加载效果吧 | Loading页面加载添加教程 效果图 : 教程开始 新建一个loading样式css 将以下代码放进去 然后引用这个文件 code #Loadanimation{ background-color:#fff; height:100%; width:100%; position:fixed; z-index:1; ma…...

Redis安装和配置

网上有海量的Redis文章&#xff0c;写的都很详细。这里就是简单记录一下自己查aof问题过程中遇到的问题&#xff0c;主要是aof文件所在目录在redis.conf里的位置 1。在ubuntu16上安装Redis sudo apt-get install -y redis-server 2。修改redis配置 sudo vim /etc/redis/re…...

MobTech|如何使用秒验

什么是秒验&#xff1f; 秒验是MobTech公司提供的一款实现一键验证功能的产品&#xff0c;从根源上降低企业验证成本&#xff0c;有效提高拉新转化率&#xff0c;降低因验证带来的流失率&#xff0c;3秒完成手机号验证&#xff08;一键登录&#xff09;。 秒验主要整合了三大…...

CSS实现自动分页打印同时每页保留重复的自定义内容

当需要打印的内容过长时系统会产生自动分割页面&#xff0c;造成样式不太美观。使用CSS的 media print 结合 <table> 可以实现对分页样式的可控。效果如下&#xff1a; 假设有50条数据&#xff0c;打印时系统会自动分成两页&#xff0c;同时每页保留自定义的header和foo…...

基于prometheus的监控告警怎么实现?

基于 Prometheus 的监控告警实现一般需要以下几个步骤&#xff1a; 安装和配置 Prometheus&#xff1a;安装 Prometheus 并配置好需要监控的目标。可以使用 Prometheus 的配置文件&#xff08;prometheus.yml&#xff09;来指定需要监控的目标&#xff0c;例如服务、主机、容器…...

2007年4月全国计算机等级考试二级JAVA笔试试题及答案

2007年4月全国计算机等级考试二级JAVA笔试试题及答案 一、选择题 &#xff08;1&#xff09;已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF&#xff0c;则该二叉树的后序遍历为 A&#xff0e;GEDHFBCA B&#xff0e;DGEBHFCA C&#xff0e;ABCDEFGH D&#xff0e;…...

灌水玩玩 ChatGPT AIGC生成的有栈协同程序实现(例子)

CO&#xff1a; 你是一名 C/C 高级软件工程师。 请使用 stackful 协程&#xff0c;实现一个 Sleep 随眠的协同程序&#xff0c;注意并非 stackless 协程&#xff0c;不允许使用 C/C 17 以上的语言标准实现&#xff0c;允许使用 boost 基础框架类库。 ChatGPT&#xff1a; 好的…...

【砝码称重】暴力DFS(一半分)+ dp(可AC)

题目描述&#xff1a; 题目分析&#xff1a; 我也没有完全搞太明白&#xff0c;简单说说我的理解 1.dp【i】【j】表示前 i 个砝码&#xff0c;是否可以称出来重量为 j 的物品&#xff0c;如果可以的话&#xff0c;值为1&#xff0c;不可以 为0&#xff1b; 2.针对当前第 i 个…...

科大奥瑞物理实验——霍尔效应实验

实验名称&#xff1a;霍尔效应实验 1. 实验目的&#xff1a; 了解霍尔效应测量磁场的原理和方法&#xff1b;观察磁电效应现象&#xff1b;学会用霍尔元件测量磁场及元件参数的基本方法。 2. 实验器材&#xff1a; QS-H型霍尔效应实验仪 磁针 QS-H型霍尔效应测试仪 双刀开关…...

2023_深入学习HTML5

H5 基于html5和 css3和一部分JS API 结合的开发平台(环境) 语义化标签 header : 表示头部&#xff0c;块级元素 footer &#xff1a; 表示底部&#xff0c;块级元素 section &#xff1a;区块 nav &#xff1a; 表示导航链接 aside &#xff1a; 表示侧边栏 output &am…...

Apache iotdb-web-workbench 认证绕过漏洞(CVE-2023-24829)

漏洞简介 ​​ 影响版本 0.13.0 < 漏洞版本 < 0.13.3 漏洞主要来自于 iotdb-web-workbench​ IoTDB-Workbench是IoTDB的可视化管理工具&#xff0c;可对IoTDB的数据进行增删改查、权限控制等&#xff0c;简化IoTDB的使用及学习成本。iotdb-web-workbench​ 中存在不正…...

【7-1】Redis急速入门与复习

文章目录1、分布式架构概述本阶段规划什么是分布式架构单体架构与分布式架构 对比分布式架构优点分布式架构缺点设计原则2、为何引入Redis现有架构的弊端3、什么是NoSql&#xff1f;NoSqlNoSql优点NoSql常见分类4、什么是分布式缓存&#xff0c;什么是Redis&#xff1f;什么是分…...

5、操作系统——进程间通信(3)(system V-IPC:消息队列)

目录 1、管道的缺点 2、消息队列 3、消息队列的API &#xff08;1&#xff09;获取消息队列的ID&#xff08;类似文件的描述符&#xff09;(msgget) &#xff08;2&#xff09;发送、接收消息(msgrcv) (3)获取和设置消息队列的属性&#xff08;msgctl&#xff09; 4、消息队…...

C++vector容器用法详解

一、前言vector 是封装动态数组的顺序容器&#xff0c;连续存储数据&#xff0c;所以我们不仅可以通过迭代器访问存储在 vector 容器中的数据&#xff0c;还能用指向 vector 容器中的数据的常规指针访问数据。这意味着指向 vector 容器中的数据的指针能传递给任何期待指向数组元…...

Log4j2的Loggers详解

引言 官方配置文档&#xff1a;https://logging.apache.org/log4j/2.x/manual/filters.html Loggers节点 Loggers节点常见的有两种:Root和Logger <Loggers><Logger name"org.apache.logging.log4j.core.appender.db" level"debug" additivity&qu…...

离职见人品:软件测试工程师如何优雅交接,为职业生涯赋能

在职业旅程的每一次转折点&#xff0c;如何“结束”与如何“开始”同等重要。对于软件测试工程师而言&#xff0c;离职远非简单地提交代码、归还电脑那么简单。它更像是一次对个人职业素养、专业精神和人脉网络的集中检阅。一次专业、周到、负责任的交接&#xff0c;不仅能确保…...

用ESP32和MAX4466做个无线对讲机?手把手教你MQTT传音频(附完整代码)

用ESP32和MAX4466打造高保真无线对讲系统&#xff1a;从硬件搭建到音质优化 记得去年在创客空间第一次听到用ESP32传输的实时音频时&#xff0c;那种"原来物联网还能这么玩"的震撼感至今难忘。今天我们就来复刻这个魔法——用不到百元的硬件成本&#xff0c;构建一套…...

免费开源神器OpenMS:质谱数据分析的完整解决方案

免费开源神器OpenMS&#xff1a;质谱数据分析的完整解决方案 【免费下载链接】OpenMS The codebase of the OpenMS project 项目地址: https://gitcode.com/gh_mirrors/op/OpenMS 你是否正在寻找一款强大的开源工具来处理复杂的质谱数据&#xff1f;OpenMS正是你需要的质…...

Event-B精化实战(三)——分布式文件传输协议的奇偶校验优化

1. 从数值比较到奇偶校验的逻辑跃迁 第一次看到用奇偶性替代数值比较的方案时&#xff0c;我正坐在实验室调试一个分布式存储系统。当时系统里两个节点的指针同步逻辑已经让状态机复杂得像团乱麻&#xff0c;直到偶然翻到Event-B的奇偶校验优化案例&#xff0c;才恍然大悟——原…...

AI辅助开发:用自然语言描述需求,让快马平台自动生成精准的Copaw自动化脚本

AI辅助开发&#xff1a;用自然语言描述需求&#xff0c;让快马平台自动生成精准的Copaw自动化脚本 最近在做一个自动化测试项目&#xff0c;需要大量使用Copaw框架来模拟用户操作。作为一个刚接触Copaw的新手&#xff0c;最头疼的就是要花大量时间研究各种API和页面元素定位方…...

2025平航杯电子取证实战:从木马溯源到服务器渗透的完整链条分析

1. 木马溯源&#xff1a;从可疑流量到攻击者定位 2025年4月&#xff0c;杭州滨江警方接到一起特殊报案。市民刘晓倩&#xff08;化名倩倩&#xff09;发现自己的手机出现异常发热、电量消耗过快等现象&#xff0c;怀疑设备被人监控。这个看似普通的个人隐私案件&#xff0c;最终…...

提升openclaw开发效率:用快马一键生成算法调试与可视化工具

最近在优化openclaw机械爪控制算法时&#xff0c;发现调试过程特别耗时。每次修改参数后&#xff0c;都要重新编译代码、运行测试&#xff0c;还要手动记录数据。为了提升效率&#xff0c;我用InsCode(快马)平台快速搭建了一个可视化调试工具&#xff0c;效果出乎意料的好。分享…...

别再死记公式!一个Buck电路实例带你吃透‘小信号建模’到底在干什么

从Buck电路实战理解小信号建模&#xff1a;为什么工程师需要这个"数学翻译器"&#xff1f; 第一次接触小信号建模时&#xff0c;我和大多数电力电子初学者一样困惑——明明电路已经能用状态方程描述&#xff0c;为什么还要大费周章地推导那些看似复杂的传递函数&…...

VideoAgentTrek-ScreenFilter模型压缩与量化教程:在边缘设备上实现轻量部署

VideoAgentTrek-ScreenFilter模型压缩与量化教程&#xff1a;在边缘设备上实现轻量部署 想让一个原本需要强大GPU才能流畅运行的视频分析模型&#xff0c;在树莓派或者Jetson Nano这类小巧的边缘设备上也能跑起来吗&#xff1f;这听起来像是个不可能的任务&#xff0c;但通过模…...

Qwen3-VL-2B实战:快速搭建一个能“看懂”图片的智能聊天机器人

Qwen3-VL-2B实战&#xff1a;快速搭建一个能"看懂"图片的智能聊天机器人 1. 项目介绍与核心能力 1.1 什么是视觉语言模型 视觉语言模型&#xff08;Vision-Language Model&#xff09;是一种能够同时理解图像和文本的AI技术。不同于传统聊天机器人只能处理文字&am…...