首页 > 其他分享 >Golang之工作区workspace

Golang之工作区workspace

时间:2023-07-27 20:57:38浏览次数:25  
标签:main demo work Golang 工作 workspace go foo

快速开始

创建工作区

写一个最简单的基础项目实际演练一下 Go workspace

首先,创建 workspace 工作区。

$: mkdir workspace
$: cd workspace
$: go work init

 

完成以上步骤后,工作区目录就会出现一个新的文件 go.work . 内容是这样的:

go 1.18

因为工作区暂时是空的,所以只有一个版本信息。Go workspace 的使用版本:go version >= 1.18.

创建项目

创建一个基础项目 demo, 过程如下:

$: cd workspace
$: mkdir demo
$: go mod init demo

 

添加基础代码, demo/main.go:

package main

import "fmt"

func main() {
    fmt.Println("hello, go workspace")
}

 

增加一个基础依赖包: github.com/liujianping/foo , 命令

$ go get github.com/liujianping/foo

 

这是以前 Go Module 刚发布时写的依赖包,借来直接用。修改 demo/main.go:

package main

import (
    "fmt"

    "github.com/liujianping/foo"
)

func main() {
    fmt.Println(foo.Greet("workspace"))
}

 

现在在 demo 目录中运行: go run main.go , 发现 demo 运行失败。

$: go run main.go
main.go:6:2: no required module provides package github.com/x-mod/foo: go.mod file not found in current directory or any parent directory; see 'go help modules'

 

这时因为在 demo 的父级目录中发现了 go.work 文件,而 go.work 中没有使用任何项目包或依赖包,所以 workspace 工作区无法工作导致。

工作区操作

现在将 demo 项目增加到工作区。

$: cd workspace
$: go work use ./demo

 

查看工作区文件 go.work:

go 1.18

use ./demo

 

重新运行项目:

$: cd workspace
$: go run demo/main.go
Go Workspace, 你好! Version 1.0.1

 

再将 github.com/liujianping/foo clone 到工作区:

$: cd workspace
$: git clone [email protected]:liujianping/foo.git

 

现在,工作区目录到结构是这样的:

$: cd workspace
$: tree .
.
├── demo
│   ├── go.mod
│   ├── go.sum
│   └── main.go
├── foo
│   ├── foo.go
│   └── go.mod
└── go.work

  

直接修改 foo.go 文件:

package foo

import "fmt"

func Greet(name string) string {
    return fmt.Sprintf("%s, 你好! Version 2.0.1", name)
}

 

版本号修改一下。重新运行 demo 项目:

$: cd workspace
$: go run demo/main.go
Go Workspace, 你好! Version 1.0.1

 

发现输出并未发生改变。这是因为,github.com/liujianping/foo 虽然代码已经 clone 下来,但在 go.work 文件中尚未使用。

$: cd workspace
$: go work use ./foo

 

查看工作区文件 go.work:

go 1.18

use (
    ./demo
    ./foo
)

 

再次运行项目:

$: cd workspace
$: go run demo/main.go
Go Workspace, 你好! Version 2.0.1

 

小结

建立项目 workspace 工作区之后,对项目的依赖包的修改不再需要进行实时升级,只需要在本地进行修改,等到项目代码提交时,一并升级即可。虽然,Go workspace 的功能,有点类似 Go module 中的 replace 语句,但是很明显 workspace 在项目统筹方便更加出色,尽早使用起来摆脱依赖恐惧吧。

 

标签:main,demo,work,Golang,工作,workspace,go,foo
From: https://www.cnblogs.com/xingxia/p/golang_workspace.html

相关文章

  • Jetty 的工作原理以及与 Tomcat 的比较
    Jetty的基本架构Jetty目前的是一个比较被看好的Servlet引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是Handler,所有可以被扩展的组件都可以作为一个Handler,添加到Server中,Jetty就是帮你管理这些Handler。Jetty的基本......
  • docker swarm 工作节点获取不到overlay
    DockerSwarm工作节点获取不到overlay网络在使用DockerSwarm构建分布式应用程序时,我们可能会遇到一些网络相关的问题。其中之一就是工作节点无法获取到overlay网络。本文将介绍DockerSwarmoverlay网络,并解决工作节点无法获取到overlay网络的问题。什么是DockerSw......
  • Golang中结构体映射mapstructure库深入详解
    mapstructure用于将通用的map[string]interface{}解码到对应的 Go 结构体中,或者执行相反的操作。很多时候,解析来自多种源头的数据流时,我们一般事先并不知道他们对应的具体类型。只有读取到一些字段之后才能做出判断 +目录在数据传递时,需要先编解码;常用的方式是JSON编解码......
  • 为什么程序员却不是工作经验越久越吃香?
    越老越吃香的行业有一个特性,就是之前的工作对于现在的工作还有用。一说起这种工作,你的第一反应是不是老师、医生、律师之类的岗位。而不会是程序员,毕竟程序员的35岁危机还是“家喻户晓”的。那为什么会出现这样的状况呢?对应用型程序员来讲,确实存在年龄越大越不值钱的现象。以我的经......
  • 关于找工作
    其实是普通程序员才找不到工作由于程序员这行鱼龙混杂,培训的,转行的,毕业的,离职的,水平层次不齐,导致市场上对于程序员的需求远远供大于求,以为随便背背八股文就能月薪过万,这个市场薪资都被他们拉低了,真的是扰乱市场个人还是对这个问题还是比较有话语权的,1月初面试,那会疫情还没有完全......
  • 你真正了解Spring的工作原理吗
     Spring  1.1什么是SpringIOC和DI?  ①控制反转(IOC):Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为我们提供的对象即可,这就是控制反转的思想。②依赖注入(DI):Spring使用JavaBean对象的Set方法或者带参数的构造方法......
  • python切换工作目录
    Python切换工作目录在编写Python程序时,有时候我们希望将当前工作目录切换到其他目录下。Python提供了一些方法来实现这一功能。本文将介绍Python中如何切换工作目录,并提供一些示例代码。为什么要切换工作目录?在编写Python程序时,我们经常需要读取或写入文件,或者调用其他模块,这些......
  • 在互联网就业困难的行情下,Android开发如何提升自身竞争力,找到高薪工作?
    前言经历了3年之久的疫情困扰、终于解封了。本以为解封后市场行情会一片大好、想象着和以前来个跳槽涨薪、然后坐上技术VP、走上人身巅峰…结果现实给了狠狠一记耳光、还按在地上使劲摩擦。结果脸肿了、幸好腿还没断。自我介绍一下本人男28岁,一名andriod开发程序员,工作有将近五年......
  • 数据仓库hive的工作原理
    数据仓库Hive的工作原理数据仓库是一个用于存储和管理大数据的系统,而Hive是一款基于Hadoop的数据仓库工具。本文将介绍Hive的工作原理,并通过代码示例来说明其应用。Hive的基本原理Hive是基于Hadoop的一个数据仓库工具,它允许用户使用类似于SQL的语言(HQL)来查询和分析大规模的数......
  • MapReduce工作原理
    MapReduce理解什么是map,什么是reduce,为什么叫mapreduceMapMap:是一种映射过程,具体来说把一组数据按照某种Map函数映射成新的数据。也就是说,map主要是:映射、变换、过滤的过程。一条数据进入map会被处理成多条数据,也就是1进N出。ReduceReduce:是一种归纳过程,具体来说把若干组映射......