当前位置: 首页 > 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…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...