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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vscode编辑器 js 输入log自动补全

最近换了新电脑&#xff0c;新下载了Vscode&#xff0c;记录一下设置项。 Vscode 版本 想要的效果 js文件中输入log&#xff08;点击tab键&#xff09;&#xff0c;自动补全为 console.log() Vscode 文件》首选项》设置 搜索&#xff1a;snippets Emmet: Show Suggestions…

计算机毕业设计源码 | 基于SpringBoot的线上教学系统 答疑辅导网站(附源码)

1&#xff0c;项目介绍 1.1 项目背景 网络问答平台经历了多年的发展&#xff0c;目前处于一个日益成熟的状态。最早的网络问答平台是知乎&#xff0c;知乎的创立者认为有许多信息在互联网上没有被记录和共享&#xff0c;于是他们决定创造一个平台&#xff0c;能够让更多人可以…

【强训笔记】day22

NO.1 思路&#xff1a;将情况全部枚举出来。 代码实现&#xff1a; #include <iostream> #include<string> using namespace std;string a,b; int main() {cin>>a>>b;int ma.size(),nb.size();int retm;for(int i0;i<n-m;i){int tmp0;for(int j…

软文撰写注意事项有哪些?

软文&#xff0c;作为一种隐性的广告形式&#xff0c;越来越受到企业的青睐。一篇高质量的软文&#xff0c;不仅能吸引读者的眼球&#xff0c;还能在潜移默化中传递品牌价值。撰写一篇高质量的软文&#xff0c;并非一蹴而就。从开头到发布&#xff0c;每一个环节都需要精心打磨…

Charger之二输入电压动态电源原理(VIN-DPM)

主要内容 Charger的VIN-DPM 前篇内容&#xff1a;电池管理IC&#xff08;Charger&#xff09;了解一下&#xff1f; 领资料&#xff1a;点下方↓名片关注回复&#xff1a;粉丝群 正文 一、 VIN-DPM概念 VIN-DPM是指输入电压动态电源管理&#xff08;Input voltage dynamic…

C++ QT设计模式 (第二版)

第3章 Qt简介 3.2 Qt核心模块 Qt是一个大库&#xff0c;由数个较小的库或者模块组成&#xff0c;最为常见的如下&#xff1a;core、gui、xml、sql、phonon、webkit&#xff0c;除了core和gui&#xff0c;这些模块都需要在qmake的工程文件中启用 QTextStream 流&#xff0c;Qdat…

表现孤独的短视频:成都鼎茂宏升文化传媒公司

表现孤独的短视频&#xff1a;孤独之美与心灵的对话 在短视频的浪潮中&#xff0c;有一种特殊的情感表达形式逐渐崭露头角——那就是表现孤独的短视频。这些视频以其独特的视角和深刻的情感内涵&#xff0c;引发了广大观众的共鸣。表现孤独的短视频&#xff1a;成都鼎茂宏升文…

activiti——网关配置

文章目录 前言网关介绍代码案例测试各项网关排他网关 ExclusiveGateway1、绘制流程图2、编写测试代码 并行网关ParallelGateway1、绘制流程图2、编写测试代码 包含网关InclusiveGateway1、绘制流程图2、编写测试代码 前言 在activiti工作流中&#xff0c;还有一个组件也很重要…

代码随想录算法训练营第五十三天

今天同事说他要离职啦&#xff0c;还挣挺多的&#xff0c;我也慢慢努力吧&#xff01;&#xff01; 儿子似乎有点斜颈&#xff0c;还好不是很大的病&#xff0c;儿子也开始面对人生的苦难啦。都好好加油生活&#xff01; 1143.最长公共子序列 二维可以理解一点。 class Solut…

Meilisearch使用过程趟过的坑

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

解决springboot+vue静态资源刷新后无法访问的问题

一、背景 原项目是有前后端分离设计&#xff0c;测试环境是centos系统&#xff0c;采用nginx代理和转发&#xff0c;项目正常运行。 项目近期上线到正式环境&#xff0c;结果更换了系统环境&#xff0c;需要放到一台windows系统中&#xff0c;前后端打成一个jar包&#xff0c;…

使用vue3+ts+vite从零开始搭建bolg(五):layout(持续更新中)

五、layout搭建 5.1静态搭建 在src下创建如图文件夹 这里用logo举例&#xff0c;在scripts里export <script lang"ts">export default {name: Logo,}</script> 然后在layout里引入 //引入左侧菜单顶部用户信息 import Logo from ./logo/index.vue 接…

跨境必看|TikTok账号运营的八大秘籍

国内的传统生意都是可以在抖音上做&#xff0c;那么也可以在TikTok 上重新做一遍。那该如何才能把握住这片巨大的蓝海&#xff0c;TikTok 账号的运营就成为了主要的关键了&#xff0c;对于TikTok账号运营的八大秘籍&#xff0c;大家一起看看是如何做的&#xff1f; 一、固定节…

算法_前缀和

DP34 【模板】前缀和 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n in.nextInt(),q in.ne…

NSSCTF Web方向的例题和相关知识点(二)

[SWPUCTF 2021 新生赛]Do_you_know_http 解题&#xff1a; 点击打开环境&#xff0c;是 提示说请使用wLLm浏览器访问 我们可以更改浏览器信息&#xff0c;在burp重放器中发包后发现是302重定向&#xff0c;但是提示说success成功&#xff0c;说明 我们修改是成功的&#xff…

如何写好设计文档

一、明确目的 在编写设计文档之前&#xff0c;首先要明确为什么需要写这份文档。设计文档是软件开发过程中的重要沟通工具&#xff0c;它有助于确保团队成员对项目有共同的理解&#xff0c;促进协作&#xff0c;便于变更管理&#xff0c;并提供历史记录。 二、编写方法 为目…

动手学深度学习17 使用和购买gpu

动手学深度学习16 Pytorch神经网络基础&#xff09; 5. GPUcolabNVIDIA GPUQA显存 5. GPU 课件&#xff1a; https://zh-v2.d2l.ai/chapter_deep-learning-computation/use-gpu.html 有GPU装cuda。 把模型参数放到指定设备上。 # 5.6. GPU # !nvidia-smi # 在命令行中&…

VictoriaMetrics

概念 介绍 VictoriaMetrics&#xff0c;是一个快速高效、经济并且可扩展的监控解决方案和时序数据库 本文均用VM简称VictoriaMetric 作用 用于作为prometheus的长期储存方案&#xff0c;代替prometheus存储监控采集的数据 优点 远程存储&#xff1a;可作为单一或多个Pro…

matlab使用1-基础

matlab使用1-基础 文章目录 matlab使用1-基础1. 界面介绍2. matlab变量3. matlab数据类型4. matlab矩阵操作5. matlab程序结构5.1 顺序结构5.2 循环结构5.3 分支结构 1. 界面介绍 命令行窗口输入&#xff1a;clc 可清除命令行窗口command window的内容 clc命令行窗口输入&…

C++ 多态性

一 多态性的分类 编译时的多态 函数重载 运算符重载 运行时的多态 虚函数 1 运算符重载的引入 使用C编写程序时&#xff0c;我们不仅要使用基本数据类型&#xff0c;还要设计新的数据类型-------类类型。 一般情况下&#xff0c;基本数据类型的运算都是运算符来表达&#x…