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 interface{}==nil 的几种坑及原理分析
Apr 24 Golang
go:垃圾回收GC触发条件详解
Apr 24 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
go 实现简易端口扫描的示例
May 22 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
详解Go语言Slice作为函数参数的使用
Jul 02 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
修改并编译golang源码的操作步骤
Jul 25 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 Golang
Golang 结构体数据集合
Apr 22 Golang
Go语言入门exec的基本使用
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
逆序二维数组插入一元素的php代码
2012/06/08 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
js获取form的方法
2015/05/06 Javascript
js中开关变量使用实例
2017/02/24 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
详解Python中的多线程编程
2015/04/09 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
夜大毕业自我鉴定
2013/10/11 职场文书
美容师的职业规划书
2013/12/27 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
发展部经理职责规定
2014/02/22 职场文书
春节超市活动方案
2014/08/14 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
给领导的感谢信范文
2015/01/23 职场文书
综合素质评价自我评价
2015/03/06 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers