当前位置: 首页 > news >正文

【GO语言基础】前言

系列文章目录

【Go语言学习】ide安装与配置
【GO语言基础】前言
【GO语言基础】变量常量
【GO语言基础】数据类型

文章目录

  • 系列文章目录
  • 一、基础知识
    • 包和函数
      • 函数声明
      • 语法简洁性
    • 括号成对出现
    • GO常用DOS命令
    • 命名规则
    • 项目目录结构
    • 注释
  • 总结


一、基础知识

包和函数

//声明本代码所属包
package mainimport "fmt"//导入fmt包func main() {//声明一个名为main的函数,main为主函数为go的入口,不定义程序无法运行fmt.Println("hello,golang")//打印hello.golang
}

这段代码引入三个关键字package,import和func

package main:

  • package 关键字用于声明当前代码文件所属的包(package)。在 Go中,每个代码文件都必须属于一个包,且一个包内可以包含多个代码文件。main 是一个特殊的包名,表示这是一个可执行程序的入口点。在一个 Go可执行程序中,必须包含一个 main 包,它包含了 main 函数作为程序的入口。

import "fmt":

  • import 关键字用于导入其他包,以便在当前包中使用其功能。在这个代码中,通过 import “fmt” 导入了 fmt 包,fmt包提供了格式化输入和输出的函数,例如 Println 用于打印文本到标准输出。如果未使用的导入会导致编译错误。

func main():

  • func 关键字用于声明函数。在 Go 中,main 函数是特殊的,它是程序的入口点,当程序启动时,会首先执行 main 函数。 main函数没有参数,并且也没有返回值。 大括号 {} 用于包含函数的主体代码。

fmt.Println("hello, golang"):

  • 这是 main 函数的主体代码。它使用 fmt 包中的 Println 函数,打印文本 "hello, golang"到标准输出(通常是终端窗口)。

函数声明

使用func关键字声明函数。函数可以返回多个值,通过逗号分隔。函数可以作为参数和返回值。

package mainimport "fmt"
//定义函数Add
func Add(a, b int) int {return a + b
}
//调用函数Add
func main() {fmt.Println(Add(100, 200))
}

语法简洁性

import如果未使用go文件无法通过编译,go编译器是一行一行编译,不要把语句写到一行,否则会产生错误。
在这里插入图片描述
行数较长:使用"内容内容 ",换行
在这里插入图片描述

括号成对出现

在这里插入图片描述

GO常用DOS命令

go help:用于快速显示帮助。
go run: 用于快速测试和运行Go源代码文件,特别是在开发阶段。
go build: 用于将Go代码编译成可执行文件,方便在不同环境中运行。
go test: 用于运行测试用例,确保代码的正确性和稳定性。
go fmt: 用于格式化代码,使其符合Go语言的标准格式,以提高代码的可读性。
go get: 用于获取并安装外部依赖库,方便项目中使用第三方包。
go mod init: 用于初始化Go模块,开启模块管理功能。
go mod tidy: 用于整理和清理项目中的依赖关系,移除不再使用的依赖项。
go mod vendor: 将依赖项复制到项目的vendor目录中,以实现更好的版本控制。
go doc: 查看代码实体的文档,方便了解和使用标准库以及其他包的功能。
go install: 编译并安装Go程序,将可执行文件安装到$GOPATH/bin目录。

在这里插入图片描述

命名规则

文件命名规则:

  1. Go语言源文件的扩展名为.go。 所有Go源代码文件都必须以.go为扩展名。
  2. 文件名应该描述其内容。 文件名应该反映包内包含的类型或功能。例如,包含HTTP处理程序的文件可以命名为http_handlers.go
  3. 避免使用特殊字符和空格。 文件名应该只包含字母、数字和下划线,避免使用特殊字符和空格。
  4. 包含测试代码的文件名应该以_test.go结尾。 用于单元测试和性能测试的文件应该以_test.go结尾,例如mypackage_test.go

变量命名规则:

  1. 变量名由字母、数字和下划线组成。 开头必须是字母或下划线,后面可以是字母、数字或下划线。例如:myVariable, value_1, _privateVar
  2. Go语言的变量名通常采用驼峰式命名法。 驼峰式命名法将单词连接在一起,每个单词的首字母大写,例如:myVariableName
  3. 避免使用缩写。 尽量使用具有描述性的变量名,以提高代码的可读性。例如,使用totalCount而不是totCnt。
  4. 避免使用Go语言的关键字作为变量名。 例如,不要使用func、for、if等作为变量名。
  5. 变量名应该有意义。 变量名应该反映其用途或内容,以便其他开发者能够理解代码的含义。
  6. 公共(导出的)变量名应该以大写字母开头。 如果你希望变量在包外部可见和访问,应该以大写字母开头。例如,MyPublicVariable可以在其他包中访问。

以下是无效的标识符:

关键字描述
break用于跳出循环
default用于switch语句的默认分支
func用于定义函数和方法
go用于启动并发协程
goto用于无条件跳转到指定标签的语句
if用于条件语句
return用于返回函数结果
defer用于延迟执行函数调用
else用于条件语句的备选分支
for用于循环语句
switch用于多路分支语句
const用于定义常量
fallthrough用于switch语句中的默认处理
case用于switch语句的分支判断
continue用于跳过当前循环迭代
type用于定义类型
var用于声明变量

这些关键字不能作为命名使用,因为它们具有特殊的语法含义,用于表示Go语言的关键字。

使用驼峰命名法(CamelCase)来命名变量和函数,遵循一致的命名规范,使代码更易读。

package mainimport "fmt"func Add(a, b int) int {return a + b
}func main() {var NewTest1 int = 1     //大驼峰命名法,单词首字母大写var testVersion = "v1.0" //小驼峰命名法,除第一个单词外,其他单词首字母大写fmt.Println(NewTest1)fmt.Println(testVersion)fmt.Println(Add(100, 200))
}

项目目录结构

第一种简易模板
/myproject  /bin  /pkg  /src  /project1  /go.mod  /main.go  /project2  /go.mod  /main.gobin 目录存放编译后的可执行文件。
pkg 目录存放编译后的包文件。
src 目录存放项目源文件。
project1 项目一
project2 项目二第二种详细目录:
myapp/
├── cmd/
│   ├── myapp/
│   │   └── main.go
├── internal/
│   ├── package1/
│   │   ├── module1.go
│   │   └── module2.go
│   ├── package2/
│   │   ├── module1.go
│   │   └── module2.go
├── pkg/
│   ├── myutil/
│   │   ├── util1.go
│   │   └── util2.go
├── api/
│   ├── api.go
├── web/
│   ├── static/
│   ├── templates/
│   ├── main.go
├── config/
│   ├── config.go
├── tests/
│   ├── test1.go
│   └── test2.go
├── README.md
└── go.mod
cmd/: 用于存放应用程序的入口文件。每个应用程序通常都有一个子目录,其名称是应用程序的名称(如myapp)。每个子目录中通常有一个main.go文件,它包含应用程序的入口点。
internal/: 用于存放项目的内部包(internal packages),这些包只能被本项目中的其他包所引用,而不能被外部包引用。
pkg/: 用于存放可以被其他项目引用的包,被称为"公共包"(public packages)。
api/: 存放用于API定义的代码,如接口、数据结构等。
web/: 存放Web应用程序相关的文件,如静态资源(static/)、模板文件(templates/)以及主要的main.go文件。
config/: 存放应用程序的配置文件,或者用于加载配置的代码。
tests/: 存放测试文件,通常以_test.go结尾,用于编写单元测试和集成测试。
README.md: 项目的说明文档,可以描述项目的用途、使用方法等。
go.mod: Go模块文件,用于定义项目的模块路径和依赖关系。

注释

行注释:
// 这是一个单行注释多行注释:
/*
这是一个多行注释,
可以跨越多行。
*/文档注释:
可以使用/**和*/来定义文档注释,这种注释通常用于生成API文档。文档注释应该出现在函数、方法或类型之前
/**  * 这是一个函数,用于计算两个数的和。  * @param a 第一个加数  * @param b 第二个加数  * @return 两个数的和  */  
func Add(a, b int) int {  return a + b  
}

总结

本文简单介绍go语言的一些基本的知识,go语言简化了很多种的语言风格,如去掉结尾的分号,为使用包引用无法编译这些强制性措施使得代码风格统一代码的简洁性增加同时提高可读性等优点。

相关文章:

【GO语言基础】前言

系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录一、基础知识包和函数函数声明语法简洁性 括号成对出现GO常用DOS命令命名规则项目目录结构注释 总结 一、基础知识 包和函数 //声明本代…...

巧妙的设计

1. 判空逻辑,如果为空,抛异常,下面代码来自kafka client: Assert.notNull(queue, () -> "No cache found for " + txIdPrefix); 2. 本地cache设计,一下代码来自kafka client: private final Map<String, BlockingQueue<CloseSafeProducer<K, V&g…...

前端JavaScript中MutationObserver:监测DOM变化的强大工具

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. MutationObserver简介 2. MutationObserver的属性 3. MutationObserver的应用场景 3.1 动态内容加载 …...

28335 GPIO作为输入的配置记录

28335 GPIO配置为输入&#xff0c;可以启动输入滤波功能&#xff0c;看了网上很多的讲解&#xff0c;把滤波配置记录一下&#xff1a; 主要是配置两个参数&#xff1a; GpioCtrlRegs.GPXCTRL.bit.QUALPRDX &#xff1a;用于配置采样的周期&#xff0c;由配置值和SYSCLKOUT共同…...

js脚本解决markdown本地图片->图床问题,附源代码和编译后的exe

前提条件 安装picgo-core,安装步骤: npm install -g picgo -g 然后配置图床 picgo set uploader ? Choose a(n) uploader (Use arrow keys)smms ❯ tcyungithubqiniuimguraliyunupyun (Move up and down to reveal more choices) 配置好后便可使用项目 快速开始-获取项目…...

C#不通过byte[],直接对内存映射文件复制内存

背景 多个进程直接需要传递大量图片&#xff0c;所以对性能要求较高。支付复制内存显然比转成byte[]再复制优越。 命名空间 using System; using System.Diagnostics; using System.Runtime.InteropServices; 代码 public CMainTestForm() { InitializeCo…...

ELK之Logstash启动异常:Logstash could not be started because there is already...

Logstash启动异常&#xff1a; Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the "path.data" setting. 提示我们已经有一个实例在用da…...

Matlab Simulink支持system generator插件

文章目录 前言一、System Generator 简介二、System Generator 特性三、System Generator 安装1、确定是否已安装 System Generator 工具2、vivado 卸载3、vivado 安装 四、解决版本不兼容问题五、使用 System Generator 前言 目前有在 Simulink 中开发完成后将其转换成 Veril…...

redis设计规范

部分内容参考&#xff1a;阿里redis开发规范 同时&#xff0c;结合shigen在实习中的实践经验总结。 key的名称设计 可读性和管理性 业务名: 表名: id pro:user:1001简洁性 控制key的长度&#xff0c;可以用缩写 transaction -> tras拒绝bigkey 防止网卡流量、慢查询&…...

用于非线性多载波卫星信道的多输入多输出符号速率信号数字预失真器DPD(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【Spark】用udf和withColumn在dafaframe中创建新列

udf使用 import org.apache.spark.sql.functions.udf udf接收一个函数&#xff08;func&#xff09;作为参数&#xff0c;返回一个UserDefinedFunction。 UserDefinedFunction接收列&#xff08;Column&#xff09;作为参数&#xff0c;并返回Column. func可以接收普通类型参数…...

AIGC 设计能替代真正的设计师设计吗?

AIGC 设计能替代真正的设计师设计吗&#xff1f; 目录 一、写在前面的话 二、AIGC 设计能替代真正的设计师吗&#xff1f; 1.1、传统设计师设计 1.2、AIGC设计 1.3、相关概念 1.4、观点分析 &#xff08;1&#xff09;、审美角度 &#xff08;2&#xff09;、版权角度 …...

【1++的C++进阶】之emplace详解

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的C进阶】 在前面C11系列的文章里&#xff0c;我们漏掉了几个知识点&#xff0c;这篇文章对其中一个知识点进行讲解&#xff0c;关于剩余的知识点的文章在后面会相继出炉。 C11中&#xff0c;针…...

React入门

一、react开始 1、react是什么 用于构建用户界面的JavaScript库 操作DOM呈现页面 &#xff08;发送请求获取数据和处理数据不由react处理&#xff09;fessbook开发 2、为什么要学 原生js操作DOM繁琐、效率低 使用原生js直接操作DOM&#xff0c;浏览器会进行大量重绘重排 原…...

第三方登录以及验证

第三方登录是指用户可以通过使用已有的第三方账号进行登录&#xff0c;而无需再次注册新的账号。常见的第三方登录平台包括微信、QQ、微博、GitHub等。 验证是指系统需要验证用户提供的信息是否正确&#xff0c;以确保用户可以登录系统。验证方式包括密码验证、手机号验证、邮…...

MS SQL Server问题汇总

1.报SQL Server Agent连接不上的错误 15:38:57.991 [debezium-sqlserverconnector-sqlserver_transaction_log_source-change-event-source-coordinator] WARN i.d.connector.sqlserver.SqlServerStreamingChangeEventSource - No maximum LSN recorded in the database; pl…...

在线海报图片设计器、图片编辑器源码/仿照稿定设计源码

在线海报设计系统素材设计源码是一个漂亮且功能强大的在线海报图片设计器&#xff0c;仿照稿定设计而成。该系统适用于多种场景&#xff0c;包括海报图片生成、电商分享图、文章长图、视频/公众号封面等。用户无需下载软件&#xff0c;即可轻松实现创意&#xff0c;迅速完成排版…...

KMP算法(C++)

KMP算法与BF算法不一样的在于&#xff0c;当主串与子串不匹配时&#xff0c;主串不回溯&#xff0c;选择了子串回溯&#xff0c;大大提高了运算效率。 借用了next1【】数组&#xff0c;让子串回溯。get_next函数求next1【】数组&#xff0c;get_next函数的实现难点在于下列几行…...

C++的异常类型与多级catch匹配

try-catch 的用法: try{// 可能抛出异常的语句 }catch(exceptionType variable){// 处理异常的语句 } 我们还遗留下一个问题,就是 catch 关键字后边的exceptionType variable,这节就来详细分析一下。exceptionType是异常类型,它指明了当前的 catch 可以处理什么类型的异常…...

查询IP地址可得到哪些信息

通过IP地址定位&#xff0c;可以获取一些基本的信息&#xff0c;包括以下内容&#xff1a; 1. 地理位置&#xff1a;你可以确定IP地址所在的地理位置&#xff0c;包括国家、州或省、城市和地理坐标。这通常是通过将IP地址与地理位置数据库进行匹配来实现的。 2. ISP&#xff…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...