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

       近日因工作需要,对go语言进行了简单快速了解、学习。过程中go项目组织结构和包相关内容着实令人头晕……
       在了解到go buildgo 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.5var n2 float64 = 7.6var 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包,所以没有过程文件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值