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

Golang学习笔记_01——包

文章目录

    • 包(package)
      • 1. 定义
      • 2. 导入
      • 3. 初始化
      • 4. 可见性
      • 4. 注意
        • 4.1 包声明
        • 4.2 main包
        • 4.3 包的导入
        • 4.4标识符的可见性
        • 4.5 包的初始化
        • 4.6 避免命名冲突
        • 4.7 包的路径和名称
        • 4.8 匿名导入
        • 4.9 使用Go Modules


包(package)

在Golang(通常简称为Go)中,包(Package)是一个非常重要的概念,它用于组织代码,提高代码的可维护性和可重用性。包的概念类似于其他编程语言中的模块或命名空间。

1. 定义

在Go中,每个文件都属于一个包。包的声明位于文件的最顶部,使用package关键字。

package main

2. 导入

要在Go文件中使用其他包中的代码,需要使用import关键字导入该包。

import "fmt"

导入包时,可以使用别名来避免命名冲突或简化代码

import f "fmt"

3. 初始化

当一个包被导入时,Go会执行该包中的init函数(如果有的话)。

init函数在包的每个文件中都可以定义,但只能有一个(Go会自动合并)。

init函数没有参数,也没有返回值,并且不能被其他函数调用。它主要用于包的初始化工作。

package mypackageimport "fmt"func init() {fmt.Println("mypackage is initialized")
}

4. 可见性

在Go中,通过首字母大小写来控制标识符(如变量、函数、类型等)的可见性。首字母大写的标识符是导出的,可以被其他包访问;首字母小写的标识符是未导出的,只能在包内部访问。

package package_demo// 导出的变量
var PublicVar = "I am public"// 未导出的变量
var privateVar = "I am private"// 导出的函数
func PublicFunc() {fmt.Println("Public function")
}// 未导出的函数
func privateFunc() {fmt.Println("Private function")
}

main.go文件

package mainimport ("Golang/package_demo"_ "Golang/package_demo""fmt"
)func main() {fmt.Println("Hello, 世界")// 测试包的可见性fmt.Println(package_demo.PublicFunc())fmt.Println(package_demo.PublicVar)
}

输出结果

package package_demo init
Hello, 世界
public function
public var

main.go文件

package mainimport ("Golang/package_demo"_ "Golang/package_demo""fmt"
)func main() {fmt.Println("Hello, 世界")// 测试包的可见性fmt.Println(package_demo.PublicFunc())fmt.Println(package_demo.PublicVar)fmt.Println(package_demo.privateVar)fmt.Println(package_demo.PrivateFunc())
}

输出结果

# command-line-arguments
./main.go:15:27: undefined: package_demo.privateVar
./main.go:16:27: undefined: package_demo.PrivateFunc

4. 注意

4.1 包声明
  • 每个Go源文件都必须在文件的第一行声明它所属的包,使用package 包名的语法。
  • 包的声明通常与所在的文件夹名称相同,但这不是强制性的,不过为了管理方便,建议保持一致。
4.2 main包
  • main包是特殊的,它是程序的入口点。如果一个包被声明为main,并且其中包含了main函数,那么这个包就可以被编译成一个可执行文件。
  • main函数必须放在main包下,否则程序无法编译执行。
4.3 包的导入
  • 要在代码中引用其他包的内容,需要使用import关键字。
  • 导入包的语法是import "包的路径",路径是从$GOPATH/src/或模块根目录开始计算的,使用/进行路径分隔。
  • 可以使用单行导入或多行导入的方式。
  • 如果包名较长,可以为导入的包设置别名,使用import 别名 "包的路径"的语法。
4.4标识符的可见性
  • 在Go语言中,如果一个标识符(如变量、常量、类型、函数等)的首字母大写,则它是对外可见的(public),可以被其他包访问。
  • 如果首字母小写,则它是包内可见的(private),只能在当前包内使用。
4.5 包的初始化
  • 在Go语言程序执行时,导入包语句会自动触发包内部init()函数的调用。
  • init()函数没有参数也没有返回值,它在程序运行时自动被调用执行,不能在代码中主动调用它。
  • 如果有多个包被导入,Go编译器会构建出一个树状的包引用关系,并根据引用顺序决定初始化顺序。
4.6 避免命名冲突
  • 在同一个包下,不能有相同的函数名或全局变量名,否则会导致重复定义的编译错误。
  • 如果不同的包中有相同名称的标识符,并且这些包都被导入到同一个文件中,那么需要通过包名来区分这些标识符。
4.7 包的路径和名称
  • 包的路径应该是唯一的,以避免命名冲突。
  • 包名可以包含小写字母和数字,但不能包含特殊字符(如-)或大写字母(虽然技术上可以,但通常不推荐)。
4.8 匿名导入
  • 如果只希望导入包而不使用包内部的数据,可以使用匿名导入的方式,即import _ "包的路径"
  • 匿名导入的包与其他方式导入的包一样都会被编译到可执行文件中,但不会在代码中使用该包提供的标识符。
4.9 使用Go Modules
  • 对于新项目,建议使用Go Modules来管理依赖关系。
  • 在项目的根目录下创建go.mod文件,并运行go mod init命令来初始化模块。
  • 使用Go Modules时,包的路径通常是相对于模块根的路径。
  • 包下的以_test.go结尾的文件,是测试文件,不会在普通编译时包含。

相关文章:

Golang学习笔记_01——包

文章目录 包(package)1. 定义2. 导入3. 初始化4. 可见性4. 注意4.1 包声明4.2 main包4.3 包的导入4.4标识符的可见性4.5 包的初始化4.6 避免命名冲突4.7 包的路径和名称4.8 匿名导入4.9 使用Go Modules 包(package) 在Golang&…...

RPC设计--应用层缓冲区,TcpBuffer

为什么需要应用层的buffer 为了方便数据处理,从fd上直接读写然后做包的组装、拆解不够方便方便异步发送,将数据写到应用层buffer后即可返回,让epoll即event_loop去异步发送。提高发送效率,多个小包可合并发送 buffer 设计 可以…...

基于单片机智能控制的饮水机控制系统

基于单片机智能控制的饮水机控制系统,以STC89C52单片机为核心,利用防水型DS18B20温度传感器对饮水机内的水温做出检测,其次利用水位传感器对饮水机内的水量做出检测,并显示在OLED液晶显示屏上。用户在使用饮水机时,通过…...

路径规划 | 改进的人工势场法APF算法进行路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 改进的人工势场法(APF)路径规划算法 在路径规划中,人工势场法(APF)是一种常见的方法,但传统的APF算法容易陷入局部极小值,导致路径规…...

【云原生知识】Kubernets实践-前端服务如何访问后端服务

文章目录 概述步骤1:部署后端服务步骤2:配置Nginx步骤3:创建Nginx服务总结 如何确保 Nginx 能持续访问后端服务?相关文献 概述 假设你正在使用Kubernetes作为容器云平台,以下是如何配置Nginx以及相关服务,…...

【ubuntu18.04】ubuntu18.04安装EasyCwmp操作说明

参考链接 Tutorial – EasyCwmphttps://easycwmp.org/tutorial/ EasyCwmp 介绍 EasyCwmp 设计包括 2 个部分: EasyCwmp 核心:它包括 TR069 CWMP 引擎,负责与 ACS 服务器的通信。它是用 C 语言开发的。EasyCwmp DataModel:它包…...

使用Jackson库的ObjectMapper类将JSON字符串转换为Java的Map对象

本教程展示如何使用Jackson库的ObjectMapper类将JSON字符串转换为Java的Map对象。 下面是具体的步骤和代码示例,包括添加依赖项以及编写用于反序列化JSON字符串为Map的代码。 添加依赖项 首先,在你的项目中添加Jackson库的依赖。如果你使用的是Maven构…...

ASP.NET Core实现鉴权授权的几个库

System.IdentityModel.Tokens.Jwt 和 Microsoft.AspNetCore.Authentication.JwtBearer 是两个常用的库,分别用于处理 JWT(JSON Web Token)相关的任务。它们在功能上有一定重叠,但侧重点和使用场景有所不同。 1. System.IdentityM…...

MySql:数据类型

✨✨作者主页:嶔某✨✨ ✨✨所属专栏:MySql✨✨ 数据类型分类 分类数据类型说明数值类型BIT(M)位类型,M指定位数,默认值1,范围1~64TINYINT [UNSIGNED]占用一个字节,带符号的范围 -128~127,无符…...

Couchbase的OLAP支持情况

Couchbase 是一个高性能的 NoSQL 数据库,主要用于在线事务处理(OLTP)场景,但它也提供了一些功能来支持在线分析处理(OLAP)需求。以下是 Couchbase 对 OLAP 支持的几个方面: 1. N1QL 查询语言 …...

企业级包管理器之搭建 npm 私有服务器 (6)

在企业级应用开发中,常常需要处理私有包的发布和管理。搭建 npm 私有服务器是一个理想的解决方案,它不仅能保证代码的私密性,还能提供更快的下载速度和更精细的权限设置。 一、搭建 npm 私有服务器的优势 保证代码私密性:在企业…...

Elasticsearch的一些介绍

你想问的可能是 **Elasticsearch**,以下是关于它的一些介绍: ### 概述 Elasticsearch是一个基于Apache Lucene库构建的开源分布式搜索和分析引擎,采用Java语言编写,具有高性能、可扩展性和易用性等特点,可用于各种数据…...

音乐网站设计与实现

文末获取源码和万字论文,制作不易,感谢点赞支持。 音乐网站设计与实现 摘 要 本音乐网站是针对目前音乐网站管理的实际需求,从实际工作出发,对过去的音乐网站管理系统存在的问题进行分析,结合计算机系统的结构、概念、…...

UE5 蓝图节点中文化

文章目录 一、问题背景二、解决方法 一、问题背景 在虚幻引擎5.4、5.5版本中,即使将编辑器语言设置为中文,还是会出现大部分蓝图节点没有中文化。 蓝图节点没有中文化图示: 二、解决方法 在左上角找到 编辑,打开 编辑器偏好设置…...

java抽奖系统登录下(四)

6.4 关于登录 最简单的登录: 1、web登录页填写登录信息,前端发送登录信息到后端; 2、后端接受登录信息,并校验。校验成功,返回成功结果。 这种登录会出现一个问题,用户1成功登录之后,获取到后台…...

解决阿里云轻量级服务器 Ubuntu 24.04.1 LTS 没网也 ping 不通 8.8.8.8 以及 route -n 没有输出任何转发信息

事情发生在两天前,位于公网的阿里云轻量级服务器(Ubuntu 24.04.1 LTS)忽然没网。主要是上次上服务器进行配置已经是一个多月前,最近也没有做什么事情,就忽然没网了,让人纳闷。更主要的是,上次备…...

跨域问题及其解决方案

跨域问题及其解决方案 在Web开发中,跨域问题是一个常见的安全限制,它涉及到浏览器的同源策略(Same-Origin Policy)。本文将详细解释跨域问题的原因、影响以及几种常见的解决方案,并提供在Java中的实现方法。 目录 跨…...

在CentOS中安装和卸载mysql

在CentOS7中安装和卸载mysql 卸载mysql1、查看是否安装过mysql2、查看mysql服务状态3、关闭mysql服务4、卸载mysql相关的rpm程序5、删除mysql相关的文件6、删除mysql的配置文件my.cnf 安装mysql1、下载mysql相关的rpm程序2、检查/tmp临时目录权限3、安装mysql前的依赖检查3、安…...

React简单入门 - [Next.js项目] - 页面跳转、AntD组件、二级目录等

须知 1Next.js 官网(英文)https://nextjs.org/2Next.js 文档(中文)https://nextjscn.org/docs/3Ant Design组件总览https://ant-design.antgroup.com/components/overview-cn4tailwindcss类名大全 官网https://www.tailwindcss.cn/docs/justify-content 5tailwindcss常用类…...

Redis安装和Python练习(Windows11 + Python3.X + Pycharm社区版)

环境 Windows11 Python3.X Pycharm社区版 思路 1 github下载redis压缩包 ,安装并启动redis服务,在客户端连接redis服务。 2 在pycharm中运行python程序,连接redis服务,熟悉redis的使用和巩固python语言。 3 python开发环境…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...