栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

【语言小记】go语言之go build和go install理解

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【语言小记】go语言之go build和go install理解

       近日因工作需要,对go语言进行了简单快速了解、学习。过程中go项目组织结构和包相关内容着实令人头晕……
       在了解到go build 和go install时,本人着实钻了一把牛角尖,奈何网上找的参考也不能很好地帮助我解开疑惑。所以,简单记录一下,希望本人粗浅之见能给同样有类似疑问的朋友一些思路。

疑惑点:

       看视频的时候up主在讲到go build后提到了一个细节:执行该指令后在目录 %GOPATH/pkg 下会生成.a编译文件,可是照做之后并没有出现一样的结果。why???本可以暂时跳过此问题,但牛角尖一旦出现…时间就被浪费了


进入正题……
  1. 系统:win10

  2. 开发环境: VS Code

  3. go版本:1.17.8

项目文件结构:

main.go内容:

package main //将该文件归属到main包中
import (
	"fmt"

​	"github.com/bounci/firstGoProject/utils"
)

func main() {
	fmt.Println("Hello World!") // shift+alt+donw快捷复制
	fmt.Println("Hello World!")
	fmt.Println("Hello World!")

​	var num = 10 //变量申明
​	fmt.Println(num)

​	var n1 float64 = 4.5
​	var n2 float64 = 7.6
​	var operator byte = '*'
​	result := utils.Cal(n1, n2, operator)
​	fmt.Printf("result=%9.2f", result)
}

utils.go内容:

package utils

import "fmt"

//为了让其他包可以使用Cal函数,需要将C大写,类似其它语言的public
func Cal(n1 float64, n2 float64, operator byte) float64 {
	var res float64
	switch operator {
	case '+':
		res = n1 + n2
	case '-':
		res = n1 - n2
	case '*':
		res = n1 * n2
	case '/':
		res = n1 / n2
	default:
		fmt.Println("操作符错误……")
	}
	return res
}

浅析go build 和 go install:
  • 相同点:
           都能编译生成可执行文件(.exe)。

  • 差异:
           go build :只能生成可执行文件,编译后生成的有默认名生成的文件在当前目录或在指定目录下,当然,文件名也可以指定,方法如下:

E:GoProjects> go build -o bin/my.exe github.com/bounci/firstGoProject/main

              go install:可以生成可执行文件、编译包文件(.a),其生成的可执行文件在 %GOPATH/bin 目录下,编译的包存储于*$GOPATH/pkg* 目录下。


关于运行go install后在 pkg中未生成文件的问题,做的一些尝试:

  1. 如果只对main包所在路径进行操作,在会在bin目录下生成.exe文件,不会在pkg目录生成编译文件。
  2. 对其他包(非main)进行该操作,则会在pkg下生成相应的.a文件。
  3. 经过测试,使用go install时无论定位到GOPATH还是*%GOPATH/src目录,均未报错,且都会在%GOPATH/pkg*下生成.a文件。
  4. 对非main包也可以使用go install命令,不会报错,但没有明显的效果,不会生成任何文件。
  5. 想测试能否同时达到生成两种文件的目的,出现以下情况,应该是不允许操作多个文件夹。

       最后,为什么确实运行了go install,但是只生成了可执行文件,在pkg中什么也没有。自我猜测原因:运行的是main包,所以没有过程文件。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991302.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号