GoLand2022.2.5版本Hello调动Greetings包

news2024/12/24 21:15:53

安装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 main

import (
	"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 main

import (
	"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/hello

go 1.19

require (
	example.com/greetings v0.0.0-00010101000000-000000000000
	github.com/isdamir/gotype v0.0.0-20200101084212-6aa1591106b2
	rsc.io/quote v1.5.2
)

require (
	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
	rsc.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 main

import (
	"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 greetings

import (
	"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 greetings

import (
	"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 main

import (
	"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 greetings

import (
    "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())
 TestHelloName
    greetings_test.go:15: Hello("Gladys") = "Hi, %v. Welcome!", <nil>, 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新编译的文件已经注册到新的目录去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql基础知识篇(二)

1.UNION 与 UNION ALL 的区别&#xff1f; 如果使用 UNION&#xff0c;会在表链接后筛选掉重复的记录行如果使用 UNION ALL&#xff0c;不会合并重复的记录行从效率上说&#xff0c;UNION ALL 要比 UNION 快很多&#xff0c;如果合并没有刻意要删除重复行&#xff0c;那么就使…

自动化测试框架

自动化测试框架1.自动化测试框架核心功能1.数据驱动2.页面驱动3.关键字驱动2.关键字驱动实现-文档形式3.关键字驱动实现-表格形式1.自动化测试框架核心功能 这三种驱动测试可以结合使用来完成系统的自动化测试。可以将测试数据 1.数据驱动 将测试代码和测试数据分离&#xff…

科技云报道:云计算走向工业互联网“深水区”

科技云报道原创。 在新科技革命中&#xff0c;将网格化、信息化与智能化深度融合的工业互联网&#xff0c;正在将人、机、物全面互联&#xff0c;实现全要素、全产业链、全价值链的连接&#xff0c;推动传统产业加快转型升级、助力新兴产业加速发展壮大。 工业如何在快速变革…

培训机构借助创客匠人发力线上业务

疫情反反复复&#xff0c;传统线下教学受到严重影响,转型线上、借力线上发展业务成为行业主流趋势。但是,没有线上经验,人手不足的线下教培机构是否可以转型线上做教学服务,实现招生引流呢? 答案是——可以!用对工具,选对模式,其实很简单! 有很多没有专门线上运营团队,甚至是…

《计算机体系结构量化研究方法》1.7 可信任度

主要内容 计算机是在不同的抽象层上设计和构造的。我们可以逐级深入计算机的不同层面&#xff0c;将每个组件放大为一个完整的子系统进行查看&#xff0c;直到深入到独立的晶体管为止。尽管有些故障会波及整个系统&#xff0c;比如掉电&#xff0c;但许多故障可以被限制在模块…

leetcode-每日一题-1758-生成交替二进制字符串的最少操作数(简单,数学思想)

这道题标记为简单题是正常的&#xff0c;因为当你想到0或者1开头的时候就已经结束了看看我的分析 那么知道这个信息之后就很简单了&#xff0c;加上我们的位运算符号^作为标记即可&#xff0c;大家看看代码实现 1758. 生成交替二进制字符串的最少操作数 难度简单88收藏分享切换…

R语言和Tableau通过情感分析,我们可以从特朗普的推文得到什么?

社交媒体分析的许多用途中的一些是情绪分析&#xff0c;我们评估特定问题的帖子是积极还是消极。我们把社交媒体分析、机器学习、预测建模等集成到文本数据挖掘中。最近我们被客户要求撰写关于推文的研究报告&#xff0c;包括一些图形和统计输出。 在这篇文章中&#xff0c;我…

使用React.ts创建一个密码生成器的简单示例

目录密码生成器DemoFeature知识点React TypeScript —— Function Components为元素(::before/::after)绑定点击事件React如何正确定义对象数组在React中设置复选框check属性三目运算符实现React动态绑定class和style参考资料密码生成器Demo 使用密码生成器工具创建随机密码。P…

Java基于springboot +vue网上超市购物网站 多商家

随着我国信息化的发展&#xff0c;大家更多的是希望通过网络获取到更多的直接所需的信息&#xff0c;而商品一直以来就是人类永恒的追求之一&#xff0c;如何能够享有到更多的商品是很多人一直以来关系的问题。 本系统通过在线网购的方式让用户可以在需要购买商品但是有没有时间…

git submodule创建子仓库

git submodule创建子仓库 文章目录git submodule创建子仓库简介创建主仓库创建子仓库将子仓库添加到主仓库中将合并后的主仓库提交推送到云端简介 当我们的项目伴随着时间的增长越来越大的时候&#xff0c;单一的仓库便不再方便管理&#xff0c;这时候就需要将部分功能提取出来…

PyQt5 事件处理机制

PyQt5 事件处理机制PyQt为事件处理提供了两种机制&#xff1a;高级的信号与槽机制&#xff0c;以及低级的事件处理机制。信号与槽可以说是对事件处理机制的高级封装。 常见事件类型&#xff1a; 键盘事件&#xff1a;按键按下和松开。鼠标事件&#xff1a;鼠标指针移动&#x…

Go语言中的值传递和引用传递 附: 内存地址分析

在学习Go语言函数部分遇到了引用传递和值传递&#xff0c;与C颇为类似&#xff0c;浅谈一下自己对Go语言中的值传递和引用传递的理解。 一、数组—值传递 我们用Go语言中的数组作为样例&#xff0c;来理解值传递的过程。 代码 package mainimport "fmt"func main…

[附源码]计算机毕业设计springboot基于Java的员工管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]SSM计算机毕业设计校园闲置物品租赁系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Pytest接口测试框架实战项目搭建(二)

一、前言 业务系统的登录均要经过统一登录系统S&#xff0c;本篇演示统一登录处理&#xff0c;一个是内部业务系统C&#xff08;其余内部业务系统AB用的都是相同账号密码&#xff09;&#xff0c;一个是外部用户使用的系统W&#xff0c;因为账号密码以及headers信息都不一样&am…

DCDC--Burst Mode和Pulse Skipping Mode

1、Burst Mode和Pulse Skipping Mode&#xff08;PSM&#xff09;的区别 Burst Mode ≠ Pulse Skipping Mode&#xff0c;论坛有人认为Burst Mode就是Pulse Skipping Mode&#xff0c;这是不对的。 以LTC3624为例&#xff1a; Burst Mode operation provides the highest ef…

大数据(9h)FlinkSQL双流JOIN、Lookup Join

文章目录1、环境2、Temporal Joins2.1、基于处理时间&#xff08;重点&#xff09;2.1.1、设置状态保留时间2.2、基于事件时间3、Lookup Join&#xff08;重点&#xff09;4、Interval Joins&#xff08;基于间隔JOIN&#xff09;重点是Lookup Join和Processing Time Temporal …

SpringBoot+Vue实现前后端分离的餐饮点餐系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

线性表01- 数组与简易接口设计

线性表的定义 线性表: 具有n个相同类型元素的有限序列 n>0 线性表的元素特点是有索引, 可以通过索引快速查找到元素. a1是a2的前驱, a2是a1的后继 常见的线性表 数组链表栈队列哈希表 (散列表) 数组 数组是一种顺序存储的线性表, 所有的元素的内存地址是连续的. int arr…

Python用广义加性模型GAM进行时间序列分析

每当你发现一个与时间对应的趋势时&#xff0c;你就会看到一个时间序列。我们围绕广义加性模型GAM技术进行一些咨询&#xff0c;帮助客户解决独特的业务问题。研究金融市场表现和天气预报的事实上的选择&#xff0c;时间序列是最普遍的分析技术之一&#xff0c;因为它与时间有着…