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 相关文章推荐
Golang 实现超大文件读取的两种方法
Apr 27 Golang
golang 实现菜单树的生成方式
Apr 28 Golang
golang 如何通过反射创建新对象
Apr 28 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
go 实现简易端口扫描的示例
May 22 Golang
Go语言实现Snowflake雪花算法
Jun 08 Golang
golang fmt格式“占位符”的实例用法详解
Jul 04 Golang
Go语言并发编程 sync.Once
Oct 16 Golang
Golang使用Panic与Recover进行错误捕获
Mar 22 Golang
Golang 字符串的常见操作
Apr 19 Golang
实现GO语言对数组切片去重
Apr 20 Golang
Golang map映射的用法
Apr 22 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中的串行化变量和序列化对象
2006/09/05 PHP
PHP 字符串 小常识
2009/06/05 PHP
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
IE与firefox之jquery用法区别
2008/10/03 Javascript
JavaScript 继承详解 第一篇
2009/08/30 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
Vue渲染函数详解
2017/09/15 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
python 布尔操作实现代码
2013/03/23 Python
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
Python线程指南详细介绍
2017/01/05 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
函授毕业个人自我评价
2014/02/20 职场文书
农村婚礼主持词
2014/03/13 职场文书
交通违章检讨书
2014/09/21 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python