Go基础——基础语法

1、简介

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。语法类似于C,专为高性能和并发程序而设计。通常用于网络编程、云服务器、游戏服务器、DevOps、Web应用、分布式系统、容器虚拟化、区块链领域等领域。
罗伯特·格瑞史莫(Robert Griesemer),罗布·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。

2、基本语法

标记

Go 语言可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。如:

fmt.Println("Hello, World!")

6 个标记是(每行一个):

fmt
.
Println
(
"Hello, World!"
)

行分隔符

在 Go 语法中,类似python一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号结尾,这些工作都将由 Go 编译器自动完成。
如果打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中并不建议这种做法。就算这样写,目前的Goland运行时会自动给你换行。

注释

注释不会被编译,每一个程序应该有相关注释。
单行注释是最常见的注释形式,可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾。如:

// 这是单行注释
/*啊啊啊啊啊啊啊啊啊啊啊啊这是多行注释
*/

标识符

标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
有效标识符:

mahesh kumar abc move_name a_123
myname50 _temp j a23b9 retVal

无效的标识符:

1ab(以数字开头)
case(关键字)
a+b(运算符是不允许的)

关键字

25常用关键字:
在这里插入图片描述
36预定义标识符:
在这里插入图片描述

2、语言结构

第一个Go程序:

package mainimport "fmt"//文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。
//文件夹名与包名没有直接关系,并非需要一致。
//同一个文件夹下的文件只能有一个包名,否则编译报错。func main() {fmt.Println("Hello, World!")
}
  • package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
  • import “fmt” 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
  • // 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
  • func main() 是程序开始执行的函数。main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init()函数则会先执行该函数)。
  • fmt.Println(…) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。 使用 fmt.Print(“hello, world\n”) 可以得到相同的结果。 Print 和Println这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。

需要注意的是 { 不能单独放在一行,在运行时会产生错误:
在这里插入图片描述

go程序运行(需先配置环境):
1、使用Goland运行,需选择配置go环境
在这里插入图片描述
2、使用命令行运行: go run test.go
在这里插入图片描述

3、数据类型

1、布尔型
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
2 数字类型
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
整型:
在这里插入图片描述
浮点型:
在这里插入图片描述
其他:int、uint大小取决于操作系统位数。
在这里插入图片描述

3、字符串类型:
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
4、派生类型:
包括:

  • 指针类型(Pointer)
  • 数组类型
  • 结构化类型(struct)
  • Channel 类型
  • 函数类型
  • 切片类型
  • 接口类型(interface)
  • Map 类型

4、变量

Go 语言中必须使用所有被声明的变量。变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是类似于js,使用 var 关键字定义一个字符串:

var variable string

可以一次声明多个变量,但是声明多个变量时,变量类型需要相同:

var variable 1, variable 2 int

变量命名的3种方式:

func test() {var a string   // 一般方式先声明a = "aaa"   // 再赋值var b = 2  // 根据值自行判定变量类型c := 3   // 初始化声明(推荐)  := fmt.Println(a)fmt.Println(b)fmt.Println(c)
}

多变量声明:

var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3var vname1, vname2, vname3 = v1, v2, v3 // 和 python 类似,不需要显示声明类型,自动推断vname1, vname2, vname3 := v1, v2, v3

注意:在相同的代码块中,不可以再次对于相同名称的变量使用初始化声明,即如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误。这是使用变量的首选形式,但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值。使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明。
如果一个变量初始化后,未进行赋值,数值类型为0,布尔类型为 false,字符串为 “”(空字符串):

package main
import "fmt"func main() {var a stringvar b intvar c boolfmt.Println(a)fmt.Println(b)fmt.Println(c)
}输出:
""
0    
false

5、常量

常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

const value1 = 2
const value2 string = "abcd"

可省略类型说明符,编译器可以根据变量的值来推断其类型。常量还可用作枚举:

package mainimport "unsafe"
const (a = "abc"b = len(a)c = unsafe.Sizeof(a)  // 返回变量在内存中占用的字节数
)func main(){println(a, b, c)
}

常量表达式中,函数必须是内置函数,否则编译不过。
常量中还存在一种特殊的常量:iota。(参见后续文章)

6、运算符

go语言运算符与C语言中运算符基本一致。

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

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

相关文章

mysql-linux归档版安装

什么是归档版安装?简单来说就是编译好的软件压缩打包版。 说明:我这里服务器之前已经装过一个不同版本的mysql,已经占用了3306端口,所以这里我用3307端口来演示,命令和官方的稍有不同,不过步骤都是差不多的…

搜索引擎搜索技巧总结

晚上在B站上刷到一个关于搜索技巧的干货视频,这个视频真的不错,结尾还提到了AI时代的搜索思路之前自己也零碎的探索出了一些搜索技巧,但是没有总结,就没法稳定的加入自己的工作流,持续提高效率受到这个视频的启发&…

计算机视觉 激光雷达结合无监督学习进行物体检测的工作原理

一、简述 激光雷达是目前正在改变世界的传感器。它集成在自动驾驶汽车、自主无人机、机器人、卫星、火箭等中。该传感器使用激光束了解世界,并测量激光击中目标返回所需的时间,输出是点云信息,利用这些信息,我们可以从3D点云中查找障碍物。 从自动驾驶汽车的角度看激光雷达…

专业135总分400+西安交通大学信息与通信工程学院909/815考研经验分享

今年初试发挥不错,400,专业课135,将近一年复习一路走来,感慨很多,希望以下经历可以给后来的同学提供一些参考。 初试备考经验 公共课:三门公共课,政治,英语,数学。在备考…

轮转数组(Java)

大家好我是苏麟 , 这篇文章是凑数的 ... 轮转数组 描述 : 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 题目 : 牛客 NC110 旋转数组: 这里牛客给出了数组长度我们直接用就可以了 . LeetCode 189.轮转数组 : 189. 轮…

Nginx 的配置文件(负载均衡,反向代理)

Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。 cmd查找端口是否使用:netstat -ano Nginx出现403 forbidden #解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户&…

田忌赛马(贪心算法)

分为两种情况: 1.田最快 快于 王最快(田最快面对任何都赢) ->故和王最快比,消耗王最快 2.田最快 小于等于 王最快(王最快面对任何都可赢) 则比最慢(意在找一匹无法赢任何马的马&#…

20.1 OpenSSL 字符BASE64压缩算法

OpenSSL 是一种开源的加密库,提供了一组用于加密和解密数据、验证数字证书以及实现各种安全协议的函数和工具。它可以用于创建和管理公钥和私钥、数字证书和其他安全凭据,还支持SSL/TLS、SSH、S/MIME、PKCS等常见的加密协议和标准。 OpenSSL 的功能非常…

shell实验

1.编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用户输入,例如:test1、test2、test3、....、test10 编写脚本,使用read -p提醒用户从键盘输入账户名前缀以…

[论文笔记]GTE

引言 今天带来今年的一篇文本嵌入论文GTE, 中文题目是 多阶段对比学习的通用文本嵌入。 作者提出了GTE,一个使用对阶段对比学习的通用文本嵌入。使用对比学习在多个来源的混合数据集上训练了一个统一的文本嵌入模型,通过在无监督预训练阶段和有监督微调阶段显著增加训练数…

hdlbits系列verilog解答(移位寄存器)-23

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 您将获得一个具有两个输入和一个输出的模块 my_dff (实现 D 触发器)。实例化其中的三个,然后将它们链接在一起以形成长度为 3 的移位寄存器。端口 clk 需要连接到所有实例。…

三篇论文:速览GPT在网络安全最新论文中的应用案例

GPT在网络安全领域的应用案例 写在最前面论文1:Chatgpt/CodeX引入会话式 APR 范例利用验证反馈LLM 的长期上下文窗口:更智能的反馈机制、更有效的信息合并策略、更复杂的模型结构、鼓励生成多样性和GPT类似的步骤:Conversational APR 对话式A…

Windows VS C++工程:包含目录、库目录、附加依赖项、附加包含目录、附加库目录配置与静态库、动态库的调用——以OCCI的配置为例

文章目录 1 包含目录(Include Directories)/ 附加包含目录(Additional Include Directories)1.1 区别和作用1.2 设置路径 2 库目录(Library Directories)/ 附加库目录(Additional Library Direc…

element ui el-table表格纵向横向滚动条去除并隐藏空白占位列

需求 当table内容列过多时,可通过height属性设置table高度以固定table高度、固定表头,使table内容可以滚动 现在需求是右侧滚动条不好看,需要去除滚动条,并隐藏滚动条所占列的位置 // ----------修改elementui表格的默认样式-…

Spring MVC的常用注解

目录 RequestMapping 例子: RequestMapping 支持什么类型的请求 使 RequestMapping 只支持特定的类型 RestController 通过 HTTP 请求传递参数给后端 1.传递单个参数 注意使⽤基本类型来接收参数的情况 2.传递多个参数 3.传递对象 4.RequestParam 后端参数…

配置Super-VLAN下的DHCP服务器示例

组网需求 如图1所示,某公司拥有两个部门,为了节省IP地址,部门A和部门B规划为同一网段;为了提升业务安全性,将不同部门的用户划分到不同VLAN中。企业管理员为了方便统一管理,希望部门内终端通过DHCP服务器动…

NX二次开发后处理中保存tcl变量值到文本

直接上代码: static bool GetTclValue(UF_MOM_id_t mom_id, char *szName, char *szInfo, std::string &stValue,bool bShowValue /* false*/) {UF_MOM_ask_string(mom_id, szName, (const char **)&szInfo);if (szInfo){stValue szInfo;if (bShowValue){…

【Spring】快速入门Spring Web MVC

文章目录 1. 什么是Spring Web MVC1.1 MVC1.2 Spring MVC 2. 使用Spring MVC2.1 项目创建2.2 建立连接2.2.1 RequestMapping 注解2.2.2 RestController 注解2.2.3 RequestMapping 使⽤2.2.4 RequestMapping 是什么请求?POST?GET?…&#xff1…

FL Studio21最新中文版DAW数字音频工作站

大概从去年开始,“电子音乐制作技术”成为越来越常见的说法。一开始我们觉得这种说法太过于笼统,因为电子音乐制作的技术早已不限于用在电子音乐,它更像是现代音乐制作技术。毕竟现代化的90%的音乐都是这么做出来的。 对,我们说的…

Spring概述

Spring概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 …