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

【小白版】最简单的 goland package 教程包括自定义包的使用

一、Hello World

最简单的教程,就需要从最简单的事情开始说起:

  1. mkdir myapp
  2. cd myapp
  3. go mod init myapp // myapp是主项目名

这行命令将生成一个go.mod文件,这个文件会记录所有的包的依赖关系,一个空的go.mod只有项目名称和go版本号.

  1. nano main.go :
package mainimport "fmt"func main() {fmt.Println("Hello World!")
}
  1. go run main.go 直接运行或 go build -o run.exe 编译执行。

二、import go标准库/包

导入go语言的标准库非常简单,参见上例的Hello World中我们就导入了一个名为 fmt 的标准库,调用这个库里的Println函数:fmt.Println(“Hello World!”)


三、import 第三方包

  1. nano main.go:
package mainimport ("fmt""github.com/kataras/iris/v12" // iris是一个开源的Web框架
)func main() {fmt.Println("Hello World!")app := iris.New()fmt.Println(app.APIBuilder)
}
  1. 如何安装第三方包?
    这时候直接执行 go build -o run.exe 会报错提示找不到这个包:

no required module provides package github.com/kataras/iris; to add it:
go get github.com/kataras/iris/v12

错误信息里也提示了你需要用 go get 命令去获取这个包,现在输入:
go get github.com/kataras/iris/v12
当然,出于不能明说的原因,当你输入这行命令后,基本上是没有反应的,我们还需要这样一下:
go env -w GOPROXY=https://goproxy.cn,direct
然后再次输入:
go get github.com/kataras/iris/v12
系统将自动下载 iris 所需的文件,再次执行:
go build -o run.exe
一切正常。

现在,再次打开 go.mod,会发现自动添加了一堆包的依赖关系,因为iris这个包本身也引用了大量其他的第三方包,这些都会记录在go.mod里。

那么,刚才系统自动下载的iris包的文件实际存储在哪?
首先我们要知道GOPATH系统变量的值,在Windows下用:
echo %GOPATH% ,Linux下用 echo $GOPATH
得到这个变量的值后,打开 C:\Users\USERNAME\go\pkg 发现这些包都在这。


四、import 自己创建的包

  1. 在主项目的根目录下创建一个子目录:mkdir mypackage
  2. cd mypackage
  3. nano mypackage.go
package mypackage // 注意包名是我们自定义的,与文件夹名称一致import ("fmt"
)func Sayhi() { // 这里定义了一个Sayhi的函数,注意首字母一定要大写,否则外部无法访问,这和其他OOP语言的public和private类似fmt.Println("Hello I come from another Package")
}
  1. 回到主项目 nano main.go
package mainimport ("fmt""myapp/mypackage" // myapp是我们的主项目名,mypackage是我们自定义包名
)func main() {mypackage.Sayhi() // 调用mypackage下的Sayhi函数
}

五、后记

1、关于package main的特殊性
任何一个go项目都需要一个package main和一个 func main()函数,否则程序没有入口,无法运行。假设我们现在尝试一下在main.go中的第一行不使用package main而是随便创建一个比如package myapp,然后用build -o run.exe编译,尽管代码可以通过编译但却无法执行:

在这里插入图片描述


2、 相同的package但文件名不同的函数调用

比如说现在有2个文件: main.go 和 file.go

file.go 的内容是:

package mainimport "fmt"func Sayhello() {fmt.Println("Hi, I come from file1")
}

main.go的内容是:

package mainfunc main() {Sayhello()
}

尽管函数 Sayhello 并不存放在 main.go 中,但因为两个文件的第一行都是package main,因此在main.go 中我们不需要任何声明就可以正常调用 file.go 里的函数。存储在不同的文件中的代码,通过相同的package名聚合在一起,简单地将之视为一个大文件即可。

相关文章:

【小白版】最简单的 goland package 教程包括自定义包的使用

一、Hello World 最简单的教程,就需要从最简单的事情开始说起: mkdir myappcd myappgo mod init myapp // myapp是主项目名 这行命令将生成一个go.mod文件,这个文件会记录所有的包的依赖关系,一个空的go.mod只有项目名称和go版本…...

IMX6ULL的I2C驱动详细分析

IMX6ULL的I2C驱动详细分析 文章目录 IMX6ULL的I2C驱动详细分析i2c_imx_driver 的平台驱动注册i2c_imx_probe注册函数i2c_imx_algoI2C算法结构体i2c_imx_start开始I2Ci2c_imx_stop停止I2Ci2c_imx_isr中断服务函数i2c_imx_dma_writeDMA 进行写操作的 I2C 传输2c_imx_dma_readi2c_…...

日志迁移到 logback

目标 本次迁移的目标就是用 slf4jlogback 的日志框架来取代目前的 slf4jlog4j 如何迁移 基于 slf4j 的无痛迁移 项目本身是采用的 slf4jlog4j 日志架构&#xff0c;所以迁移到 logback 基本无痛 修改依赖 原本是 slf4jlog4&#xff0c;依赖如下 <dependency><gro…...

开源字节 CRM 系统

开源字节CRM是一款SaaS模式的客户关系管理软件&#xff0c;基于钉钉平台进行研发&#xff0c;以客户管理为核心&#xff0c;包含客户管理、销售全流程管理&#xff0c;合同订单、工单管理、移动审批、数据分析六大模块。 旨在助力企业销售全流程精细化、数字化管理&#xff0c…...

七、Spring Cloud Alibaba-Sentinel

一、引言 1、了解服务可用性问题&#xff0c;服务挂掉原因 缓存击穿、单点故障、流量激增、线程池爆满、CPU飙升、DB超时、缺乏容错机制或保护机制、负载不均、服务雪崩、异常没处理等。 服务雪崩效应&#xff1a;因服务提供者的不可用导致服务调用者的不可用&#xff0c;并将…...

机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化

什么是knn算法&#xff1f; KNN算法是一种基于实例的机器学习算法&#xff0c;其全称为K-最近邻算法&#xff08;K-Nearest Neighbors Algorithm&#xff09;。它是一种简单但非常有效的分类和回归算法。 该算法的基本思想是&#xff1a;对于一个新的输入样本&#xff0c;通过…...

【MySQL】MySQL基础知识详解

文章目录 1. MySQL概述1.1 数据库相关概念1.1.1 数据库、数据库管理系统与SQL1.1.2 关系型数据库与数据模型 1.2 MySQL数据库1.2.1 MySQL的安装与配置1.2.2 MySQL服务的启动与停止1.2.3 连接MySQL服务端 2. SQL2.1 SQL简介2.2 DDL2.2.1 数据库操作2.2.2 表操作2.2.2.1 创建表2.…...

RabbitMQ日常使用小结

一、使用场景 削峰、解耦、异步。 基于AMQP(高级消息队列协议)协议来统一数据交互,通过channel(网络信道)传递信息。erlang语言开发&#xff0c;并发量12000&#xff0c;支持持久化&#xff0c;稳定性好&#xff0c;集群不支持动态扩展。 RabbitMQ的基本概念 二、组成及工作流…...

​​​​​​​博物馆文物馆藏环境空气质量无线监控系统方案

博物馆文物馆藏环境空气质量无线监控系统方案 博物馆无线环境测控系统 博物馆恒温恒湿消毒净化系统 现代化博物馆空气质量一体化3D可视化管控平台 博物馆温湿度在线监控系统 博物馆光照在线监控系统 博物馆二氧化碳在线监控系统 博物馆在线监控系统 博物馆紫外线在线监控…...

测试理论----Bug的严重程度(Severity)和优先级(Priority)的分类

【原文链接】测试理论----Bug的严重程度&#xff08;Severity&#xff09;和优先级&#xff08;Priority&#xff09;的分类 一、Bug的严重程度&#xff08;Severity&#xff09; Bug的Severity&#xff08;严重程度&#xff09;指的是一个Bug对软件系统功能影响的程度&#…...

斯坦福、Nautilus Chain等联合主办的 Hackathon 活动,现已接受报名

由 Stanford Blockchain Accelerator、Zebec Protocol、 Nautilus Chain、Rootz Lab 共同主办的黑客松活动&#xff0c;现已接受优秀项目提交参赛申请。 在加密行业发展早期&#xff0c;密码极客们就始终在对区块链世界基础设施&#xff0c;在发展方向的无限可能性进行探索。而…...

00后卷王,把我们这些老油条卷的辞职信都写好了........

现在的小年轻真的卷得过分了。 前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家…...

JavaEE(系列12) -- 常见锁策略

目录 1. 乐观锁和悲观锁 2. 轻量级锁与重量级锁 3. 自旋锁和挂起等待锁 4. 互斥锁和读写锁 5. 可重入锁与不可重入锁 6. 死锁 6.1 死锁的必要条件 6.2 如何避免死锁 7. 公平锁和非公平锁 8. Synchronized原理及加锁过程 8.1 Synchronized 小结 8.2 加锁工作过程 8.2.1 偏向锁…...

前端nginx接口跨域

前提&#xff1a;vue项目本地接口通过proxy都可使用&#xff0c;但是项目部署在服务器上后发现所有接口出现503如下状况 简而言之&#xff1a;页面部署在域名为https://aa.bb.cc.com/vehicle/#/下&#xff0c;但是我接口需访问的是https:// azz.qqv.com/permission/company/gro…...

【国产虚拟仪器】基于 ZYNQ 的电能质量系统高速数据采集系统设计

随着电网中非线性负荷用户的不断增加 &#xff0c; 电能质量问题日益严重 。 高精度数据采集系统能够为电能质 量分析提供准确的数据支持 &#xff0c; 是解决电能质量问题的关键依据 。 通过对比现有高速采集系统的设计方案 &#xff0c; 主 控电路多以 ARM 微控制器搭配…...

Java前缀和算法

一.什么是前缀和算法 通俗来讲&#xff0c;前缀和算法就是使用一个新数组来储存原数组中前n-1个元素的和&#xff08;如果新数组的当前元素的下标为n&#xff0c;计算当前元素的值为原数组中从0到n-1下标数组元素的和&#xff09;&#xff0c;可能这样讲起来有点抽象&#xff0…...

pico 的两个双核相关函数的延时问题

pico高级API函数中&#xff0c; multicore_fifo_pop_timeout_us 和 multicore_fifo_push_timeout_us 的延时参数&#xff0c; 如修改为500微秒以上时&#xff0c;其延时似乎远远超过设定值&#xff0c;其反馈速度似乎被主核的交互所左右 &#xff0c;而修改为200以下时&#x…...

Doxygen源码分析: QCString类依赖的qstr系列C函数浅析

2023-05-20 17:02:21 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 1. doxygen 版本2. QCString 类简介3. qstr 系列函数浅析qmemmove()qsnprintfqstrdup()qstrfree()qstrlen()qstrcpy()qstrncpy()qisempty()qstrcmp()qstrncmp()qisspace()qstr…...

华为OD机试之一种字符串压缩表示的解压(Java源码)

一种字符串压缩表示的解压 题目描述 有一种简易压缩算法&#xff1a;针对全部由小写英文字母组成的字符串&#xff0c;将其中连续超过两个相同字母的部分压缩为连续个数加该字母&#xff0c;其他部分保持原样不变。 例如&#xff1a;字符串“aaabbccccd”经过压缩成为字符串“…...

Microsoft Project Online部署方案

目录 一、前言 二、Microsoft Project Online简介 三、Microsoft Project Online的优势 1、云端部署 2、多设备支持...

Get Jobs:你的智能求职导航员,让找工作不再像大海捞针

Get Jobs&#xff1a;你的智能求职导航员&#xff0c;让找工作不再像大海捞针 【免费下载链接】get_jobs &#x1f4bc;【AI找工作助手】全平台自动投简历脚本&#xff1a;(boss、前程无忧、猎聘、智联招聘) 项目地址: https://gitcode.com/gh_mirrors/ge/get_jobs 在求…...

山东大学软件学院项目实训-基于语言大模型的智能居家养老健康守护系统-个人博客(五)

智能健康陪诊与个性化干预 Agent 的设计与实现 前言 在基于语言大模型的智能居家养老系统中&#xff0c;我主要负责面向老人端的两个核心 AI Agent 的构建&#xff1a;健康陪诊 Agent 与 健康干预 Agent。前者作为首页全科问答入口提供 24 小时健康咨询服务&#xff0c;后者深度…...

卡梅德生物技术快报|蛋白的过表达质粒构建与生信分析实验全流程复盘

从事分子生物学实验的科研从业者&#xff0c;在开展功能蛋白研究时&#xff0c;蛋白的过表达质粒构建与诱导表达是必备核心技能。实操过程中&#xff0c;很多人会忽略前期生信分析的重要性&#xff0c;盲目设计引物、构建载体&#xff0c;导致蛋白的过表达失败、蛋白无活性、纯…...

初识递归算法

目录介绍例PythonC原理优缺点分析题目结尾本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 BY-SA协议。 因此&#xff0c;若需转载/引用本文&#xff0c;请注明作者并附原文链接&#xff0c;且禁止删除/修改本段文字。 违者必究&#xff0c;谢谢配合。…...

企业级Gemini投资回报率坍塌预警:5个高危信号+2个紧急干预阈值,今日不查,下季度预算或被砍30%

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Gemini生命周期价值分析 Gemini 模型作为 Google 推出的多模态大语言模型系列&#xff0c;其生命周期价值不仅体现在推理性能与响应速度上&#xff0c;更贯穿于训练、部署、监控、迭代与退役全过程。理解这一全…...

TunaMH算法:基于谱间隙优化的小批量MCMC精确采样

1. 项目概述&#xff1a;当MCMC遇见大数据&#xff0c;我们如何“精打细算”地采样&#xff1f;搞贝叶斯推断或者统计计算的朋友&#xff0c;对马尔可夫链蒙特卡洛&#xff08;MCMC&#xff09;肯定不陌生。这玩意儿就像个不知疲倦的探险家&#xff0c;在复杂的概率分布地形里四…...

30+平台文档一键免费下载:浏览器文档下载工具的终极解决方案

30平台文档一键免费下载&#xff1a;浏览器文档下载工具的终极解决方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档&#xff0c;但是相关网站浏览体验不好各种广告&#xff0c;各种登录验证&#xff0c;需要很多步骤才能下载文档&#xff0c;该脚本就是…...

漏洞研究工作流:从CVE追踪到实战提升的闭环方法论

1. 这不是“资源列表”&#xff0c;而是一套可落地的漏洞研究工作流很多人一看到“在线资源全攻略”就下意识点开收藏&#xff0c;然后扔进浏览器书签夹吃灰。我见过太多安全从业者——包括刚入行的蓝队新人、想补实战短板的渗透测试员、甚至部分做红队支撑的工程师——把CVE编…...

GORM 标签详解(数据库字段映射核心)

很多人刚学 GORM&#xff1a; 会觉得&#xff1a; gorm:"primaryKey" gorm:"index" gorm:"not null"这些东西&#xff1a; 像“魔法字符串”。 其实&#xff1a; 它本质上是在告诉 GORM&#xff1a; 数据库这一列应该怎么创建也就是&#xff1a;…...

3分钟掌握novel-downloader:打造你的永久小说图书馆终极指南

3分钟掌握novel-downloader&#xff1a;打造你的永久小说图书馆终极指南 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否曾经因为小说网站突然关闭、章节被删除或VIP内容无法离…...