golang学习笔记——go语言多文件项目运行的四种方式

go语言多文件运行技巧

有两个源码文件的go语言项目如何运行?

 go.modmain.go Trie.go 

如何直接运行go run main.go会提示找不到文件。

# 在windows10下运行
$ go run main.go
# command-line-arguments
.\main.go:6:9: undefined: Constructor

是真的找不到文件吗。其实不是。我们把鼠标放到Constructor()函数上就会发现main.Constructor也就这个函数在代码结构中的路径,而且这个函数是大写字母开头的。所以应该是我们的命令有问题。在传统的c/c++项目中,都是先编译才能运行的。go语言作为一门静态语言,也应当如此。这里提供四种方法

# 在windows
go run ./
# 在linux
go run *.go
# 通用
go run main.go Trie.go
# 先编译,再运行
go build
.\m.exe

在这里插入图片描述

go run命令详解

go run专门用来运行命令源码文件的命令,不是用来运行所有go源码文件的

go run 命令只能接受一个命令源码文件以及若干个库源码文件(必须同属于 main 包)作为文件参数,且不能接受测试源码文件。它在执行时会检查源码文件的类型。如果参数中有多个或者没有命令源码文件,那么 go run 命令就只会打印错误提示信息并退出,而不会继续执行。

go run -n 查看执行过程

先创建临时文件b001,在b001中创建一个importcfg文件,将使用的import文件写入,然后切换到目录下,执行compile命令,创建一个importcfg.link文件,将compile生成的link写入。然后创建临时文件exe,将导入文件和源码文件连接在一起生成可执行文件。

通过compile生成link文件,然后将link和源文件一起打包成exe

生成的临时文件可以用go run -work看到

go run命令是生成了2个文件,一个是归档文件,一个是可执行文件。

$ go run -work main.go Trie.go
WORK=C:\Users\ADMINI~1\AppData\Local\Temp\go-build994767701
true, true

项目文件

文件go.mod

module gitcode.net/mgo 1.21.5

文件main.go

package mainimport "fmt"func main() {obj := Constructor()obj.Insert("apple")param_2 := obj.Search("apple")param_3 := obj.StartsWith("app")fmt.Printf("%t, %t", param_2, param_3)
}

文件Trie.go

package maintype Trie struct {children [26]*TrieisEnd    bool
}func Constructor() Trie {return Trie{}
}func (t *Trie) Insert(word string) {node := tfor _, ch := range word {ch -= 'a'if node.children[ch] == nil {node.children[ch] = &Trie{}}node = node.children[ch]}node.isEnd = true
}func (t *Trie) SearchPrefix(prefix string) *Trie {node := tfor _, ch := range prefix {ch -= 'a'if node.children[ch] == nil {return nil}node = node.children[ch]}return node
}func (t *Trie) Search(word string) bool {node := t.SearchPrefix(word)return node != nil && node.isEnd
}func (t *Trie) StartsWith(prefix string) bool {return t.SearchPrefix(prefix) != nil
}/*** Your Trie object will be instantiated and called as such:* obj := Constructor();* obj.Insert(word);* param_2 := obj.Search(word);* param_3 := obj.StartsWith(prefix);*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/344716.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM工作原理与实战(十四):JDK9及之后的类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JDK8及之前的类加载器 二、JDK9及之后的类加载器 1.启动类加载器 2.平台类加载器(扩展类加载器) 总结 前言 JVM作为Java程序的运行环境,其负…

【正点原子】STM32电机应用控制学习笔记——8.FOC简介

FOC是适用于无刷电机的,而像有刷电机,舵机,步进电机是不适用FOC的。FOC是电机应用控制难度最大的部分了。 一.FOC简介(了解) 1.介绍 FOC(Filed Oriented Control)即磁场定向控制,…

暴打小苹果

欢迎来到程序小院 暴打小苹果 玩法:鼠标左键点击任意区域可发招暴打,在苹果到达圆圈时点击更容易击中, 30秒挑战暴打小苹果,打中一次20分,快去暴打小苹果吧^^。开始游戏https://www.ormcc.com/play/gameStart/247 htm…

redis夯实之路-主从复制详解

Redis中可以通过执行slaveof命令或者设置slaveof选项,让一个服务器区复制另一个服务器,被复制的为主服务器,复制的为从服务器。 复制 Redis中可以通过执行slaveof命令或者设置slaveof选项,让一个服务器区复制另一个服务器&#…

代码随想录算法训练营第24天 | 理论基础 77. 组合

目录 理论基础 什么是回溯法 回溯法的效率 回溯法解决的问题 如何理解回溯法 回溯法模板 77. 组合 💡解题思路 💻实现代码 理论基础 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯法的效率 虽然回溯法很难&#xff…

环形链表[简单]

优质博文:IT-BLOG-CN 一、题目 给你一个链表的头节点head,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链…

WPS - 表格虚线变成实线解决方案(Office 同上)

1、选中表格区域,在表格中选中需要调整为实线的表格区域 2、点击设置单元格格式,鼠标进行右击并点击设置单元格格式选项 3、选择实线,在单元格格式下的边框,调整到实线 4、设置为实线,即可将表格的虚线设置为实线

Android Studio 实现网易新闻App (简单方便易懂)

🍅文章末尾有获取完整项目源码方式🍅 目录 前言 一、任务介绍 1.1 背景 1.2目的和意义 二、 实现介绍 视频演示 2.1 启动页实现 2.2 注册页面实现 2.3 登陆页面实现 2.4 首页实现 2.5 详情页面实现 三、获取源码 前言 随着移动互联网的持续发…

py的函数讲解

前言:本章节我们来讲函数,主播略微感觉到有点小难,友友们需要认真看 目录 一.初始函数 1.1关于函数 1.2举例 1.3小结 二.函数的基础语法 2.1关于函数的语法 2.2举例 2.3小结 三.函数的参数 3.1关于函数的参数 3.2举例 3.3小结 四.函数的返回…

数据结构 模拟实现二叉树(孩子表示法)

目录 一、二叉树的简单概念 (1)关于树的一些概念 (2)二叉树的一些概念及性质 定义二叉树的代码: 二、二叉树的方法实现 (1)createTree (2)preOrder (…

BikeDNA(四)初始化参考数据

BikeDNA(四)初始化参考数据 这本笔记本: 加载定义研究区域的多边形,然后为研究区域创建网格叠加。加载参考数据。处理参考数据以创建分析所需的网络结构和属性。 先决条件和条件 输入/输出 config.yml 必须提前设置。 此笔记本…

谷歌aab包在Android 14闪退而apk没问题(targetsdk 34)

问题原因 Unity应用(target SDK 34)上线到GooglePlay,有用户反馈fold5设备上(Android14系统)疯狂闪退,经测试,在小米手机Android14系统的版本复现成功了,奇怪的是apk直接安装没问题,而打包成aa…