浅谈go build后加文件和目录的区别

如下:

go build + xxx.go:生成以xxx命名的可执行文件

go build + dir / go build . / go build:生成以目录名命名的可执行文件

补充:golang学习------golang的目录管理以及go install,go build的使用

一个优秀的项目离不开良好的代码管理,golang通过package提供一些代码的管理封装,那么我们应该如何来设计我们的代码结构呢?

我们假设我们需要完成一个项目,项目的功能如下:

在基于package的目录思路下,目录结构如下

在main文件夹中实现package main,方便用户进行调用

在test文件夹中就可以通过

import "ImageServer/imageFun/basicFun" 测试图像相关的基本功能

import "ImageServer/imageFun/coreFun" 测试图像相关的核心功能

import "ImageServer/network/concurrentPro" 测试网络的并发功能

import "ImageServer/imageFun/database" 测试数据库功能

在一个文件夹下,所有的.go文件应该都以文件夹名为包名,比如ImageServer/imageFun/basicFun中的basicFun.go

在main包中我们就可以这么使用它

然后这里再说下go install和go build,go build直接编译生成二进制文件在当前目录下

与build命令相比,install命令在编译源码后还会将可执行文件或库文件安装到约定的目录下。

go install编译出的可执行文件以其所在目录名(DIR)命名

go install将可执行文件安装到与src同级别的bin目录下,bin目录由go install自动创建

go install将可执行文件依赖的各种package编译后,放在与src同级别的pkg目录下

在使用go install编译二进制文件到GOPATH/bin目录下时,需要注意要配置环境变量GOBIN

现在输入 go install /imageServer/main,编译上述程序。该命令会在main文件夹内搜索拥有 main 函数的文件,然后生成一个二进制文件到GOPATH/bin中

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

(0)

相关推荐

  • go build和go install的区别介绍

    go build: go build 用于编译包生成可执行文件,必须有main包才可以 go install: go install 的作用有两个:主要用来生成库和工具,(如果有main包)编译后生成的可执行工具文件放到 bin 目录.$GOPATH/bin,编译后的库文件放到 pkg 目录下($GOPATH/pkg) 补充:go build 命令 简介 1.用于编译源码文件或代码包 -编译非命令源码文件不会产生任何结果文件 -编译命令源码文件会在该命令的执行目录中生成一个可执行文件 2.执行该

  • go build 通过文件名后缀实现不同平台的条件编译操作

    go build 可以通过标签或者文件名的后缀来提供条件编译,这里说下通过文件名的后缀来提供条件编译 文件命名约定可以在go build 包里找到详细的说明,简单来说,就是源文件包含后缀:_$GOOS.go,那么这个源文件只会在这个平台下编译,_$GOARCH.go也是如此. 这两个后缀可以结合在一起使用,但是要注意顺序:_$GOOS_$GOARCH.go,不能反过来用:_$GOARCH_$GOOS.go 例如下面截图,这些文件定义了对应不同平台下是否需要编译. 补充:Golang: 条件和循环

  • go install/build生成的文件命名和路径操作

    1. 写在前面 本文主要讨论go install/build命令生成的文件命令和生成路径问题.将从两种情况讨论: 文件夹下只有一个"命令源码文件" 文件夹下既有命令源码文件还有其他源码文件 以下实验主要在windows环境下完成呢,所以生成的可执行文件以.exe后缀结尾 2. 文件夹下只有一个"命令源码文件" 假设一个简单的命令源码文件所在的工程组织如下所示: |__ src     |__ jeekTimeProject         |__ test     

  • 浅谈go build后加文件和目录的区别

    如下: go build + xxx.go:生成以xxx命名的可执行文件 go build + dir / go build . / go build:生成以目录名命名的可执行文件 补充:golang学习------golang的目录管理以及go install,go build的使用 一个优秀的项目离不开良好的代码管理,golang通过package提供一些代码的管理封装,那么我们应该如何来设计我们的代码结构呢? 我们假设我们需要完成一个项目,项目的功能如下: 在基于package的目录思路下

  • 浅谈内存耗尽后Redis会发生什么

    前言 作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当 Redis 服务器的内存耗尽后,如果继续执行请求命令,Redis 会如何处理呢? 内存回收 使用Redis 服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以给键值对设置有效期.Redis 中可以通过 4 个独立的命令来给一个键设置过期时间: expire key ttl:将 key 值的过期时间设置为 ttl 秒. pexpire key ttl:将 key 值的过期时

  • 浅谈java+内存分配及变量存储位置的区别

    Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识.一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象) ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久

  • 浅谈Python中threading join和setDaemon用法及区别说明

    Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别. 1.join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法. 原型:join([timeout]) 里面的参数时可选的,代表线程运行的最大时间,即如果超过这个时间,不管这个此线程有没有执行完毕都会被回收,然后主线程或函数都会接

  • 浅谈Java关闭线程池shutdown和shutdownNow的区别

    目录 前言 项目环境 1.线程池示例 2.shutdown 3.isShutdown 4.isTerminated 5.awaitTermination 6.shutdownNow 7.shutdown 和 shutdownNow 的区别? 前言 本章分为两个议题 如何正确关闭线程池 shutdown 和 shutdownNow 的区别 项目环境 jdk 1.8 github 地址:https://github.com/huajiexiewenfeng/java-concurrent 本章模块:

  • 浅谈C语言中的sizeof()和strlen()的区别

    目录 sizeof() strlen 补一个注意事项: sizeof()和strlen()经常会被初学者混淆,但其中有有很大区别: sizeof() 1. sizeof()[操作数所占空间的字节数大小]是一种c中的基本运算符.可以以类型.指针.数组和函数等作为参数.返回值类型为unsigned int 运算值在编译的时候就出结果,所以可以用来定义数组维数. char a[5]="123"; int b=sizeof(a);//b=5 int c=strlen(a);//c=3 size

  • 浅谈Java中的四种引用方式的区别

    强引用.软引用.弱引用.虚引用的概念 强引用(StrongReference) 强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和str都是强引用: Object object = new Object(); String str = "hello"; 只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象. 比如下面这段代码: public class Main { publi

  • 浅谈选择结构if语句和switch语句的区别

    1.选择结构if语句格式及其使用 A:if语句的格式: if(比较表达式1) { 语句体1; }else if(比较表达式2) { 语句体2; }else if(比较表达式3) { 语句体3; } ... else {   语句体n+1; } B:执行流程: 首先计算比较表达式1看其返回值是true还是false, 如果是true,就执行语句体1,if语句结束. 如果是false,接着计算比较表达式2看其返回值是true还是false, 如果是true,就执行语句体2,if语句结束. 如果是fa

  • 浅谈django model的get和filter方法的区别(必看篇)

    django的get和filter方法是django model常用到的,搞清楚两者的区别非常重要. 为了说明它们两者的区别定义2个models class Student(models.Model): name = models.CharField('姓名', max_length=20, default='') age = models.CharField('年龄', max_length=20, default='') class Book(models.Model): student =

  • 浅谈python socket函数中,send与sendall的区别与使用方法

    在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下: socket.send(string[, flags]) 发送TCP数据,返回发送的字节大小.这个字节长度可能少于实际要发送的数据的长度.换句话说,这个函数执行一次,并不一定能发送完给定的数据,可能需要重复多次才能发送完成. 例子: data = "something you want to send" while True: len = s.send(data[len:]) if

随机推荐