【GO语言基础】前言

news2024/11/25 20:20:08

系列文章目录

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

文章目录

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


一、基础知识

包和函数

//声明本代码所属包
package main

import "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 main

import "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 main

import "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.go
            
bin 目录存放编译后的可执行文件。
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语言简化了很多种的语言风格,如去掉结尾的分号,为使用包引用无法编译这些强制性措施使得代码风格统一代码的简洁性增加同时提高可读性等优点。

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

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

相关文章

The Sandbox 中的建设者:走进 Sandja Studio

随着 The Sandbox 出版新功能的到来,来自世界各地的熟练建设者正在完成必要的步骤,推出他们的可玩体验并与社区分享。 在本期的《The Sandbox 建设者》中,我们将与Sandja Studio一起讨论他们的《星际考古学家》体验。 Sandja Studio 是一家…

ARM接口编程—UART(exynos 4412平台)

UART简介 UART Universal Asynchronous Receiver Transmitter即通用异步收发器,是一种通用的串行、异步通信总线该总线有两条数据线,可以实现全双工的发送和接收在嵌入式系统中常用于主机与辅助设备之间的通信 波特率 波特率用于描述UART通信时的通信…

企业架构LNMP学习笔记25

高可用服务搭建: HA高可用:是一个解决方案。 高可用HA(High Availability)是分布式系统架构中必须考虑的因素之一。它通常是指通过设计,减少系统服务不可用的时间,假设系统一直能够提供服务,我…

Navicat连接openGauss数据库报错

错误信息:fe_sendauth:invalid authentication request from server:AUTH_REQ_SASL_CONT without AUTH_REQ_SASL 解决步骤: 1)关闭防火墙: 切换root用户执行:su - root 输入密码 systemctl status firewalld 查…

用于独立系统应用的光伏MPPT铅酸电池充电控制器建模(Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【C++】静态库lib和动态库dll的优缺点、使用方法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

uniapp 悬浮窗-任意界面 Ba-FloatWinWeb

简介&#xff08;下载地址&#xff09; Ba-FloatWinWeb 是一款支持自定义任意界面的悬浮窗插件。采用webview方式&#xff0c;同时支持本地、网络地址&#xff1b;自带几种界面&#xff0c;可直接使用。 支持显示、更新、隐藏支持记录显示位置支持拖动支持监听点击事件支持自…

查看linux开发板的CPU频率

1&#xff09;查看CPU可设置的频率列表 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies 2&#xff09;查看CPU当前所使用的频率&#xff1a; cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 3&#xff09;设置CPU频率&#xff08;最高…

linux常用命令及解释大全(三)

目录 前言 一、字符设置和文件格式转换 二、文件系统分析 三、初始化一个文件系统 四、备份 五、光盘 六、网络 总结 前言 本篇文章继续介绍了一部分linux常用命令&#xff0c;包括字符设置和文件格式转换&#xff0c;文件系统分析&#xff0c;初始化一个文件系统&…

17 mysql global_variables session_variables

前言 这是一个关于 mysql 中的一些配置的探索 起因是需要 看一下 mysql 自增长的实现, 这里面涉及到两个变量 auto_increment_increment, auto_increment_offset, 然后 需要探索一下 这两个变量的来历 然后 就有了这里的相关介绍 global_variables 的初始化 global_va…

云数据库知识学习——云数据库产品、云数据库系统架构

一、云数据库产品 1.1、云数据库厂商概述 云数据库供应商主要分为三类。 ① 传统的数据库厂商&#xff0c;如 Teradata、Oracle、IBM DB2 和 Microsoft SQL Server 等。 ② 涉足数据库市场的云供应商&#xff0c;如 Amazon、Google、Yahoo!、阿里、百度、腾讯…

使用Python将网页数据保存到NoSQL数据库的方法和示例

随着大数据和人工智能技术的快速发展&#xff0c;对于大规模数据的处理需求日益增多。NoSQL数据库作为一种新兴的数据存储解决方案&#xff0c;具有高可扩展性、高性能和灵活性数据模型等优势&#xff0c;已经在许多行业得到广泛应用。传统的关系型数据库在处理海量数据时可能会…

我们来看看Kubernetes、Docker、Dockershim、Containerd、runc、CRI、CRI-O、OCI的到底有什么关系?

Kubernetes v1.20版本 的 release note 里说 deprecated docker。并且在后续版本 v1.24 正式删除了 dockershim 组件&#xff0c;这对我们有什么影响呢&#xff1f; 为了搞明白这件事情&#xff0c;以及理解一系列容器名词 docker, dockershim, containerd, containerd-shim, …

第10章 注册字符设备实验(iTOP-RK3568开发板驱动开发指南 )

在上一小节中已经对设备号的相关知识进行了讲解&#xff0c;并成功申请到了设备号&#xff0c;那在Linux系统中&#xff0c;设备号是怎样与字符设备进行关联的呢&#xff1f;字符设备又是怎样注册的呢&#xff1f;带着疑问&#xff0c;让我们开始本章节的学习吧。 10.1 注册字…

PostgreSQL 数据库使用 psql 导入 SQL

最近我们有一个 SQL 需要导入到 PostgreSQL &#xff0c;但数据格式使用的是用&#xff1a; -- -- TOC entry 7877 (class 0 OID 21961) -- Dependencies: 904 -- Data for Name: upload_references; Type: TABLE DATA; Schema: public; Owner: - --COPY public.upload_refere…

电脑数据恢复软件都有哪些,哪个好用

当涉及到机房使用的系统还原软件时&#xff0c;选择一个强大且稳定的工具对于确保计算机系统的安全性和可靠性至关重要。以下是五款常见的系统还原软件&#xff0c;它们具有出色的功能和性能&#xff0c;以满足不同用户的需求&#xff0c;大家可根据自己的需求来选择。 云顷还…

ARM接口编程—GPIO(exynox 4412平台)

GPIO简介 GPIO&#xff08;General-purpose input/output&#xff09;即通用型输入输出&#xff0c;GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连&#xff0c;从而实现与外部硬件设备的通讯、控制及信号采集等功能 GPIO寄存器配置 查看LED…

【运维 Pro】时序场景实践与原理 - 1. 分布与分区

【运维 Pro】: 是由 YMatrix 售前和售后团队负责的栏目。除了介绍日常的数据库运维和使用知识&#xff0c;我们更希望能够通过介绍这些知识背后的原理&#xff0c;让大家和我们一起感知数据库的美妙。 摘要 有别于其它场景&#xff0c;时序场景中的数据、查询都有着更为明显的…

即拼七人拼团系统开发模式具体应该怎么玩?

随着电商市场竞争力的不断加剧&#xff0c;如何提高顾客复购率&#xff0c;成为了每个电商平台都在纠结的难题。针对这种情况&#xff0c;即拼七人拼团模式应运而生&#xff0c;下面就来具体说一下这个模式具体应该怎么玩&#xff1f; 即拼七人拼团其实就是在电商平台上推出的一…

探究SpringWeb对于请求的处理过程

探究目的 在路径归一化被提出后&#xff0c;越来越多的未授权漏洞被爆出&#xff0c;而这些未授权多半跟spring自身对路由分发的处理机制有关。今天就来探究一下到底spring处理了什么导致了才导致鉴权被绕过这样严重的问题。 DispatcherServlet介绍 首先在分析spring对请求处…