Go语言入门|包、关键字和标识符

目录

Go语言

包文件

规则

关键字

规则

标识符

规则

预定义标识符


Go语言

Go语言是一种静态类型、编译型和并发型的编程语言,由Google开发。Go的源代码文件以.go为扩展名,文件名通常与包名保持一致。一个Go文件可以包含多个顶级声明,但通常最好只包含一个包的声明。文件名应该反映包名或者该文件所包含的主要类型或函数。

程序

  • 程序一般由关键字、常量、变量、运算符、类型和函数组成。
  • 程序中可能会使用到这些分隔符:括号 () ,中括号 [] 和大括号 {}
  • 程序中可能会使用到这些标点符号: . , ; :
  • 程序的代码通过语句来实现结构化。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
  • 如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分。

基本结构

package main

import "fmt"

func main() {
    fmt.Println("hello, world")
}

包文件

包(package)是Go语言中组织代码的基本单位,它提供了一种将代码划分为可重用模块的方式。通过包,开发者可以将功能相关的代码组织在一起,实现代码的模块化和封装。这有助于提高代码的可读性、可维护性和重用性。以下是有关Go语言中包的一些关键点:

1. 包的定义

每个Go源文件都以一个包声明开始,这是通过package关键字来指定的。包名通常是文件所在目录名称的一部分,Go编译器会将同一目录下所有声明为相同包名的.go文件编译为一个包。

package mypackage // 包的代码...

2. 包的导入

Go程序可以通过import关键字来导入其他包中的代码。这使得开发者可以轻松地重用标准库或其他第三方库提供的功能。

import ( "fmt"; "math/rand" )

3. 包的可见性

在Go中,如果一个包中的名称以大写字母开头,那么它是导出的,可以在其他包中直接使用。如果名称以小写字母开头,则它是未导出的,只能在定义它的包内部使用。

// 导出的函数,可以在其他包中使用
func PublicFunction() {
    // ...
}

// 未导出的函数,只能在本包内部使用
func privateFunction() {
    // ...
}

4. 包的初始化

当包被导入时,Go会执行该包中的一个初始化顺序。首先,所有被该包导入的包都会被初始化。然后,该包中的变量会被初始化。最后,该包的初始化函数(如果有的话)会被执行。

5. 包的文档

Go语言支持通过注释来为包和包中的元素编写文档。这些注释通常位于包声明之后和任何其他代码之前。使用godoc工具可以生成包的文档页面。

6. 包的构建

在Go中,包是构建和分发代码的基本单位。使用go build命令时,Go编译器会查找并编译所有依赖的包,然后将它们打包为一个可执行文件。

7. 包的测试

Go语言提供了一种简单的方式在包级别编写和运行测试。通过在测试文件中编写测试函数,并使用go test命令,可以自动运行测试并报告结果。

通过使用包,Go语言实现了代码的有效组织和模块化,这使得大型项目的开发变得更加高效和系统化。开发者可以利用包来创建可重用的代码库,促进代码的共享和维护。

规则

  • 包名和文件名一致:通常情况下,Go文件的名称应该与其所包含的包名相匹配。例如,如果一个文件包含http包,那么该文件最好命名为http.go
  • 避免使用下划线:在Go中,文件名不应包含下划线。这是因为下划线在Go的语法中有特殊的含义,例如在变量名和函数名中使用。
  • 简洁明了:文件名应该简短且具有描述性,以便于理解文件的内容和作用。

关键字

关键字在Go语言中具有特殊的意义,它们是预定义的保留字,用于表示特定的程序结构或语义。Go语言的关键字包括varforifelsestructfunc等。

规则

  • 不可用作标识符:关键字不能用作变量名、类型名、包名等标识符,因为它们在Go语言中有特定的语法含义。
  • 注意大小写:Go语言是大小写敏感的,因此ifIF会被视为两个不同的关键字。
  • 遵循语言规范:在使用关键字时,应遵循Go语言的官方文档和编程规范,以确保代码的可读性和一致性。
break default funcdefault
select casedefergo
mapstructchanstruct
gotopackageswitchpackage
fallthroughifrangeif
continueforimportfor
var   

标识符

标识符在Go语言中用于命名变量、类型、包、函数等程序元素。一个有效的Go标识符必须以字母或下划线开头,后面可以跟字母、数字或下划线。

规则

  • 有效字符:标识符可以包含字母、数字和下划线,但不能以数字开头。
  • 大小写敏感:Go语言区分大小写,因此myVarmyvar是两个不同的标识符。
  • 避免与关键字冲突:标识符不应该与Go语言的关键字相同,以避免歧义和潜在的编译错误。
  • 有意义的命名:选择有意义的标识符可以提高代码的可读性和可维护性。例如,使用totalCount比简单的tn更好。

预定义标识符

Go 语言有 36 个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数。

append bool byte cap 
close complex complex64 complex128 
copy false float32 float64 
imag int int8 int16 
int32 int64 iota len 
make new nil panic 
print println real recover 
string true uint uint8 
uint16uint32uint64uintptr

 

 完

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【opencv】示例-train_HOG.cpp 训练和测试基于支持向量机(SVM)的行人检测器

#include "opencv2/imgproc.hpp" // 包含OpenCV图像处理头文件 #include "opencv2/highgui.hpp" // 包含OpenCV高层GUI(图形用户界面)头文件 #include "opencv2/ml.hpp" // 包含OpenCV机器学习模块头文件 #includ…

jupyter切换不同的内核(虚拟环境)(anaconda 24.1.2)

jupyter切换不同的内核(anaconda 24.1.2) 主要的两条命令: conda install ipykernel python -m ipykernel install --user --name 环境名称 anaconda的版本号 conda --version实例: 一、首先可以看到已经创…

【JDBC入门学习】

JDBC简介 注意:1.注册驱动可以不写了 2.导入jar包时要注意点击右键添加 package com.wudreamer.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;/* * jdbc 入门 * */ public class JdbcDemo {public static v…

软考中级工程师网络技术第二节网络体系结构

OSPF将路由器连接的物理网络划分为以下4种类型,以太网属于(25),X.25分组交换网属于(非广播多址网络NBMA)。 A 点对点网络 B 广播多址网络 C 点到多点网络 D 非广播多址网络 试题答案 正确答案: …

SDUT lab5-2

7-2 sdut-JAVA-Credit Card Number Validation 分数 10 全屏浏览 切换布局 作者 马新娟 单位 山东理工大学 Each type of credit card begins with a prefix or range of prefixes and is of a certain length. Table 1 shows the details of two commonly used credit ca…

LeetCode-31-下一个排列问题

题目说明 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。…

论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents

iclr 2024 reviewer评分 5688 引入了 SmartPlay,一种从 6 种不同游戏中提取的基准 衡量LLM作为智能体的能力 1 智能代理所需的能力 论文借鉴游戏设计的概念,确定了智能LLM代理的九项关键能力,并为每项能力确定了多个等级: 长文…

JVM虚拟机(五)强引用、软引用、弱引用、虚引用

目录 一、强引用二、软引用三、弱引用四、虚引用五、总结 引文: 在 Java 中一共存在 4 种引用:强、软、弱、虚。它们主要指的是,在进行垃圾回收的时候,对于不同的引用垃圾回收的情况是不一样的。下面我们就一起来看一下这 4 种引用…

白话微机:10.民风淳朴的MCS-51小镇(小镇方言:汇编)

1. 基本结构与周期 MCS-51系列单片机属于8位单片机用 8051单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可MCS-51单片机由CPU、存储器和I/O三部分组成CPU是指:运算器和控制器 “PC CPU 3BUS RAM I/O” 在执行指令过程中&#xff…

Java-Scanner类进阶+题目

Scanner进阶 接收整数数据时: 接收小数数据时: 例子: 可以先这样弄出scanner的框架: 未完待续... ...

介绍set和map容器

文章目录 1.什么是关联式容器2.什么是键值对3.树形结构的关联式容器3.1set3.1.2set的使用set的构造set的迭代器set的容量set的常用操作set的简单使用 3.2 mapmap的构造map的迭代器map的容量map的常用操作map的使用 3.3multiset3.4 multimap 在介绍set和map容器前先了解什么是关…

《GVL》论文笔记

原文链接 [2303.06378] Learning Grounded Vision-Language Representation for Versatile Understanding in Untrimmed Videos (arxiv.org) 原文笔记 What 《Learning Grounded Vision-Language Representation for Versatile Understanding in Untrimmed Videos》 全文一…

编曲知识19:自动化处理 发送原理 混响 延迟

自动化处理 发送原理 混响 延迟小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_661a68eae4b023c0a96a8b36?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 自动化处理 自动化 鼠标挪动到轨道左下角打开自动化轨道 或右键轨道-左键单击…

Node.js 中的 RSA 加密、解密、签名与验证详解

引言 在现代的网络通信中,数据安全显得尤为重要。RSA加密算法因其非对称的特性,广泛应用于数据的加密、解密、签名和验证等安全领域。本文将详细介绍RSA算法的基本原理,并结合Node.js环境,展示如何使用内置的crypto模块和第三方库…

RT-Thread 多级目录 scons 构建

前言 RT-Thread 默认使用 scons 进行工程的构建,虽然 RT-Thread BSP 中的 hello world 例程比较简单,实际项目开发,可能源码的工程会由多级目录,如何让多级的目录参与构建? scons 构建时,除了依赖工程的根…

libbpf-bootstrap库的代码结构介绍(用户层接口介绍),编译链接语句详细介绍,.skel.h文件介绍+示例,bpf程序的后续处理+文件关系总结

目录 libbpf-bootstrap 代码结构介绍 用户层函数 编译 查看 生成内核层的.o文件 第一模块 第二模块 第三模块 第四模块 第五模块 生成辅助文件(.skel.h) 介绍 示例 生成代码层的.o文件 第一模块 第二模块 第三模块 链接出可执行文件 后续总结 libbpf-bootst…

云服务器web环境之mariadb

1.安装mariadb服务 yum install mariadb-server 启动mariadb服务 systemctl start mariadb.service 输入mysql就能使用数据库了。 2.服务相关操作 systemctl stop mariadb.service systemctl restart mariadb.service 2.配置开机自启动 systemctl enable mariadb.serv…

AI克隆语音(基于GPT-SoVITS)

概述 使用GPT-SoVITS训练声音模型,实现文本转语音功能。可以模拟出语气,语速。如果数据质量足够高,可以达到非常相似的结果。相比于So-VITS-SVC需要的显卡配置更低,数据集更小(我的笔记本NVIDIA GeForce RTX 4050 Lap…

深入剖析MongoDB集群架构设计

目录 一、MongoDB集群架构介绍 1.1 主从复制 1.2 副本集 1.3 分片集群 二、副本集 3.1 主节点选举 3.2 oplog 3.2 主从同步 三、分片集群 3.1 分片策略 3.2 分片键的选择 3.3 何时选择分片集群 四、总结 一、MongoDB集群架构介绍 MongoDB 有三种集群架构模式,分…