当前位置: 首页 > 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 Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

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

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

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...