当前位置: 首页 > news >正文

go入门Windows环境搭建

简介

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.1golang.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/myprojectgo 1.20require (github.com/gin-gonic/gin v1.9.1golang.org/x/sync v0.3.0
)replace github.com/old/module => github.com/new/module v1.2.3exclude 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/

相关文章:

go入门Windows环境搭建

简介 Go 即 Golang&#xff0c;是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。 根据 Go 语言开发者自述&#xff0c;近 10 多年&#xff0c;从单机时代的 C 语言到现在互联网时代的 Java&#xff0c;都没有令人满意的开发语言&#xff0c;而 C往往给人的感觉是&a…...

安装Ubuntu22.04

1.引用教程 如何安装Ubuntu Server 22.04 LTS_ubuntu22.04 server-CSDN博客 2.空间分配 要使用 docker 比较多所以分别的 docker 空间大...

对比OpenAI的AI智能体Operator和智谱的GLM-PC,它们有哪些不同?

OpenAI 的 AI 智能体 Operator 和智谱的 GLM-PC 有以下不同&#xff1a; 功能侧重 Operator&#xff1a;主要侧重于网页操作&#xff0c;能在网页上模拟人类进行点击、输入等操作&#xff0c;完成如预订旅行住宿、餐厅预约、在线购物、在 Arxiv 上进行论文分类搜索等任务123。…...

Git Bash 配置 zsh

博客食用更佳 博客链接 安装 zsh 安装 Zsh 安装 Oh-my-zsh github仓库 sh -c "$(curl -fsSL https://install.ohmyz.sh/)"让 zsh 成为 git bash 默认终端 vi ~/.bashrc写入&#xff1a; if [ -t 1 ]; thenexec zsh fisource ~/.bashrc再重启即可。 更换主题 …...

美格智能AIMO智能体+DeepSeek-R1模型,AI应用的iPhone时刻来了

导语&#xff1a; 当AI大模型从云端下沉至终端设备&#xff0c;一场关于效率、隐私与智能化的革命悄然展开。作为全球领先的无线通信模组及解决方案提供商&#xff0c;美格智能凭借其高算力AI模组矩阵与端侧大模型部署经验&#xff0c;结合最新发布的AIMO智能体产品&#xff0…...

Python标准库 - os (1) 环境变量、进程的用户和组

文章目录 1 访问和修改环境变量1.1 访问环境变量1.2 修改环境变量 2 进程的用户和组2.1 进程的ID2.2 进程的用户2.3 进程组 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了环境变量、进程的用户和用户组相关的控制方法。 参考…...

QT 通过ODBC连接数据库的好方法:

效果图&#xff1a; PWD使用自己的&#xff0c;我的这是自己的&#xff0c;所以你用不了。 以下是格式。 // 1. 设置数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QODBC");// 建立和QMYSQL数据库的连接 // 设置数据库连接名称&#xff08;DSN&am…...

机器学习 - 初学者需要弄懂的一些线性代数的概念

一、单位矩阵 在数学中&#xff0c;单位矩阵是一个方阵&#xff0c;其主对角线上的元素全为1&#xff0c;其余元素全为0。单位矩阵在矩阵乘法中起到类似于数字1在数值乘法中的作用&#xff0c;即任何矩阵与单位矩阵相乘&#xff0c;结果仍为原矩阵本身。 单位矩阵的定义&…...

WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据

简介 在这个系列的上一篇文章中&#xff0c;我们介绍了ESP32 I2S音频总线的相关知识&#xff0c;简要了解了什么是I2S总线、它的通信格式&#xff0c;以及相关的底层API函数。没有看过上篇文章的可以点击文章进行回顾&#xff1a; ESP32 I2S音频总线学习笔记&#xff08;一&a…...

本地大模型编程实战(03)语义检索(2)

文章目录 准备按批次嵌入加载csv文件&#xff0c;分割文档并嵌入测试嵌入效果总结代码 上一篇文章&#xff1a; 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索&#xff0c;为了演示方便&#xff0c;使用的是 langchain 提供的内存数据库。 在实…...

LabVIEW橡胶动态特性测试系统

本文介绍了一个利用LabVIEW软件和NI高速数据采集设备构建的橡胶动态特性测试系统。该系统实现了橡胶材料动态性能的精确测量&#xff0c;并通过虚拟仪器技术&#xff0c;提高了测试数据的处理效率和准确性。系统支持实时数据处理和多种信号的动态分析&#xff0c;适用于工业和科…...

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识

1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架&#xff0c;设计目的是简化搭建及开发过程&#xff0c;并不是对Spring功能上的增强&#xff0c;而是提供了一种快速使用Spr…...

使用 Vue 3 的 watchEffect 和 watch 进行响应式监视

Vue 3 的 Composition API 引入了 <script setup> 语法&#xff0c;这是一种更简洁、更直观的方式来编写组件逻辑。结合 watchEffect 和 watch&#xff0c;我们可以轻松地监视响应式数据的变化。本文将介绍如何使用 <script setup> 语法结合 watchEffect 和 watch&…...

Vue.js 高级组件开发

Vue.js 高级组件开发&#xff1a;构建一个智能动态表单生成器 ——从可复用架构到性能优化的全链路实践 引言&#xff1a;为什么需要高级组件&#xff1f; 在现代前端开发中&#xff0c;组件不仅是UI的封装&#xff0c;更是业务逻辑的载体。一个“高级”Vue组件应当具备&…...

React应用深度优化与调试实战指南

一、渲染性能优化进阶 1.1 精细化渲染控制 typescript 复制 // components/HeavyComponent.tsx import React, { memo, useMemo } from react;interface Item {id: string;complexData: {// 复杂嵌套结构}; }const HeavyComponent memo(({ items }: { items: Item[] }) &g…...

Linux 内核学习(4) --- devfreq 动态调频框架

目录 Linux devfreq 简介核心数据结构devfreq_dev_profile 结构体devfreq_governor 结构体devfreq 结构体 工作流程devFreq framework 初始化governor 初始化devfreq Device 注册动态变频的实现device_unregister 流程 用户空间节点参考文章 Linux devfreq 简介 现在的 Soc 由…...

Spring Boot 无缝集成SpringAI的函数调用模块

这是一个 完整的 Spring AI 函数调用实例&#xff0c;涵盖从函数定义、注册到实际调用的全流程&#xff0c;以「天气查询」功能为例&#xff0c;结合代码详细说明&#xff1a; 1. 环境准备 1.1 添加依赖 <!-- Spring AI OpenAI --> <dependency><groupId>o…...

Ansible自动化运维实战--yaml的使用和配置(7/8)

文章目录 一、YAML 基本语法1.1. 缩进1.2. 注释1.3. 列表1.4. 字典 二、Ansible 中 YAML 的应用2.1. Ansible 剧本&#xff08;Playbooks&#xff09;2.2. 变量定义2.3. 角色&#xff08;Roles&#xff09;2.4. Inventory 文件2.5. 数据类型2.6. 引用变量 在 Ansible 里&#x…...

kamailio-5.8.4-centos9编译

安装必要的依赖包 在开始编译之前&#xff0c;你需要安装编译 Kamailio 所需的一些基础依赖包&#xff1a; dnf install -y make gcc gcc-c flex bison libxml2-devel openssl-devel sqlite-devel mysql-devel pcre-devel libcurl-devel下载并解压 Kamailio 源码包 假设你已经…...

单例模式 - 单例模式的实现与应用

引言 单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中最简单且最常用的模式之一。它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。单例模式常用于需要全局唯一对象的场景&#xff0c;如配置管理、日志记录、线程池等。 本文将详细介…...

hadoop==docker desktop搭建hadoop

hdfs map readuce yarn https://medium.com/guillermovc/setting-up-hadoop-with-docker-and-using-mapreduce-framework-c1cd125d4f7b 清理资源 docker-compose down docker system prune -f...

zookeeper的介绍和简单使用

1 zookerper介绍 zookeeper是一个开源的分布式协调服务&#xff0c;由Apache软件基金会提供&#xff0c;主要用于解决分布式应用中的数据管理、状态同步和集群协调等问题。通过提供一个高性能、高可用的协调服务&#xff0c;帮助构建可靠的分布式系统。 Zookeeper的特点和功能…...

DiffuEraser: 一种基于扩散模型的视频修复技术

视频修复算法结合了基于流的像素传播与基于Transformer的生成方法&#xff0c;利用光流信息和相邻帧的信息来恢复纹理和对象&#xff0c;同时通过视觉Transformer完成被遮挡区域的修复。然而&#xff0c;这些方法在处理大范围遮挡时常常会遇到模糊和时序不一致的问题&#xff0…...

CentOS/Linux Python 2.7 离线安装 Requests 库解决离线安装问题。

root@mwcollector1 externalscripts]# cat /etc/os-release NAME=“Kylin Linux Advanced Server” VERSION=“V10 (Sword)” ID=“kylin” VERSION_ID=“V10” PRETTY_NAME=“Kylin Linux Advanced Server V10 (Sword)” ANSI_COLOR=“0;31” 这是我系统的版本,由于是公司内网…...

World of Warcraft [CLASSIC] Jewelcrafting Gemstone 2

World of Warcraft [CLASSIC] Jewelcrafting & Gemstone 2 珠宝加工与常用宝石列表&#xff08;紫色史诗级&#xff09;&#xff1a; World of Warcraft [CLASSIC] Jewelcrafting & Gemstone_wlk宝石属性一览表-CSDN博客...

AI刷题-最小化团建熟悉程度和

目录 问题描述 输入格式 输出格式 解题思路&#xff1a; 状态表示 状态转移 动态规划数组 预处理 实现&#xff1a; 1.初始化&#xff1a; 2.动态规划部分&#xff1a; &#xff08;1&#xff09;对于已分组状态的&#xff0c;跳过&#xff1a; &#xff08;2&…...

一文详解Filter类源码和应用

背景 在日常开发中&#xff0c;经常会有需要统一对请求做一些处理&#xff0c;常见的比如记录日志、权限安全控制、响应处理等。此时&#xff0c;ServletApi中的Filter类&#xff0c;就可以很方便的实现上述效果。 Filter类 是一个接口&#xff0c;属于 Java Servlet API 的一部…...

应用层协议 HTTP 讲解实战:从0实现HTTP 服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; HTTP 协议 &#x1f98b; 认识 URL&#x1f98b; urlencode 和 urldecode 二&#xff1a;&#x1f525; HTTP 协议请求与响应格式 &#x1f98b; HTTP 请求…...

DDD-全面理解领域驱动设计中的各种“域”

一、DDD-领域 在领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;中&#xff0c;**领域&#xff08;Domain&#xff09;**指的是软件系统所要解决的特定业务问题的范围。它涵盖了业务知识、规则和逻辑&#xff0c;是开发团队与领域专家共同关注的核心…...