当前位置: 首页 > 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 源码包 假设你已经…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...