Go基础——基础语法

news2024/11/16 2:46:01

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 main

import "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, v3

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

vname1, vname2, vname3 := v1, v2, v3

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

package main
import "fmt"

func main() {
	var a string
	var b int
	var c bool
	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
}

输出:
""
0    
false

5、常量

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

const value1 = 2
const value2 string = "abcd"

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

package main

import "unsafe"
const (
    a = "abc"
    b = len(a)
    c = unsafe.Sizeof(a)  // 返回变量在内存中占用的字节数
)

func main(){
    println(a, b, c)
}

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

6、运算符

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

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

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

相关文章

[AutoSAR系列] 1.3 AutoSar 架构

依AutoSAR及经验辛苦整理,原创保护,禁止转载。 专栏 《深入浅出AutoSAR》 1. 整体架构 ​ 图片来源: AutoSar 官网 从官往图中可以看出autosar作为汽车ECU软件架构,是通过分层来实现软硬件隔离。就像大多数操作系统一样&#xff…

Linux系统编程_线程:线程、互斥量、条件变量

1. 线程概述(与进程的区别及线程的优势)(437.1) Linux多线程编程初探 https://www.cnblogs.com/xiehongfeng100/p/4620852.html 进程与线程 典型的 UNIX/Linux 进程可以看成只有一个控制线程:一个进程在同一时刻只做…

低概率Bug,研发敷衍说复现不到

测试工作中,经常会遇到一些低概率出现的问题,如果再是个严重问题,那测试人员的压力无疑是很大的,一方面是因为低概率难以复现,另一面则是来自项目组的压力。 如何在测试时减少此类问题的重复投入,我的思考如…

I/O设备的概念和分类,I/O控制器

文章目录 1.什么是I/O设备2.按使用特性分类1.人机交互类外部设备2.存储设备3.网络通信设备 3.按传输速率分类1.低速设备:2.中速设备:3.高速设备: 4.按信息交换的单位分类1.块设备:2.字符设备: 5.I/O设备的机械部件6.I/O设备的电子部件(I/O控制器)1.接收和…

Python实现双目标定、畸变矫正、立体矫正

一,双目标定、畸变矫正、立体矫正的作用 双目目标定: 3D重建和测距:通过双目目标定,您可以确定两个摄像头之间的相对位置和朝向,从而能够根据视差信息计算物体的深度,进行三维重建和测距。姿态估计&#xf…

【ROS入门】机器人系统仿真——相关组件以及URDF集成Rviz

文章结构 相关组件URDF(Unified Robot Description Format)——创建机器人模型Gazebo——搭建仿真环境Rviz(ROS Visualization Tool)——显示机器人各种传感器感知到的环境信息 URDF集成RvizURDF相关语法robotlinkjoint URDF优化——xacro相关语法属性与算数运算宏文件包含 实操…

GD32_定时器输入捕获波形频率

GD32_定时器输入捕获波形频率(多通道轮询) 之前项目上用到一个使用定时器捕获输入采集风扇波形频率得到风扇转速的模块,作为笔记简单记录以下当时的逻辑结构和遇到的问题,有需要参考源码、有疑问或需要提供帮助的可以留言告知 。…

怎么防止公司终端电脑文件资料、设计图纸外泄?

PC营销页: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 天锐绿盾防泄密软件主要通过以下几种方式来防止公司设计图纸泄露: 透明加密:天锐绿盾采用透明加密技术,对设计图纸进行加密。这种加密方…

护眼灯台灯哪个牌子好?五款公认最专业护眼台灯推荐

今天跟大家聊聊现在热门的灯具,护眼台灯。目前的护眼台灯市场水很深,有很多不符标准、不适宜学习用光的护眼台灯,以低价吸引大家,在市面上热销,甚至销量非常高。其实这类产品在照度、光衰弱等多项核心参数上根本没有进…

p11 第63题 请设计一个判断字母序列是否对称的算法 桂林电子科技大学015年 数据结构(c语言代码实现)

本题代码如下 int symmetry(linklist* L)//判断循环双链表是否对称 {lnode* p (*L)->next, * q (*L)->prior;while (p ! q && q->next ! p){if (p->data ! q->data)return 0;else{p p->next;q q->prior;}}return 1; } 完整测试代码 #inclu…

快速排序(c语言代码实现)

交换排序:快速排序(不稳定的排序) 快速排序(Quick Sort)是一种常见的排序算法,它采用分治法的思想,对待排序序列进行划分,使得划分出的子序列可以分别进行排序,最终使整…

Python OpenCV剪裁图片并修改对应的Labelme标注文件

Python OpenCV剪裁图片并修改对应的Labelme标注文件 前言前提条件相关介绍实验环境剪裁图片并修改对应的Labelme标注文件代码实现 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-P…

RAG之微调垂域BGE的经验之谈

文章目录 前言数据格式部分代码训练参数接下来的尝试总结 前言 随着大模型的爆火,很多垂域行业都开始使用大模型来优化自己的业务,最典型的方法就是RAG(检索增强生成)了。简单来说就是利用检索技术,找出与用户问题相关…

一、PHP环境搭建[phpstorm]

一、安装 1.php编写工具 地址:https://www.jetbrains.com/phpstorm/download/#sectionwindows 图示: 2.php环境 解释:建议使用phpstudy进行安装,安装较为简单 链接:https://www.xp.cn/ 图示: 二、第…

四、W5100S/W5500+RP2040树莓派Pico<TCP Server数据回环测试>

文章目录 1. 前言2. 协议简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. TCP Server数据回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 在计算机网络中,TCP Server是不可或缺的角色,它…

APP逆向基础(APK流程)

APK的基本结构 Android体系结构和APK基本结构-CSDN博客 APK 打包流程 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )_adnroid 安装包优化,打指定资源_韩曙亮的博客-CSDN博客 APK安装流程

Linux下根目录都包含什么? 每个文件什么作用?

bin: binary, 二进制文件目录, 存储了可执行程序, 系统的命令对应的可执行程序都在这个目录中 sbin: super binary, root用户使用的一些二进制可执行程序 home: 存储了普通用户的家目录,家目录名和用户名相同 opt: 第三方软件的安装目录 (交叉编译等…

【tio-websocket】9、服务配置与维护—TioConfig

场景 我们在写 TCP Server 时,都会先选好一个端口以监听客户端连接,再创建N组线程池来执行相关的任务,譬如发送消息、解码数据包、处理数据包等任务,还要维护客户端连接的各种数据,为了和业务互动,还要把这些客户端连接和各种业务数据绑定起来,譬如把某个客户端绑定到一…

2001-2021年省、上市公司五年规划产业政策整理代码+匹配结果

2001-2021年省、上市公司五年规划产业政策整理代码匹配结果 1、时间:2001-2021年 2、来源:整理自wind、国民经济和社会发展五年规划纲要 3、指标: 上市公司数据指标: 国家代码、证券代码、证券简称、公司全称、公司英文全称、…

运行 Python 脚本/代码的几种方式

哈喽大家好,我是咸鱼 我们知道,python 脚本或者说 python 程序其实是一个包含了 python 代码的文件。要让它们实现特定功能,我们需要知道该如何运行(run)它 通过运行 python 代码,我们可以验证脚本/程序是…