Go语言的使用包实现代码重用

GO语言基础教程(159)Go包的基本概念之包的导入:Go包导入指南:解锁代码复用的正确姿势 你是否曾经在代码中反复复制粘贴相同的功能?是否因为一个微小的改动就要在整个代码库中四处寻找需要修改的地方?Go语言的包机制正是为了解决这些问题而生。想象一下,当你可以像搭乐高一样构建程序,将各种功能模块随意组合,那编程效率将会有多大的提升!今天,就让我们一起来探索Go语言中包导入的奥秘,让你的代码变得既整洁又高效。 阅读详情

导入包,程序清单如下:

package main

import(
  "fmt"
)

func main(){
  fmt.Println("Hello World!")
}

Go语言以package语句打头。main包是一种特殊的包,其特殊之处在于不能导入。对main包的唯一要求是,必须声明一个main函数,这个函数不接受任何参数且不返回任何值。简而易之,main包是程序的入口。

在main包中,可使用import声明来导入其它包。导入包后,可使用其中被导出的标识符。

安装第三方包:

要使用第三方库,必须像使用标准库一样使用import语句导入它。要使用第三方包,必须先使用命令go get安装它。

在终端,输入命令行如下:

go get github.com/golang/example/stringutil

运行结果如下:

go get: module github.com/golang/example/stringutil: Get "https://proxy.golang.org/github.com/golang/example/stringutil/@v/list": dial tcp 142.251.43.17:443: i/o timeout

这个问题很头疼。

输入代码如下:

package main

import(
  "fmt"
  "github.com/golang/example/stringutil"
)

func main(){
  s:="ti esrever dna ti pilf nwod gniht ym tup I"
  fmt.Println(stringutil.Reverse(s))
}

结果如下:

main.go:5:3: no required module provides package github.com/golang/example/stringutil: go.mod file not found in current directory or any parent directory; see 'go help modules'

这个问题也很头痛。

通过微信公众号加上微信好友,问了几个人,结果有网名叫“机器铃砍菜刀”告诉我说了,goproxy设置一下,就解决了。

 输入命令行如下:

export GOPROXY=https://goproxy.io,direct

输入命令行如下:

go get github.com/golang/example/stringutil

结果如下:

go get: github.com/golang/example@v0.0.0-20210811190340-787a929d5a0d: parsing go.mod:

module declares its path as: golang.org/x/example

        but was required as: github.com/golang/example

通过上面的代码,试一下运行结果如下:

main.go:5:3: no required module provides package github.com/golang/example/stringutil: go.mod file not found in current directory or any parent directory; see 'go help modules'

输入命令行如下:

$GOPATH/src/github/golang/example/stringutil

再试一下代码的运行结果,还是不行的。

在微信群求助,在“Golang梦工厂交流群1”,一位上海杨浦区的Cd. 告诉我说了解决方法。

输入命令行:

go env -w GO111MODULE=auto

再次输入命令行:

go env |grep GO111MODUL

运行结果是:

GO111MODULE="auto"

在代码上运行结果如下:

I put my thing down flip it and reverse it

感谢一位网友的留言:

这个问题发生的原因,就是你导入的包,系统找不着。

第三方包在没启动go modules功能之前,必须严格放在go/src/xxx/xxx/xxx下面 。

我不清楚你的go get 把第三方包下载到哪了,但看到是由于gopath路径拼接的原因,导致下载成功了,但是系统找不到

go env -w GO111MODULE=auto,是启用go modules功能。
也是告诉系统,根据当前目录来决定是否启用module功能
(1)当前目录在GOPATH/src之外且该目录包含go.mod文件,开启模块支持。
(2)当前文件在包含go.mod文件的目录下面。

有空闲,从网上学习go modules。

管理第三方依赖:

更新项目的依赖,可在项目文件夹中执行如下命令:

go get -u

可只更新特定的包,如下:

go get -u github.com/spf13/hugo

可更新文件系统中所有的包

go get -u all

创建包:

一个简单的包,文件名temperature.go,程序清单如下:

package temperature

func CtoF(c float64)float64{
  return (c*(9/5))+32
}
func FtoC(c float64)float64{
  return (f-32)*(9/5)
}

对包进行测试,文件名temperature_test.go,程序清单如下:

package temperature

import("testing")

type temperatureTest struct{
  i float64
  expected Temperature
}

var CtoFtests=[]temperatureTest{
  {4.1,39.38},
  {10,50},
  {-10,14},
}

var FtoCTests=[]temperatureTest{
  {32,0},
  {50,10},
  {5,-15},
}

func TestCtoF(t *testing.T){
  for _,tt:=range CtoFTests{
    actual:=CtoF(tt.i)
    if actual!=tt.expected{
      t.Errorf("expected %v, actual %v", tt.expected, actual)
    }
  }
}

func TestFtoC(t *testing.T){
  for _,tt:=range FtoCTests{
    actual:=FtoC(tt.i)
    if actual!=tt.expected{
      t.Errorf("expected %v, actual %v", tt.expected, actual)
    }
  }
}

书上说:

go test

PASS

ok        github.com/shapeshed/temperature        0.001s

其实上,输入go test,结果如下:

found packages main (main.go) and temperature (temperature.go) in /Users/douxiaobo/go/src/main

【Go 语言编程实战】用 Golang 实现一个 Go Thrift RPC 接口的泛化调用代码实例 本文详细讲解一下 go rpc 泛化调用的原理和过程和如何使用 golang 实现的 go thrift RPC 接口的泛化调用代码。 阅读详情

相关推荐

【go从入门到精通】作用域,包详解

而闭包函数,GetGa()返回的匿名函数,赋值给b,每次执行b(),Ga的值都被记忆在内存中,下次执行b()的时候,取b()上次执行后Ga的值,而不是全局变量Ga的值,这就是闭包函数可以使用包含它的函数内的变量,因为作为代码块一直存在,所以每次执行都是在上次基础上运行。在代码中使用big.Int时,big指的才是.go文件中定义的包名称。当某个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init()函数(如果有的话),依次类推。

yolo模型训练找我,AI游戏合作找我 4万+

golang 包包含的错误。package问题

在golang中package是个困惑的概念, 特别是package还可以与folder不同名, 委实让我恶心了一把. 关于golang的package的最佳实践: package is folder. package name is folder name. package path is folder path. 信耶稣得永生! 1. 同一个folder存在不同package, 编...

宁静致远的博客 1万+

Go-go-runewidth-一个函数用来得到字符或字符串的固定宽度

go-runewidth - 一个函数用来得到字符或字符串的固定宽度

理解Golang包导入

转载:http://tonybai.com/2015/03/09/understanding-import-packages/ Golang使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。 Golang中包的定义和使用

余功鹏的专栏 1715

射频功率放大器设计实战:从理论到Layout的全流程解析

本文以一款40W、960MHz LDMOS功率放大器为例,系统解析了从理论分析、仿真设计到版图实现的射频功率放大器设计全流程。内容涵盖AB类放大器选型、核心指标定义、稳定性分析、Load-Pull/源牵引仿真、史密斯圆图匹配、偏置网络设计,以及最终的谐波平衡仿真与版图电磁验证,为工程师提供了一套从理论到实践的完整设计方法论。

weixin_29266007的博客 248

【数据清洗】数据清洗流程及经验

预处理阶段 预处理阶段主要做两件事情: 一是将数据导入处理工具。 二是看数据。包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。 第一步:缺失值清洗 四个步骤: 1、确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略。 2、去除不需要的...

JoJo93723的博客 6491

编译 ngrok 需要解决的问题

如果出现以上错误,则需要降低 go-runewidth 或 uniseg 的版本。ngrok 已经不更新了,而它的依赖包还在更新,就会导致错误。1. 不能用太高版本的 golang 编译,1.12 版本左右的刚好。

beyond__self的博客 900

把 300 亿参数的 Qwen3-30B-A3B 塞进 16GB 手机:MoE、mmap 与内存轮转的完整拆解

这篇文章详细拆解了如何在16GB内存手机上运行305亿参数的Qwen3-30B-A3B大模型。作者通过MoE(专家混合)架构、内存映射(mmap)和专用NPU内存(rpcmem)的巧妙结合实现了这一"不可能"的任务。 核心原理在于:MoE模型将庞大的前馈网络拆分为128个专家,每个词只激活8个专家,97%的权重处于闲置状态;通过mmap技术按需加载当前需要的专家权重;同时利用NPU专用内存高效计算关键部分。三个关键开关(GGML_HEXAGON_MOE_PAGING=1、--mmap、GGML_CPU_RE

q742971636的博客 185

手把手教你搭建Ngrok

环境准备 1.VPS 这里以阿里云ECS为例,操作系统为CentOS7(64位)。 域名 将一个域名或二级域名泛解析到VPS服务器上。例如将*.xiaomiqiu.cn解析到VPS的IP。 要注意,此时还需要将ngrok.xiaomiqiu.cn的A记录设置为VPS的IP。 开始步骤 软件下载地址(此下载地址仅供参考): go的下载地址:http://www.golangtc.com/download git的下载地址:http://git-scm.com/downloadsgit绝对下..

1200

Superpowers与 OpenSpec、Spec Kit 对比

按照官方仓库定义,Superpowers 是一套构建在 composable skills 之上的完整软件开发工作流。它不是单纯的 prompt 集合,而是把一系列工程动作做成默认流程。一个需要明确的点:Superpowers 并不只偏 Claude Code,根据。

人不风流枉少年 1813

PCL体素滤波器【2026最新版】

PCL实现的VoxelGrid类和ApproximateVoxelGrid体素滤波,详细记录。博客长期更新,本文最近一次更新时间为:2026年3月14日。

点云侠的博客 39万+

go 编译问题

golang的编译使用命令 go build , go install;除非仅写一个main函数,否则还是准备好目录结构; GOPATH=工程根目录;其下应创建src,pkg,bin目录,bin目录中用于生成可执行文件,pkg目录中用于生成.a文件; golang中的import name,实际是到GOPATH中去寻找name.a, 使用时是该name.a的源码中生命的package 名字;这个在前面已经介绍过了。 注意点: 1.系统编译时 go install abc_name时,系统会到GOPATH的s

Silvercell 502

AI在智能制造中的落地:从预测维护到自适应生产调度

从最新的研究与实践来看,“预测维护”和“自适应生产调度”正在成为智能制造中最先跑通闭环的两个核心场景:前者通过对设备健康的前瞻性预测,帮助企业减少非计划停机、优化备件与维护资源;后者通过对复杂生产系统的实时决策优化,使工厂能够更好地应对订单波动、设备故障和多目标约束。更重要的是,越来越多的研究与项目不再将二者视为孤立模块,而是尝试构建“设备健康—生产调度—供应链”三者联动的一体化架构。Nature在技术层面,深度学习、强化学习、多智能体系统、图神经网络和注意力机制等方法,为建模复杂工业系统提供了强大工具;

nmdbbzcl的博客 1290

Go语言核心之美 1.4-包和文件

Go语言中的包(Package)就像其它语言的库(Library)或模块(Module)一样,支持模块化,封装性,可重用性,单独编译等特点。包的源码是由数个.go文件组成,这些文件所在的目录名是import路径的最后一个词,例如github.com/sunface/corego包的所有文件都存储在$GOPATH/src/github.com/sunface/corego底下。 每个包都有独立的命名

Sunface撩技术 4789

STM32 使用SYN6288语音模块

本篇文章带大家学习一下SYN6288语音模块,这个模块可以用于车载设备,语音电子书等众多产品当中,而且这个模块支持多种编码格式,GB2312,GBK等字符编码格式。SYN6288语音合成模块是一种语音合成设备,其可实现文字转语音功能,将输入的文字信息通过内部的处理和合成,输出相对应的语音信息。SYN6288模块具有语音合成质量高、输出音质好、使用方便等特点,因此广泛应用于语音播报、语音提示、语音识别、智能家居、智能家电、安防监控等领域。支持多语言:包括中文、英文、日文、韩文等多种语言。

m0_49476241的博客 2万+

2025华为od面试手撕代码【求字符串表达式结果】

2025华为od面试手撕代码【求字符串表达式结果】

MISAYAONE的博客 1351

Go 语言入门很简单 -- 17. Go Package #私藏项目实操分享#

什么是包Go 支持良好的软件工程实践。高质量软件的一个重要组成就是代码重用,体现了软件工程中不要重复“Don't Repeat Yourself”的原则。函数其实就是代码复用的第一个方法。Go 也提供了另一种支持代码复用的机制:包 ​​package​可以把相关关的 Go 源代码组织到同一单元中,使他们模组化、可重复使用和...

宇宙之一粟的技术漂泊之旅 227

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Golang教程第7节--包(package)

原文来自:https://golangbot.com/packages/ 这是Golang系列教程的第 7 个教程。 什么是包,为什么使用包? 到目前为止,我们的程序都是只拥有一个文件,包括一个main函数和几个其他函数。在实际场景中,将所有的源码写在一个文件中是不友好的。这样代码不可复用而且不好维护。使用包(package)可以解决这个问题。 包用于组织 Go 源代码,提供了更好的可重用...

cbmljs的博客 302

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

14 -包和文件的关系

08 - 程序结构中初步的介绍了 go 语言和包的结构, 接下来我们将会更加详细的介绍包和文件之间的恩爱情仇 一、包 GO 语言当中的包和其他语言的库或者模块很类似,都是为了支持模块化、封装、单独编译和代码重用。 package的使用原则: 一个包的源代码在一个或者多个以 .go 为后缀名的源文件当中. 例如 包 gopl/ch2/tempconv对应的路径就是 $GOPATH/src/gop...

xiaomiCJH的博客 600

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Go 编程从新手到专家(四)

概述本章旨在展示 Go 中接口的实现。与其他语言相比,它相当简单,因为在 Go 中它是隐式实现的,而其他语言则需要显式实现接口。在开始时,您将能够为应用程序定义和声明一个接口,并在您的应用程序中实现接口。本章将向您介绍使用鸭子类型和多态,接受接口,并返回结构体。到本章结束时,您将学会如何使用类型断言来访问接口的底层具体值,并使用类型选择语句。对于本章,您需要 Go 版本 1.21 或更高版本。本章的代码可以在以下位置找到:。在上一章中,我们讨论了 Go 中的错误处理。我们探讨了 Go 中的错误是什么;它是指

龙哥盟 722

1.从另一个模块调用你的代码

对于生产用途,您需要从其存储库中发布 example.com/greetings 模块(使用反映其已发布位置的模块路径),Go 工具可以在其中找到它以下载它。现在,由于您尚未发布该模块,因此您需要调整 example.com/hello 模块,以便它可以在您的本地文件系统上找到 example.com/greetings 代码。main 包是特殊的,如果一个文件声明为 package main,则该文件所在的项目会被编译为一个可执行程序。如果一个目录中有多个 .go 文件,它们的包声明必须一致。

weixin_45032905的博客 319

02 go语言(golang) - 包和模块

包(Package)包是 Go 语言中代码组织的基本单位。一个包可以包含多个.go源文件,这些文件中的代码共享相同的包名。包用于将功能相关的代码组织在一起,并且可以通过导入语句(import)被其他包使用。包提供了一种封装机制,允许开发者将内部实现细节隐藏起来,只暴露出一部分接口(即公开的函数、变量、类型等)。模块(Module)从 Go 1.11 版本开始,Go 引入了模块作为依赖管理和封装的单位,这是对传统包概念的扩展。一个模块通常对应一个项目或库,它包含了一组相关的包。

瑞瑞的博客 1371

3、Go语言库源码文件实战:提高代码模块化与重用性

本文介绍了Go语言库源码文件在提高代码模块化和重用性方面的应用。文章从代码冗余问题入手,阐述了库源码文件作为Go语言解决方案的原理,展示了程序实体的定义与使用示例,并通过流程图描述了端到端工作流。最后提出了行动建议,包括遵循代码规范、实践模块化开发等,并推荐了延伸阅读资料。本文适合Go语言初学者和中级开发者学习如何通过库源码文件提升代码质量和开发效率。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1485

十分钟带你入门Go语言(Golang)开发

本文首先介绍了以下Go语言的由来以及基本特点与应用,我们也知道它是一门很有生命力的编程语言,才发展10多年就已经在TIOBE排名第八,而且还正在往上发展。接着介绍了Go语言的开发环境的搭建,讲解了Go Module和Go Package的作用和使用,最后从零搭建并运行了一个Hello World程序,这个Hello World项目虽小,但是已经包含了Go项目大部分的知识点了,大项目都是在这个基础上发展而来的。最后介绍了Go很强的一个功能:`交叉编译`,只需一台主机,就可以开发适合于多个平台下的程序,说明Go

Go与Python双剑合一 2万+

使用包实现代码重用

在Go语言中,包将用于代码编组,以便在Go程序中导入并使用它们。 Go程序中以package语句开头。main包是一种特殊的包,其特殊之处在于不能导入。对于main包唯一的要求是,必须声明一个main函数,这个函数不接受任何参数不返回任何值,简而言之,main包是程序的入口。 在main包中,可使用import导入其他包。导入包后,就可使用其中被导出的标识符。 要使用第三方包,必须先使用命令go ...

、moddemod 340

golang接口的使用场景_如何在Go中使用接口

golang接口的使用场景 介绍 (Introduction) Writing flexible, reusable, and modular code is vital for developing versatile programs. Working in this way ensures code is easier to maintain by avoiding the need to ...

1906
上一篇: Go语言的通道
下一篇: Go语言的调试
DXB2021
博客等级 码龄5年 307粉丝 289原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值