go语言基础1

1.token

        token是构成源程序的基本不可在分割单元。编译器编译源程序的第一步就是将源程序分割为一个个独立的token,这个过程就是词法分析。Go语言的token可以分为关键字、标识符、操作符、分隔符和字面常量等,如图所示:

        Go token分隔符有两类:一类是操作符,还有一类自身没有特殊含义,仅用来分隔其他token,被称为纯分隔符。

        操作符:操作符就是 个天然的分隔符,同时其自身也是一个 token, 语句如下所示 sum:=a+b

        “:=”和“+”既是分隔符,也是token,所以这个语句被分割为5个token:“sum”、“:+”、“a”、“+”、“b”。

        纯分隔符:其本身不具备任何语法含义,只作为其他token的分割功能。包括空格、制表符、换行符和回车符,多个相邻的空格或者制表符会被编辑器看作分隔符处理,比如package    main

2.标识符

        标识符是用来标识变量、类型、常量等语法对象的符号名称,其在语法分析时作为一个token存在。编程语言的标识符总体上分为两类:一类是语言设计者预留的标识符,一类是编程者可以自定义的标识符。

        Go的标识符构成规则:开头一个字符必须是字母或者下划线,后面跟任意多个字符、数字或者下划线,并且区分大小写,Unicode字符可以作为标识符的构成,但是一般不推荐。我们在定义新的标识符时要避开Go语言预声明标识符,以免引起混乱。例如:_a11,a97,aa66,_aa99都可以,9aa,-9hh就不合规了。

        2.1 Go语言的预声明标识符有以下25个关键字:

                2.1.1 引导程序整体结构的8个关键字

package定义包名的关键字
import导入包名关键字
const常量声明关键字
var变量声明关键字
func函数定义关键字
defer延迟执行关键字
go并发语法糖关键字
return

函数返回关键字

                 2.1.2 声明复合数据模块的4个关键字

struct定义结构类型关键字
interface定义接口类型关键字
map声明或创建map类型关键字
chan声明或创建通道类型关键字

                 2.1.3 控制程序结构的13个关键字

if elseif else语句关键字
for range break continuefor循环使用的关键字
switch select type case default fallthroughswitch和select语句使用的关键字
gotogoto跳转语句关键字

             2.2 内置数据类型标识符20个

                        数据类型分为整型、字符型、字符串型、接口型和布尔型,其中数值分为整型、浮点型和复数型

整型byte int int8 int16 int32 int64 uint unint8 uint16 uint32 uint64 uintprt
浮点型float32 float64
复数型complex64 complex128
字符和字符串型string rune
接口型error
布尔型bool

              2.3 内置函数15个

        make new len cap append copy delete panic recover close complex real image Print Printin

              2.4 常见标识符4个

true flasetrue false ool 类型的两常量值:真和假
iota用在连续的枚举类型的声明中
nil指针/引用型额变量的默认值为nil

                2.5 空白标识符1个

                       空白标识符:_ 

      空白标识符有特殊的含义,用来声明一个匿名的变量,该变量在赋值表达式的左端,空白标识符引用通常被用作占位,比如忽略函数多个返回值中的一个和强制编译器做类型检查

        3.操作符和分隔符

                操作符就是语言所使用的符号集合包括运算符、显式的分隔符,以及其他语法辅助符号。操作符不但自身是一个token ,具备语法含义,同时其自身也是分隔其他token的分隔符.

                3.1 算术运算符5个

+        -         *         /         % 加减乘除余  

算术计算顺序是按照优先级从左到右进行的 当然也可以使用括号来改变操作数的结合顺序。

                3.2 位运算符6个

&         |         ^         &^         >>         <<        

位运算符用于整数的位运算操作

                3.3 赋值和赋值复核运算符13个

:=  =  +=  -=  *=  /=   %=  &=  |=  ^=    &^=   >>=    <<=

                3.4 比较运算符6个

>    >=    <    <=    ==    !=

                3.5 括号6个

(        )    {        }        [        ]

                3.6 逻辑运算符3个

&&        ||        !

                3.7 自增自减操作符2个

++        --

                3.8 其他运算符6个

:        ,        ;        .        ...        <-

4.变量和常量

        Go通过一个标识符来绑定一块特定的内存,后续对特定的内存额操作都可以使用该标识符来代替,这类绑定某个存储单元的标识符又可以分为两类:变量和常量,变量表示指定的内存是可以被修改的,常量表示指定的内存不能被修改。

        4.1 变量

        变量:使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义变量时指定的类型决定,该内存地址里面存放的内容是可变的。

        4.1.1 显示额完整声明

var varName dataType [ = value] 
关键字var用于变量声明。
varName 是变量名标识符。
dataType 基本类型。
value 是变量的初始值,初始值可以是字面量,也可以是其他变量名,还可以是一个表达式;如果不指定初值, Go 默认将该变量初始化为类型的零值。
Go 变量声明后就会立即为其分配空间
var a int = l 
var a int = 2*3 
var a int =b 

        4.1.2 短类型声明

varName := value 
:= 声明只能出现在函数内,包括方法内
此时go编译器会根据数据类型自动判断
go支持多个类型变量同时声明赋值,如a , b := 1,”hello" 

        4.2 常量

        常量使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义常量时指定的类型决定,而且该内存地址里面存放的内容不可以改变 Go 中常量分为布尔型、字符串型和 数值型常量

        

//类似枚举的 iota
const ( c0 = iota I I cO == 0 cl = iota I I cl == 1 c2 = iota I I c2 == 2 
)
//简写模式
const ( c0 = iota //cO == 0 c1    //c1 == 1c2    //c2 == 2
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/700457.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#多态性的应用

设计一个电脑游戏&#xff0c;游戏中有猪、牛、兔子、青蛙、鸭子等动物&#xff0c;这些动 物都继承于Vertebrata 类&#xff08;脊椎动物类&#xff09;&#xff0c;Vertebrata类有一个抽象方法Display()&#xff0c;每个动 物都从Vertebrata 类那里继承并重写了Display()方法…

数据驱动测试在接口测试和网站测试中的应用

什么是数据驱动测试 据驱动测试是一种测试方法&#xff0c;其中测试数据和测试逻辑是分开的&#xff0c;测试数据被存储在外部源中&#xff08;如Excel表格、JSON文件、数据库等&#xff09;&#xff0c;测试逻辑则独立于测试数据。在测试过程中&#xff0c;测试数据被读取并传…

ROS2入门21讲__第03讲__ROS2安装方法

目录 前言 Linux系统简介 Ubuntu系统简介 Ubuntu虚拟机安装 1. 下载系统镜像 2. 在虚拟机中创建系统 3. 设置虚拟机硬盘大小 4. 设置Ubuntu镜像路径 5. 启动虚拟机 6. 设置用户名和密码 7. 等待系统安装 8. 完成安装 ROS2系统安装 1. 设置编码 2. 添加源 3. 安装…

2024年5月面试准备

2024年5月面试准备 资料来源Java基础泛型注解异常反射SPI机制Java集合CollectionMap 并发基础线程并发关键字并发集合Lock核心类并发集合核心类原子类核心类线程池核心类ScheduledThreadPoolExecutorForkJoinPoolFokJoinTask JUC原子类: CAS, Unsafe和原子类详解JUC 工具类 Jav…

鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下)

本篇为快锁下篇&#xff0c;说清楚快锁在内核态的实现&#xff0c;解答以下问题&#xff0c;它们在上篇的末尾被提出来。 鸿蒙内核进程池默认上限是64个&#xff0c;除去两个内核进程外&#xff0c;剩下的都归属用户进程&#xff0c;理论上用户进程可以创建很多快锁&#xff0…

Android开发,日志级别

5个日志级别 Verbose (VERBOSE): 这是最低的日志级别&#xff0c;用于输出最为详尽的信息&#xff0c;包括开发和调试过程中的各种细节。在Log类中对应的方法是Log.v()。Debug (DEBUG): 此级别用于输出调试信息&#xff0c;帮助开发者理解程序运行流程或状态。通过Log.d()方法…

保研机试之【文件描述符】

A选项&#xff1a; 一个文件描述符对应着系统级文件表中的一项 B选项 C选项 D选项 E选项 F选项 综上&#xff0c;我认为这道题选择B、C、E、F~

九、e2studio VS STM32CubeIDE之const修饰BSP函数的形参

目录 一、概述/目的 二、通过串口发送函数对比 2.1 stm32 hal库 VS renesas FSP 2.2 const修改函数形参的作用 2.2.1 值传递-副本 2.2.2 指针传递&#xff08;就近原则&#xff09; 2.2.2.1 const修饰&#xff1a;*P 2.2.2.2 const修饰&#xff1a;指针变量P 2.2.2.3 …

[牛客网]——C语言刷题day2

答案&#xff1a;B 解析&#xff1a; char *p[10] 是指针数组,数组里存放了10个指针,在64位系统下指针占8个字节,所以sizeof(p) 10 * 8 80. char (*p1)[10]是数组指针,p1是一个指向存放10个char类型的数组的指针,所以sizeof(p1) 8. 答案&#xff1a;B 解析&#xff1a…

Vue3组件库开发项目实战——03封装Button组件/输出vitePress文档

Vue3组件库开发项目实战——01组件开发必备知识导学-CSDN博客 Vue3组件库开发项目实战——02项目搭建&#xff08;配置Eslint/Prettier/Sass/Tailwind CSS/VitePress/Vitest&#xff09;-CSDN博客 在前面两篇博客中&#xff0c;我分别介绍了组件库开发必学知识&#xff0c;以及…

Oracle sqlnet.ora配置文件

一、作用 这里可以看官网解释Parameters for the sqlnet.ora File (oracle.com) 该文件是配置文件配置文件。它驻留在客户端计算机和数据库服务器上。配置文件使用此文件进行存储和实现。可以使用文件中的访问控制参数配置数据库服务器。这些参数根据协议.sqlnet.orasqlnet.o…

CVHub | CVPR 2024 | 英伟达发布新一代视觉基础模型: AM-RADIO = CLIP + DINOv2 + SAM

本文来源公众号“CVHub”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;CVPR 2024 | 英伟达发布新一代视觉基础模型: AM-RADIO CLIP DINOv2 SAM 标题&#xff1a;《AM-RADIO: Agglomerative Vision Foundation Model Reduce Al…