go入门Windows环境搭建

news2025/1/31 6:01:09

简介

Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。

根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语言,而 C++往往给人的感觉是,花了 100%的经历,却只有 60%的开发效率,产出比太低,Java 和 C#的哲学又来源于 C++。并且,随着硬件的不断升级,这些语言不能充分的利用硬件及 CPU。因此,一门高效、简洁、开源的语言诞生了。

Go 语言不仅拥有静态编译语言的安全和高性能,而且又达到了动态语言开发速度和易维护性。有人形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 语言程序的运行速度,又能达到 Python 语言的快速开发。

Windows环境搭建

  1. 下载golang

Go 官网下载地址
Go 官方镜像站(没有VPN就选择这个地址)

在这里插入图片描述

  1. 安装
  • 点击安装即可
    在这里插入图片描述
  • 验证
go version

在这里插入图片描述

  • 查看go环境
go env

在这里插入图片描述

说明:Go1.11 版本之后无需手动配置环境变量,使用 go mod 管理项目,也不需要非得把项目放到 GOPATH 指定目录下,你可以在你磁盘的任何位置新建一个项目。
Go1.13 以后可以彻底不要 GOPATH 了。
说白了就是让用户更简单的使用go

开发工具

  1. goland
    在这里插入图片描述

  2. vscode
    在这里插入图片描述

个人喜欢jetbrains所有产品,但是由于需要收费(你懂的),所以这里暂时用vscode。

  1. vscode安装

详细安装参考这篇博客

  1. vscode安装go插件

在这里插入图片描述

  1. 本地创建一个目录

在这里插入图片描述

  1. vscode打开这个目录

在这里插入图片描述
在这里插入图片描述
创建一个以go结尾的文件,vscode就会识别出用go插件解析:
在这里插入图片描述
此时就会让安装go提示工具,安装即可
在这里插入图片描述

注意如果vscode写代码没有提示,可以配置下面环境变量

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn    //将代理设置为国内源
  • GO111MODULE 是 Go 1.11 引入的一个环境变量,用于控制 Go 模块(Module)的行为。设置为 on 表示强制启用 Go 模块模式,无论项目是否在 GOPATH 目录下。在模块模式下,Go 会忽略 GOPATH 和 vendor 目录,转而使用 go.mod 文件来管理依赖。
  • GOPROXY 是 Go 模块模式下用于指定模块代理服务器的环境变量。默认情况下,Go 会直接从版本控制系统(如 GitHub)下载依赖模块,但在国内访问这些源可能会比较慢或不稳定。
    设置为 https://goproxy.cn 表示使用国内的 Go 模块代理服务器,这样可以加速依赖模块的下载。
  1. 编写hello world代码进行测试

在这里插入图片描述

后记

vscode和goland体验差距太大了:

  1. 如果仍然有出现写代码没有提示的情况,那么请手动安装相关的包:
    在这里插入图片描述
    把所有的包都选上安装,最好有VPN
    在这里插入图片描述
    然后重启vscode。
    此时就会自动安装,安装成功后就会有提示了。
    在这里插入图片描述

  2. 需要手动初始化模块,否则提示:initialization failed: packages.Load error: err: exit status 1: stderr: go: go.mod file not found in current directory or any parent directory; see 'go help modules’go list。
    这意味着你的项目目录中没有 go.mod 文件,而 Go 工具链期望在模块模式下工作。
    此时只要执行下面命令:

go mod init <module-name>

在这里插入图片描述
此时项目根目录就会多了一个go.mod文件,并且提示信息也没有了
在这里插入图片描述

go.mod简介

go.mod 文件是 Go 语言中用于模块管理的核心文件。它定义了当前项目的模块路径、Go 版本以及项目所依赖的其他模块(第三方库或内部模块)。Go 模块(Module)是 Go 1.11 版本引入的依赖管理机制,用于取代旧的 GOPATH 模式。

go.mod 文件的作用
  1. 定义模块路径

    • go.mod 文件的第一行通常定义了模块的名称(模块路径),例如:
      module github.com/username/myproject
      
      这个路径是唯一的,通常与代码仓库的路径一致,用于标识模块。
  2. 管理依赖

    • go.mod 文件会记录项目所依赖的其他模块及其版本。例如:
      require (
          github.com/gin-gonic/gin v1.9.1
          golang.org/x/sync v0.3.0
      )
      
      这些依赖项会在运行 go mod tidygo build 时自动下载到本地。
  3. 锁定依赖版本

    • 除了 go.mod 文件,Go 还会生成一个 go.sum 文件,用于记录依赖模块的完整哈希值,确保每次构建时使用的依赖版本一致,避免因依赖版本不一致导致的问题。
  4. 指定 Go 版本

    • go.mod 文件可以指定项目所需的 Go 版本,例如:
      go 1.20
      
      这表示该项目需要 Go 1.20 或更高版本来编译。
  5. 支持模块化开发

    • Go 模块允许你将代码拆分为多个模块,每个模块可以独立管理依赖和版本,适合大型项目或微服务架构。

go.mod 文件的结构

一个典型的 go.mod 文件如下:

module github.com/username/myproject

go 1.20

require (
    github.com/gin-gonic/gin v1.9.1
    golang.org/x/sync v0.3.0
)

replace github.com/old/module => github.com/new/module v1.2.3

exclude github.com/deprecated/module v1.0.0
  • module:定义模块路径。
  • go:指定 Go 版本。
  • require:列出项目依赖的模块及其版本。
  • replace:用于替换某个依赖模块的路径或版本(例如,使用本地的模块或 fork 的模块)。
  • exclude:排除某个模块的特定版本。

如何生成 go.mod 文件

如果你还没有 go.mod 文件,可以通过以下命令生成:

go mod init <module-name>

例如:

go mod init github.com/username/myproject

运行后,Go 会生成一个 go.mod 文件,并根据项目中的 import 语句自动添加依赖。


常用的 Go 模块命令
  1. go mod init:初始化模块,生成 go.mod 文件。
  2. go mod tidy:根据代码中的 import 语句,自动添加或删除 go.mod 中的依赖。
  3. go mod download:下载依赖模块到本地缓存(通常在 $GOPATH/pkg/mod 目录下)。
  4. go mod vendor:将依赖复制到项目的 vendor 目录中,用于离线构建。
  5. go list -m all:列出当前模块的所有依赖。

为什么需要 go.mod 文件?

在 Go 1.11 之前,Go 使用 GOPATH 模式管理代码和依赖,所有项目都必须放在 GOPATH 目录下,且依赖管理非常不方便。引入 go.mod 文件后:

  • 项目可以放在任何位置。
  • 依赖版本可以精确控制。
  • 支持模块化开发,适合现代软件工程实践。

参考文献

https://go.dev/doc/tutorial/getting-started

https://gobyexample.com/

https://www.w3schools.com/go/

https://go.dev/doc/tutorial/

https://www.geeksforgeeks.org/golang-tutorial-learn-go-programming-language/

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

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

相关文章

Mybatis初步了解

mysql缓存&#xff1a;根据sql语句进入缓存&#xff0c;如果sql语句多加一个空格就进入不到同一个缓存&#xff0c;另外数据库数据发生了更新&#xff0c;缓存中的数据不会同步。 延迟加载&#xff1a;先查询基本信息&#xff0c;再查询其他信息&#xff0c;而不是一次就查询出…

短连接项目01---基本框架的搭建和测试运行

文章目录 1.什么是短链2.仓库的创建3.项目的创建4.配置文件的修改5.三个模块的创建5.1如何创建5.2类型的选择5.3包的完善 6.yml文件的配置7.启动类的测试8可能会出现的问题 1.什么是短链 下面的这个就是一个长的url&#xff0c;我们的短链里面的链就是链接&#xff0c;也就是我…

2023年吉林省职业院校技能大赛网络系统管理样题-网络配置(华三代码)

目录 附录1:拓扑图 附录2:地址规划表 1.S1 2.S3 3.S4 4.S5 5.S7 6.S8 7.S9 8.R1 9.R2 10.R3 11.EG1 12.EG2 13.AC1 14.AC2 附录1:拓扑图 编号 型号

WSL 安装cuDNN

WSL 安装cuDNN 参考文档&#xff1a;https://docs.nvidia.com/deeplearning/cudnn/installation/latest/linux.html#verifying-the-install-on-linux 1. 下载相应包 根据下方下载地址进入下载界面&#xff0c;并选择与自己电脑相对应的平台执行图中的命令 下载地址&#xff1…

stack 和 queue容器的介绍和使用

1.stack的介绍 1.1stack容器的介绍 stack容器的基本特征和功能我们在数据结构篇就已经详细介绍了&#xff0c;还不了解的uu&#xff0c; 可以移步去看这篇博客哟&#xff1a; 数据结构-栈数据结构-队列 简单回顾一下&#xff0c;重要的概念其实就是后进先出&#xff0c;栈在…

Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴

目录 背景 解决gpedit.msc打不开 解决复制粘贴 剪贴板的问题 启用远程桌面剪贴板与驱动器 重启RDP剪贴板监视程序 以上都不行&#xff1f;可能是操作被Win11系统阻止 最后 背景 远程桌面无法复制粘贴&#xff0c;需要查看下主机策略组设置&#xff0c;结果按WinR输入…

(2023 RESS ) Federated multi-source domain adversarial adaptation framework

&#x1f4da; 研究背景与挑战 机械设备的故障诊断对于保障生产效率和安全至关重要。传统的智能诊断方法依赖于大量的训练数据&#xff0c;但在实际工业场景中&#xff0c;数据收集受到经济和时间因素的限制。更棘手的是&#xff0c;由于行业竞争和隐私安全问题&#xff0c;不…

Python数据分析-Python语法基础,IPython和Jupyter-Notebooks(二)

title: ‘Python数据分析:Python语法基础&#xff0c;IPython和Jupyter Notebooks&#xff08;二&#xff09;’ tags: python数据分析 categories:python数据分析 keywords:python数据分析 cover: …/img/404_icecream_whale.png description: 本文介绍python的基础语法和jup…

Redis学习之哨兵一

一、基本概念 1.主从复制的问题&#xff1a; 一旦主节点出现故障需要手动的将一个从节点晋升为主节点同时需要修改应用方的主节点地址还需要通过命令其他节点去复制新的主节点。 主节点的写能力和存储能力受到单机的限制 2.高可用&#xff1a; 上图为一主二从的redis主从复制模…

【C++高并发服务器WebServer】-9:多线程开发

本文目录 一、线程概述1.1 线程和进程的区别1.2 线程之间共享和非共享资源1.3 NPTL 二、线程操作2.1 pthread_create2.2 pthread_exit2.3 pthread_join2.4 pthread_detach2.5 patch_cancel2.6 pthread_attr 三、实战demo四、线程同步五、死锁六、读写锁七、生产消费者模型 一、…

【时时三省】(C语言基础)文件的随机读写

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 fseek 根据文件指针的位置和偏移量来定位文件指针 示例&#xff1a; 这个输出的就是ade seek&#xff3f;cur的意思是从当前偏移量 2就是从a往后偏移两个就是d 偏移量 SEEK&#xff3f;CUR…

【python】python基于机器学习与数据分析的二手手机特性关联与分类预测(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 python基于机器学习与数据分析的二手手机特性关联与…

WPF进阶 | WPF 数据绑定进阶:绑定模式、转换器与验证

WPF进阶 | WPF 数据绑定进阶&#xff1a;绑定模式、转换器与验证 一、前言二、WPF 数据绑定基础回顾2.1 数据绑定的基本概念2.2 数据绑定的基本语法 三、绑定模式3.1 单向绑定&#xff08;One - Way Binding&#xff09;3.2 双向绑定&#xff08;Two - Way Binding&#xff09;…

【数据结构】动态内存管理函数

动态内存管理 为什么存在动态内存管理动态内存函数的介绍&#x1f38a;malloc补充&#xff1a;perror函数&#x1f38a;free&#x1f38a;calloc&#x1f38a;realloc 常见动态内存错误对空指针的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一…

neo4j-community-5.26.0 install in window10

在住处电脑重新配置一下neo4j, 1.先至官方下载 Neo4j Desktop Download | Free Graph Database Download Neo4j Deployment Center - Graph Database & Analytics 2.配置java jdk jdk 21 官网下载 Java Downloads | Oracle 中国 path: 4.查看java -version 版本 5.n…

macbook安装go语言

通过brew来安装go语言 使用brew命令时&#xff0c;一般都会通过brew search看看有哪些版本 brew search go执行后&#xff0c;返回了一堆内容&#xff0c;最下方展示 If you meant "go" specifically: It was migrated from homebrew/cask to homebrew/core. Cas…

LCD液晶屏的工作原理以及背光模组

LCD液晶屏的工作原理以及背光模组 液晶屏工作原理 像素点的主要结构背光模组 LCD液晶屏主要由两部分组成&#xff0c;液晶屏和背光模组。背光模组提供均匀稳定的光源&#xff0c;液晶屏控制光线的传播路径&#xff0c;是屏幕显示设定的图像。 液晶屏 LCD的核心是两片玻璃之间…

maven的打包插件如何使用

默认的情况下&#xff0c;当直接执行maven项目的编译命令时&#xff0c;对于结果来说是不打第三方包的&#xff0c;只有一个单独的代码jar&#xff0c;想要打一个包含其他资源的完整包就需要用到maven编译插件&#xff0c;使用时分以下几种情况 第一种&#xff1a;当只是想单纯…

Controller 层优化四步曲

Controller 层优化四步曲 前言 在开发过程中&#xff0c;Controller 层作为系统与外界交互的桥梁&#xff0c;承担着接收请求、解析参数、调用业务逻辑、处理异常等职责。 然而&#xff0c;随着业务复杂度的增加&#xff0c;Controller 层的代码往往会变得臃肿且难以维护。 …

Java后端之AOP

AOP&#xff1a;面向切面编程&#xff0c;本质是面向特定方法编程 引入依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>示例&#xff1a;记录…