Go语言的使用包实现代码重用

导入包,程序清单如下:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值