golang import自定义包方式


Posted in Golang onApril 29, 2021

1.初探

刚开始接触go时,以为import自定义包与Java工程类似,在非GOPATH的路径中新建了一个go项目HelloGo,如下:

golang import自定义包方式

接下来,利用beego的bee工具新建了另一个项目helloapi,如下:

golang import自定义包方式

现在,想在helloapi项目中调用HelloGo项目的函数,通过import引入“HelloGo”,编辑器中一直提示无法引用,即使把HelloGo添加到左下角的GOPATH[helloapi]中,也没有效果。

具体如下:

golang import自定义包方式

问题出在HelloGo项目的路径上,因为其不在系统定义的GOPATH路径下,查看下系统定义的GOPATH:

localhost:helloapi loongshawn$ echo $GOPATH
/Users/loongshawn/Documents/go/workspace
localhost:helloapi loongshawn$

因此,要想引入自定义的包,需要自定义包的路径为GOPATH路径中。

2.操作

在工程A中创建方法Say,如下代码:

package routers
import (
    "fmt"
)

func Say() {
    fmt.Println("引用helloweb项目的Say方法")
}

在工程B中引入工程A,并调用A工程中的Say函数,同时启动工程A,Console输出结果如下:

golang import自定义包方式

golang import自定义包方式

输出结果显示,调用Say函数正常。不知大家注意到被调用函数Say的写法没有,函数名首字母是大写的,如果把其换成小写行不行?

在A工程的router.go中新增了print函数,试一下:

func print() {
    fmt.Println("引用helloweb项目的print方法")
}

golang import自定义包方式

B工程中重新引用A工程的print方法,但是引用不了。因此,在写可调用方法时,方法名首字母需要大写,这是需要注意的一点。

golang import自定义包方式

由于接触Go不久,许多地方理解不一定到位,如有纰漏之处,请各位同学帮忙指出来,谢谢!

补充:GoLang 自定义包总结

大概总结一下 GoLang 自定义包,并不是需要发布的包,只是一次在代码工作路径下调用自定义包的一个尝试。

今天踩坑就是,以为 import 的时候要填写文件夹里面的 package 的名称,比如之前我是这么写的:

import "./pack/p"

这样无法通过编译,这就是本文的由来了

首先,工作的目录结构是这样的:

.
├── main.go
└── pack
    └── test.go

1 directory, 2 files

其中,各个文件代码为:

// main.go
package main
import (
        "fmt"
       "./pack"
)
func main() {
        s := p.Sayhello()
        fmt.Println(s)
}
// pack/test.go
package p
func Sayhello() string {
        return "Hello!"
}

在主目录下通过 go run 或者 go build 的方法运行或编译,都是可以通过的。

证明了以下几点:

import 语句使用的是文件夹的名称

上面的文件夹名字为 pack

文件夹名称和 package 名称不一定一样

比如 pack 和 p

调用自定义包使用 package.函数名 的方式

p.xxx

自定义包的调用和文件名没有关系。

test.go 和 p 没有关系

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
一文读懂go中semaphore(信号量)源码
Apr 03 Golang
golang interface判断为空nil的实现代码
Apr 24 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
golang 如何通过反射创建新对象
Apr 28 Golang
Go 实现英尺和米的简单单位换算方式
Apr 29 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
Golang 编译成DLL文件的操作
May 06 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
Go 语言下基于Redis分布式锁的实现方式
Jun 28 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
Go web入门Go pongo2模板引擎
May 20 Golang
golang 接口嵌套实现复用的操作
Apr 29 #Golang
浅谈Golang 嵌套 interface 的赋值问题
Apr 29 #Golang
Go 实现英尺和米的简单单位换算方式
Apr 29 #Golang
Golang 空map和未初始化map的注意事项说明
彻底理解golang中什么是nil
基于Go Int转string几种方式性能测试
Apr 28 #Golang
Go语言中break label与goto label的区别
You might like
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
php实现的ping端口函数实例
2014/11/12 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
Javascript中Eval函数的使用说明
2008/10/11 Javascript
在html页面上拖放移动标签
2010/01/08 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
Bootstrap精简教程
2015/11/27 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
Python玩转Excel的读写改实例
2019/02/22 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
Python实现扫码工具的示例代码
2020/10/09 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
高三政治教学反思
2014/02/06 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
小学教育见习报告
2014/10/31 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
雷锋的观后感
2015/06/10 职场文书
教师节简报
2015/07/20 职场文书
找规律教学反思
2016/02/23 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers