GoLand2022.2.5版本Hello调动Greetings包
创始人
2024-02-29 13:55:34
0

安装Goland2022.2.5 版本

1.官网下载goland-2022.2.5.dmg版本(Mac)版本。如果是windows版本也可以直接下载)

2.配置gopath,基本都是配置.我这里配置为/usr/local/go 作为全目录,如果是windows,直接在环境中配置path路径就好。

3.查看版本 go version 

go version
go version go1.19.3 darwin/amd64

建立工作目录gowork

基本目录结构为gowork/hello

                         gowork/greetings 2个目录文件

目录结构为:

 

建立hello.go文件

package mainimport ("fmt""example.com/greetings"
)func main() {// Get a greeting message and print it.message := greetings.Hello("XiaMenKeny")fmt.Println(message)
}

保存的时候,会提示错误。因为里面有调用example.com/greetings的引用包

建立greetings.go文件,在greetings目录下

package mainimport ("fmt""example.com/greetings"
)func main() {// Get a greeting message and print it.message := greetings.Hello("XiaMenKeny")fmt.Println(message)
}

分别建立2个文件。这个时候再进行会提示找不到 

example.com/hello module to use your local example.com/greetings

需要在原先环境下编辑一下mod,用命令,实际是修改到本地的目录文件上

go mod edit -replace example.com/greetings=../greetings

打开看go.mod 就可以看到已经变为,说明已经修改到本地目录上的

module example.com/hellogo 1.19require (example.com/greetings v0.0.0-00010101000000-000000000000github.com/isdamir/gotype v0.0.0-20200101084212-6aa1591106b2rsc.io/quote v1.5.2
)require (golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirectrsc.io/sampler v1.3.0 // indirect
)replace example.com/greetings => ../greetings

运行Hello 调用greetings里面的函数方法

 go run hello.go
Hi, XiaMenKeny. Welcome by keny16999 from Beijing !

说明hello.go 已经调用了greetings.go里面的Hello方法。传输的参数是字符串

代码需要完善如果不知道谁调动的,需要返回一个错误

hello.go 修改带2参数的判断error

package mainimport ("fmt""log""example.com/greetings"
)func main() {// Get a greeting message and print it.log.SetPrefix("greetings: ")log.SetFlags(0)// Request a greeting message.message, err := greetings.Hello("")// If an error was returned, print it to the console and// exit the program.if err != nil {log.Fatal(err)}//greetings.Hello("XiaMenKeny")fmt.Println(message)
}
G

我们可以直接运行这里直接传入一个空串,查看是否有错误出现,正确返回错误信息,

 go run hello.go
greetings: empty name
exit status 1

空的名称确实不好,这样修改为随机返回一个字符串

package greetingsimport ("errors""fmt""math/rand""time"
)// Hello returns a greeting for the named person.
func Hello(name string) (string, error) {// If no name was given, return an error with a message.if name == "" {return name, errors.New("empty name")}// Create a message using a random format.message := fmt.Sprintf(randomFormat(), name)return message, nil
}// init sets initial values for variables used in the function.
func init() {rand.Seed(time.Now().UnixNano())
}// randomFormat returns one of a set of greeting messages. The returned
// message is selected at random.
func randomFormat() string {// A slice of message formats.formats := []string{"Hi, %v. Welcome by keny16999 from Beijing !","Great to see you, %v!","Hail, %v! Well met!",}// Return a randomly selected message format by specifying// a random index for the slice of formats.return formats[rand.Intn(len(formats))]
}

修改hello.go

实践上代码是随机抽取字符串的3个字符串,代码比较简单,直接过就好。

#go run hello.go
Great to see you, Gladys!
#go run hello.go
Hi, kenyabc. Welcome by keny16999 from Beijing !
#go run hello.go
Hail, kenyabc! Well met!

继续修改,返回Map(key,value)值

继续修改greetings.go代码

package greetingsimport ("errors""fmt""math/rand""time"
)// Hello returns a greeting for the named person.
func Hello(name string) (string, error) {// If no name was given, return an error with a message.if name == "" {return name, errors.New("empty name")}// Create a message using a random format.message := fmt.Sprintf(randomFormat(), name)return message, nil
}// Hellos returns a map that associates each of the named people
// with a greeting message.
func Hellos(names []string) (map[string]string, error) {// A map to associate names with messages.messages := make(map[string]string)// Loop through the received slice of names, calling// the Hello function to get a message for each name.for _, name := range names {message, err := Hello(name)if err != nil {return nil, err}// In the map, associate the retrieved message with// the name.messages[name] = message}return messages, nil
}// Init sets initial values for variables used in the function.
func init() {rand.Seed(time.Now().UnixNano())
}// randomFormat returns one of a set of greeting messages. The returned
// message is selected at random.
func randomFormat() string {// A slice of message formats.formats := []string{"Hi, %v. Welcome!","Great to see you, %v!","Hail, %v! Well met!",}// Return one of the message formats selected at random.return formats[rand.Intn(len(formats))]
}

修改hello.go代码

package mainimport ("fmt""log""example.com/greetings"
)func main() {// Set properties of the predefined Logger, including// the log entry prefix and a flag to disable printing// the time, source file, and line number.log.SetPrefix("greetings: ")log.SetFlags(0)// A slice of names.names := []string{"机器猫", "多爱猫", "天猫"}// Request greeting messages for the names.messages, err := greetings.Hellos(names)if err != nil {log.Fatal(err)}// If no error was returned, print the returned map of// messages to the console.fmt.Println(messages)
}

运行结果

go run hello.go
map[多爱猫:Hail, 多爱猫! Well met! 天猫:Hail, 天猫! Well met! 机器猫:Hi, 机器猫. Welcome!]
返回name多个参数,里面有3个全部返回

建立一个测试代码greetings_test.go.

package greetingsimport ("testing""regexp"
)// TestHelloName calls greetings.Hello with a name, checking
// for a valid return value.
func TestHelloName(t *testing.T) {name := "Gladys"want := regexp.MustCompile(`\b`+name+`\b`)msg, err := Hello("Gladys")if !want.MatchString(msg) || err != nil {t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)}
}// TestHelloEmpty calls greetings.Hello with an empty string,
// checking for an error.
func TestHelloEmpty(t *testing.T) {msg, err := Hello("")if msg != "" || err == nil {t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)}
}

测试直接用go test运行

下面说明没有发现测试文件。需要查看一下目录

go test
?       example.com/hello       [no test files]

测试文件建立在greetings目录下,要在greetings目录下运行

 go test -v
=== RUN   TestHelloName
--- PASS: TestHelloName (0.00s)
=== RUN   TestHelloEmpty
--- PASS: TestHelloEmpty (0.00s)
PASS
ok      example.com/greetings   0.016s

说明空的参数也通过。

时间上要修改一下greetings.go代码,区别就是参数传递的时候,有个是空的,目的是测试一个空的函数是否提示正确

	// message := fmt.Sprintf(randomFormat(), name)message := fmt.Sprint(randomFormat())
 TestHelloNamegreetings_test.go:15: Hello("Gladys") = "Hi, %v. Welcome!", , want match for `\bGladys\b`, nil
--- FAIL: TestHelloName (0.00s)


明显是说明需要参数传递的。

编译和安装代码

$ go build

Mac和linux编译为hello执行文件,如果不可以执行,手工修改一下属性,变成可以执行的

$ go build./hello
map[Gladys:Hail, Gladys! Well met! 多爱猫:Hail, 多爱猫! Well met! 天猫:Hail, 天猫! Well met!]

把代码添加到你的gopath里面去,相当于部署到bin目录中 hello目录下输入go install 将hello新编译的文件已经注册到新的目录去。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...