go语言基础1

news2025/1/13 14:22:29

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 == 1
    c2    //c2 == 2
)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Element-UI 快速入门指南

文章目录 一、安装 Element-UI1.1 使用 npm 安装1.2 使用 yarn 安装 二、引入 Element-UI三、使用 Element-UI 组件3.1 按钮组件3.2 输入框组件3.3 表单组件3.4 表格组件3.5 弹框组件 四、自定义主题4.1 安装主题工具4.2 初始化变量文件4.3 编译主题 五、总结 &#x1f389;欢迎…

5.12.1 Detecting and classifying lesions in mammograms with Deep Learning

计算机辅助检测 (CAD) 系统的开发是为了帮助放射科医生分析筛查性乳房 X 光检查&#xff0c;深度 CNN 有可能彻底改变医学图像分析。我们提出了一种基于最成功的对象检测框架之一 Faster R-CNN 的 CAD 系统。该系统无需任何人为干预即可检测乳房 X 光照片上的恶性或良性病变并对…

[数据结构1.0]快速排序

最近学习了快速排序&#xff0c;鼠鼠俺来做笔记了&#xff01; 本篇博客用排升序为例介绍快速排序&#xff01; 1.快速排序 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#x…

公示!教育部最新文件,9所新大学来了!

【SciencePub学术】5 月 13 日&#xff0c;教育部发布《关于拟同意设置本科高等学校的公示》。 根据《中华人民共和国高等教育法》《普通高等学校设置暂行条例》《普通本科学校设置暂行规定》《本科层次职业学校设置标准&#xff08;试行&#xff09;》等有关规定以及第八届全国…

手撸XXL-JOB(三)——本地定时任务管理平台

引言 在XXL-JOB中&#xff0c;有一个xxl-job-admin项目&#xff0c;这个就相当于定时任务的调度平台&#xff0c;我们参考XXL-JOB&#xff0c;也添加这么一个调度平台&#xff0c;由于篇幅有限&#xff0c;我们先实现一个本地的定时任务调度平台&#xff0c;至于如何调用远程的…

网络工程师----第二十八天

计算机基础 第五章&#xff1a;运输层 运输层的两个协议&#xff1a; 1、传输控制协议TCP&#xff1a; TCP最主要的特点&#xff1a; (1)TCP是面向连接的。应用程序在使用TCP协议之前&#xff0c;必须先建立连接。在传送数据完毕后&#xff0c;必须释放已经建立的TCP连接。…

开源收银系统在服装连锁店中发挥的重要作用

在当今竞争激烈的零售市场中&#xff0c;服装连锁店面临着日益复杂的经营环境和多样化的消费需求。在这样的背景下&#xff0c;开源收银系统成为了服装连锁店管理的关键利器。该系统不仅提供了高效的收银功能&#xff0c;还涵盖了进销存管理、会员管理、门店补货等多方面功能&a…

Github项目管理——仓库概述(一)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

【Cesium解读】Cesium中primitive/entity贴地

官方案例 Cesium Sandcastle Cesium Sandcastle scene.globe.depthTestAgainstTerrain true; True if primitives such as billboards, polylines, labels, etc. should be depth-tested against the terrain surface, or false if such primitives should always be draw…

7nm项目之模块实现——02 Placeopt分析

一、Log需要看什么 1.log最后的error 注意&#xff1a;warnning暂时可以不用过于关注&#xff0c;如果特别的warning出现问题&#xff0c;在其他方面也会体现 2.run time 在大型项目实际开发中&#xff0c;周期一般较长&#xff0c;可能几天过这几周&#xff0c;所以这就需要…

STK12 RPO模块学习 (1)

一、背景介绍 在STK12中&#xff0c;在Astrogator的模块上开发了新的模块&#xff08;Rendezvous and proximity operations)。轨道交会接近通常来说是一个很复杂的过程。RPO实现需要对轨道动力学有一个清晰的理解&#xff0c;并且对于Astrogator模块具备很强的背景和经验&…

前端工程化 - 快速通关 - vue

目录 npm 2.1环境 2.2命令 2.3使用流程 Vite 3.1简介 3.2实战 Vue3 4.1组件化 4.2SFC 4.3Vue工程 4.4基础使用 4.5进阶用法 4.6总结 npm npm 是 nodejs 中进行 包管理 的工具&#xff1b; 下载&#xff1a;Node.js — Run JavaScript Everywhere 2.1环境 ●安…

基于fastapi sqladmin开发,实现可动态配置admin

1. 功能介绍&#xff1a; 1. 支持动态创建表、类&#xff0c;属性&#xff0c;唯一约束、外键&#xff0c;索引&#xff0c;关系&#xff0c;无需写代码&#xff0c;快速创建业务对象&#xff1b; 2. 支持配置admin显示参数&#xff0c;支持sqladmin原生参数设置&#xff0c;动…

codeblock couldn‘t create project directory :path

1.原因&#xff1a; 因为我使用的是mac虚拟机&#xff0c;所以路径跟window不太一样&#xff0c;可能导致codeblock找不到路径&#xff0c;所以无法创建。 2.换一个跟window文件路径相同的就好&#xff0c;例如 C:\programPractice\myProject\

JavaEE之线程(5)——Java内存模型、内存可见性、volatile关键字

前言 volatile可以理解成轻量级的 synchronized&#xff0c; 它在多CPU开发中保证了共享变量的“可见性”&#xff0c;可见性我们可以理解成是&#xff1a;当一个线程修改一个共享变量时&#xff0c;另一个线程可以读到这个修改的值。由于它不会引起线程的上下文切换和调度&am…

arp icmp 等报文格式

ARP报文格式 ARP是一个独立的三层协议&#xff0c;所以ARP报文在向数据链路层传输时不需要经过IP协议的封装&#xff0c;而是直接生成自己的报文&#xff0c;其中包括ARP报头&#xff0c;到数据链路层后再由对应的数据链路层协议&#xff08;如以太网协议&#xff09;进行封装…

[第五空间 2021]WebFTP

目录扫描git泄露phpinfo.php 一开始想到是sql注入&#xff0c;但是不行。目录扫描&#xff0c;发现 .git 和 phpinfo.php 访问phpinfo.php&#xff0c;ctrlf 搜索 flag&#xff0c;找到 flag。

Pyqt中QThread传递自己定义的参数、类、函数

Pyqt中QThread传递自己定义的参数、类、函数 1 pyqt中Qthread传递自己定义的参数2 pyqt中Qthread传递自己定义的类3 pyqt中Qthread传递自己定义的函数4 pyqt中Qthread内部定义自己的函数5 pyqt中Qthread传递参数到内部定义自己的函数 1 pyqt中Qthread传递自己定义的参数 在PyQ…

选择法(数值排序)(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明排序函数sort; void sort(int a[], int n);int main() {//初始化变量值&#xff1b;int i, a[10];//填充数组&#xff1b;printf("请输入10个整数\n&…