我是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)
}
答案 0 :(得分:0)
go run有效是因为go run基于文件名,而go build基于包名。
还
out5
编译多个软件包或单个非主软件包时,请进行构建 编译软件包,但丢弃结果对象,仅服务 作为检查是否可以构建软件包的方法。
据我了解,这意味着您不能在主软件包中包含多个文件,然后通过使用go build来获得可运行的可执行文件