导入包,程序清单如下:
package main
import(
"fmt"
)
func main(){
fmt.Println("Hello World!")
}
Go语言以package语句打头。main包是一种特殊的包,其特殊之处在于不能导入。对main包的唯一要求是,必须声明一个main函数,这个函数不接受任何参数且不返回任何值。简而易之,main包是程序的入口。
在main包中,可使用import声明来导入其它包。导入包后,可使用其中被导出的标识符。
安装第三方包:
要使用第三方库,必须像使用标准库一样使用import语句导入它。要使用第三方包,必须先使用命令go get安装它。
在终端,输入命令行如下:
go get github.com/golang/example/stringutil
运行结果如下:
go get: module github.com/golang/example/stringutil: Get "https://proxy.golang.org/github.com/golang/example/stringutil/@v/list": dial tcp 142.251.43.17:443: i/o timeout
这个问题很头疼。
输入代码如下:
package main
import(
"fmt"
"github.com/golang/example/stringutil"
)
func main(){
s:="ti esrever dna ti pilf nwod gniht ym tup I"
fmt.Println(stringutil.Reverse(s))
}
结果如下:
main.go:5:3: no required module provides package github.com/golang/example/stringutil: go.mod file not found in current directory or any parent directory; see 'go help modules'
这个问题也很头痛。
通过微信公众号加上微信好友,问了几个人,结果有网名叫“机器铃砍菜刀”告诉我说了,goproxy设置一下,就解决了。
输入命令行如下:
export GOPROXY=https://goproxy.io,direct
输入命令行如下:
go get github.com/golang/example/stringutil
结果如下:
go get: github.com/golang/example@v0.0.0-20210811190340-787a929d5a0d: parsing go.mod:
module declares its path as: golang.org/x/example
but was required as: github.com/golang/example
通过上面的代码,试一下运行结果如下:
main.go:5:3: no required module provides package github.com/golang/example/stringutil: go.mod file not found in current directory or any parent directory; see 'go help modules'
输入命令行如下:
$GOPATH/src/github/golang/example/stringutil
再试一下代码的运行结果,还是不行的。
在微信群求助,在“Golang梦工厂交流群1”,一位上海杨浦区的Cd. 告诉我说了解决方法。
输入命令行:
go env -w GO111MODULE=auto
再次输入命令行:
go env |grep GO111MODUL
运行结果是:
GO111MODULE="auto"
在代码上运行结果如下:
I put my thing down flip it and reverse it
感谢一位网友的留言:
这个问题发生的原因,就是你导入的包,系统找不着。
第三方包在没启动go modules功能之前,必须严格放在go/src/xxx/xxx/xxx下面 。
我不清楚你的go get 把第三方包下载到哪了,但看到是由于gopath路径拼接的原因,导致下载成功了,但是系统找不到
go env -w GO111MODULE=auto,是启用go modules功能。
也是告诉系统,根据当前目录来决定是否启用module功能
(1)当前目录在GOPATH/src之外且该目录包含go.mod文件,开启模块支持。
(2)当前文件在包含go.mod文件的目录下面。
有空闲,从网上学习go modules。
管理第三方依赖:
更新项目的依赖,可在项目文件夹中执行如下命令:
go get -u
可只更新特定的包,如下:
go get -u github.com/spf13/hugo
可更新文件系统中所有的包
go get -u all
创建包:
一个简单的包,文件名temperature.go,程序清单如下:
package temperature
func CtoF(c float64)float64{
return (c*(9/5))+32
}
func FtoC(c float64)float64{
return (f-32)*(9/5)
}
对包进行测试,文件名temperature_test.go,程序清单如下:
package temperature
import("testing")
type temperatureTest struct{
i float64
expected Temperature
}
var CtoFtests=[]temperatureTest{
{4.1,39.38},
{10,50},
{-10,14},
}
var FtoCTests=[]temperatureTest{
{32,0},
{50,10},
{5,-15},
}
func TestCtoF(t *testing.T){
for _,tt:=range CtoFTests{
actual:=CtoF(tt.i)
if actual!=tt.expected{
t.Errorf("expected %v, actual %v", tt.expected, actual)
}
}
}
func TestFtoC(t *testing.T){
for _,tt:=range FtoCTests{
actual:=FtoC(tt.i)
if actual!=tt.expected{
t.Errorf("expected %v, actual %v", tt.expected, actual)
}
}
}
书上说:
go test
PASS
ok github.com/shapeshed/temperature 0.001s
其实上,输入go test,结果如下:
found packages main (main.go) and temperature (temperature.go) in /Users/douxiaobo/go/src/main