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 Gin实现文件上传下载的示例代码
Apr 02 Golang
Go语言带缓冲的通道实现
Apr 26 Golang
解决golang在import自己的包报错的问题
Apr 29 Golang
golang 在windows中设置环境变量的操作
Apr 29 Golang
Golang实现AES对称加密的过程详解
May 20 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
基于Go语言构建RESTful API服务
Jul 25 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Go gRPC进阶教程gRPC转换HTTP
Jun 16 Golang
基于Python实现西西成语接龙小助手
Aug 05 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
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
php blowfish加密解密算法
2016/07/02 PHP
多广告投放代码 推荐
2006/11/13 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
解决vue点击控制单个样式的问题
2018/09/05 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
Python解析最简单的验证码
2016/01/07 Python
python实现各进制转换的总结大全
2017/06/18 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
基于python实现名片管理系统
2018/11/30 Python
详解python深浅拷贝区别
2019/06/24 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
如何在django中实现分页功能
2020/04/22 Python
ET Mall东森购物网:东森严选
2017/03/06 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
最新大学生自我评价
2013/09/24 职场文书
实习生个人找工作的自我评价
2013/10/30 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
餐厅开业活动方案
2019/07/08 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server