golang import自定义包方式

作者:loongshawn 时间:2024-04-25 15:08:55 

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 没有关系

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

来源:https://blog.csdn.net/loongshawn/article/details/68922334

标签:golang,import,自定义包
0
投稿

猜你喜欢

  • OpenCV 读取图像imread的使用详解

    2022-02-07 02:00:22
  • ThinkPHP模板判断输出Empty标签用法详解

    2023-11-14 20:46:54
  • Python实现模拟登录及表单提交的方法

    2021-05-28 19:23:12
  • Tensorflow2.10实现图像分割任务示例详解

    2021-08-31 13:14:47
  • 使用mysqli完成事务处理

    2011-03-29 15:49:00
  • 听歌识曲--用python实现一个音乐检索器的功能

    2021-11-01 00:46:03
  • 小程序实现授权登陆的解决方案

    2024-04-17 10:03:28
  • Python新手学习raise用法

    2021-01-08 22:37:52
  • Python使用pycharm导入pymysql教程

    2024-01-17 22:47:49
  • python计算Content-MD5并获取文件的Content-MD5值方式

    2022-09-27 00:53:29
  • opencv python截取圆形区域的实现

    2022-11-27 06:58:50
  • 如何将Python列表转换为字符串

    2023-11-02 12:54:27
  • Swoole webSocket消息服务系统方案设计详解

    2023-06-12 16:16:32
  • Python 使用类写装饰器的小技巧

    2022-09-16 05:54:08
  • Python heapq库案例详解

    2022-12-27 12:26:52
  • MySQL root账号远程新建数据库报错1044问题及解决方法

    2024-01-23 23:37:56
  • go语言K8S 的 informer机制浅析

    2024-05-13 10:44:51
  • Python基于mediainfo批量重命名图片文件

    2021-08-20 11:31:30
  • 如何用python编写一个生成春联软件

    2021-12-12 07:27:47
  • Python初识二叉树续之实战binarytree

    2021-04-05 22:22:51
  • asp之家 网络编程 m.aspxhome.com