go build和go run之间的函数调用差异

时间:2018-09-10 16:08:15

标签: go

我是Golang的新手,在学习过程中,我尝试了一些示例。我的示例中有2个Go源文件-hello.go和consts.go。 consts.go包含一些由hello.go中定义的函数使用的常量。当我像这样构建两个源文件时: go build consts.go hello.go并运行输出./hello 完全不调用arrayDemo()函数。

但是,当我仅使用go run hello.go运行hello.go文件时,将调用函数arrayDemo()。

在构建时导致函数不被调用的两种方法有什么区别?

这是hello.go的代码:

package main

import (
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    fmt.Printf("Speed is %f\n", computeSpeed(54.3, 3.4))
    fmt.Printf("%d\n", arrayDemo())
}

func arrayDemo() int32 {
    fmt.Println("in arrayDemo")
    return 5
}

consts.go的代码:

package main

// Speed speed of a vehicle
type Speed float32

func computeSpeed(dist float32, t float32) Speed {
    return Speed(dist / t)
}

1 个答案:

答案 0 :(得分:0)

go run有效是因为go run基于文件名,而go build基于包名。

out5
  

编译多个软件包或单个非主软件包时,请进行构建   编译软件包,但丢弃结果对象,仅服务   作为检查是否可以构建软件包的方法。

据我了解,这意味着您不能在主软件包中包含多个文件,然后通过使用go build来获得可运行的可执行文件