【go从入门到精通】go环境安装和第一个经典程序

go下载和环境变量配置

下载地址

Go官网下载地址:https://golang.org/dl/All releases - The Go Programming Languagehttps://golang.org/dl/ 

然后根据自己的系统环境来选择不同的安装包下载,下面我分别针对不同环境进行说明(大家可以根据自己的需要来选择安装不同的版本,这里我用的是go1.18.3版本,当然你们可以选择最新版本):

Windows安装和GOPATH配置

1.点击下载的msi安装包:

设置安装路径为:C:\Program Files\Go\bin

2.配置gopath 

GOPATH是一个环境变量,用来表明你写的go项目的存放路径

GOPATH路径最好只设置一个,所有的项目代码都放到GOPATHsrc目录下。

Linux和Mac平台就参照上面配置环境变量的方式将自己的工作目录添加到环境变量中即可。 Windows平台按下面的步骤将(你的安装目录,例如:C:\Program Files\Go\bin)添加到环境变量:

 我的电脑->属性->高级系统设置->环境变量

 接着我们查看PC的用户变量或者下面的系统变量查看是否有GOPATH变量名(这个配置的是go工程的路径),如果没有则新建一个:

我们看下这个目录下都有哪些文件:

同时在path里面添加go的安装目录(我的是C:\Program Files\Go\bin

3.检查go版本和环境变量:

Linux下安装和GOPATH配置

1.进入/usr/local目录进行下载安装包

cd /usr/local
wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz

2.下载成功后,解压压缩包:

tar -zxvf go1.18.3.linux-amd64.tar.gz

3.建立Go的工作空间

Golang 工作空间 :编译工具对源码目录有严格要求,每个工作空间 (workspace) 必须由 bin、pkg、src 三个目录组成。

Go tool 被设计成用来开源公共仓库中的代码,尽管或许你不需要发布你的代码, 但是环境的设置还是一样的。

Go的源代码必须存放在 workspace中。 workspace 是一个目录(directory hierachy),在这个目录下有三个子目录

  • src 包含 Go 源代码文件, 源代码文件组织成 packages (one package per directory)
  • pkg 包含 package objects (二进制的包)
  • bin 包含 可执行的命令 command(可执行的二进制文件)

go tool 编译(build) 源代码文件(source packages),并且将 resulting binaries 安装在 pkg 和 bin 目录下面。

src 目录下面包含多个 版本控制的仓库, (比如 Git 或者 Mercurial) 用来 跟踪一个或者多个 source package的开发进度。

这里,我们在/home目录下, 建立一个名为goworkspace的文件夹,
然后再建立三个子文件夹(子文件夹名必须为src、pkg、bin)。

4.添加PATH环境变量

vi /etc/profile

加入下面这三行:

export GOROOT=/usr/local/go  ##go安装目录          
export PATH=$GOROOT/bin:$PATH
export GOPATH=/home/goworkspace  ##go项目目录

保存后,执行以下命令,使环境变量立即生效:

source /etc/profile

至此,Go语言的环境已经安装完毕。

5.验证go环境

[root@izm5ee12oyxxwqdlq5bj8wz data]# go version
go version go1.18.3 linux/amd64

6.查看Go语言的环境信息

go env

Mac下安装

mac上直接下载 https://go.dev/dl/go1.18.3.darwin-amd64.pkg 然后安装即可,配置环境变量的方式和方法和Linux类似

vim  ./bash_profile

配置参数也参考linux的参数,最后 source ./bash_profile

 

 

go编辑器使用

         你可以参考我之前的这篇文章 骨灰级程序的电脑上都安装过哪些编辑器?,在学习期间,你可以使用 vscode下载地址icon-default.png?t=N7T8https://code.visualstudio.com/Download,  以后我们的开发环境就使用vscode来进行编码了,这个是跨平台的,所以不管你是windows,linux还是mac平台,你都可以使用生成的工程来打开你的项目,这里就不费口舌来讲vscode的功能了,总之一个字”好用“。

安装go插件

启动vscode选择插件->搜go, 选择下面的图中的插件,点击安装即可(因为我已经安装过了,所以这里的提示如此)

     

安装go开发工具包

vscode里会为我们提供代码提示、代码自动补全等功能,这将提高我们的开发效率:ctrl+shift+P:

在输入框内输入go install-》选择Go:Install/Update Tools

然后选择全选:

git安装

         因为golang是通过git来管理远程包的,所以我们首先要安装git,下载地址:Git - Downloadsicon-default.png?t=N7T8http://www.git-scm.com/download/   git安装比较简单,这里不再费文字了,你可以参考网络上其他文章

第一个经典程序

假设我在下面这个目录创建一个hello的工程

(1)打开vscode,

选择目录:E:\project\go\hello

(2)在new创建一个main.go文件:

package mainimport "fmt"
func main(){fmt.Println("hello world")
}

 

(3)在终端下执行编译

        如果你的vscode没有看到终端,你可以在最上面的菜单栏里找下Terminal,然后New Terminal就可以发现。

        终端下执行 go build .\main.go

   go编译器会在当前目录下查找你要编译的文件main.go,编译得到的可执行文件会保存在执行编译命令的当前目录下。

(4)在终端直接执行该hello.exe文件:

 结语:

           恭喜你,你已经具备了开发go的条件了,接下来我将分享

go基础:语法,函数,方法,面向对象,网络,并发编程,常用标准库,
框架: beego,gin,微服务
插件:文件读写,pprof性能调优,加解密,token,流控,数据库
实践项目:聊天室,游戏服务器
笔试面试题分析

其他。。。

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

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

相关文章

计算机网络中常用的命令

Ping 通过发送一系列的ICMP回送数据报来确定本机与目的主机是否可以正常通信。输出中TTL代表ICMP报文存活时间,可以推算报文经过了几个路由器。ping失败有可能是由于Windows防火墙-IPv4回显请求没有开启。Ipconfig 获取主机的网络配置信息,例如IP地址、子…

LeetCode 438. 找到字符串中所有字母异位词

对于判断两个词是否为异位词,可以改而判断它们的词频表是否相同。基于此,在s串中设置滑动窗口,大小跟p串一样,移动(剔除左边,增加右边)这个窗口并实时记录下它的词频表然后与p的词频表比较。 cl…

数据库之Oracle数据导入导出

目录 一、单表导出和导入1、单表导出数据2、单表导入数据二、全表导出和导入1、远程导出全表数据2、导入本地数据三、密码带特殊字符的写法1、Windows OS写法2、Linux/Unix OS写法 四、总结 一、单表导出和导入 1、单表导出数据 --导出远程服务上的表数据 exp 用户名/密码IP…

Platformview在iOS与Android上的实现方式对比

Android中早期版本Platformview的实现基于Virtual Display。VirtualDisplay方案的原理是,先将Native View绘制到虚显,然后Flutter通过从虚显输出中获取纹理并将其与自己内部的widget树进行合成,最后作为Flutter在 Android 上更大的纹理输出的…

【java】redis的bitmap实现签到功能

功能&#xff1a; 1.签到 2.判断某天是否签到 3.统计某月的签到情况 4.统计某月连续签到了多少天 5.统计某月一共签到了多少次 代码 1.依赖 <dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>…

Unity2023.1.19_ECS_DOTS

Unity2023.1.19_ECS_DOTS 盲学-盲目的学习&#xff1a; 懒着自己整理就看看别人整理的吧&#xff0c;整合一下逻辑通了不少&#xff1a; DOTS/data oriented technology stack-面向数据的技术栈 ECS/Entities-Component-System Unity-Entities包 Entities提供ECS架构面向数…

BUUCTF---[ACTF2020 新生赛]BackupFile1

1.题目描述 2.题目提示backup file &#xff0c;是备份文件的意思。点开链接&#xff0c;页面提示 3.查看源码没有什么有用信息&#xff0c;也没有登录界面&#xff0c;所以也不会用到蚁剑链接来找备份文件&#xff0c;所以大概率就是通过构造playload来查找备份文件。 4.备份…

kubectl 速查手册

资源对象文件 --- kind: Pod apiVersion: v1 metadata:name: myweblabels:app: nginx spec:containers:- name: webserverimage: nginx status: {} annotate # 更新资源所关联的注释信息 #-----------------------------------------# [rootmaster k8s]# kubectl apply -f m…

图像检测 - 模板匹配方法(算法详解)

1、介绍 在如今深度学习、神经网络遍地的世界,检测已经很常见了。在深度学习领域,关于目标检测也提出了很多很成熟的算法,例如双阶段的Fast-RCNN、单阶段的YOLO系列等等。 尤其是YOLO系列的不断更新迭代,目标检测的任务变得不再困难,可以做到实时检测的跟踪等等 但对于数…

新手想玩硬件,买单片机还是树莓派好?

新手想玩硬件&#xff0c;买单片机还是树莓派好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#x…

Springboot+vue的船舶监造系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的船舶监造系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的船舶监造系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff…

二百二十六、Linux——shell脚本查看今天日期、昨天日期、30天前日期、1月前日期

一、目的 由于磁盘资源有限&#xff0c;因为对原始数据的保存有事件限制&#xff0c;因为对于超过一定期限的数据文件则需要删除&#xff0c;要实现定期删除则第一步就是查看日期时间 二、在Linux中创建shell脚本 #! /bin/bash source /etc/profile nowdatedate --date0 da…

Linux 学习笔记(11)

十一、 资源监控 1 、 free 内存监控 语 法&#xff1a; free [-bkmotV][-s < 间隔秒数 >] 补充说明&#xff1a; free 指令会显示内存的使用情况&#xff0c;包括实体内存&#xff0c;虚拟的交换文件内存&#xff0c;共享内存区段&#xff0c;以 及系统核心使用的…

[计算机网络]:流量控制

一、流量控制简介 一条TCP连接的每一侧主机都为其设置了接收缓存&#xff0c;当TCP成功连接后&#xff0c;它发送的数据会放入接受缓存中。相关联的进程会从缓存中读取数据。但是存在一个问题&#xff0c;当某应用程序读取数据速率太慢&#xff0c;而发送数据一方不停的发送数…

5. 【Codeforces Round 927 (Div. 3)】B.查亚日历

B . 查亚日历 B.查亚日历 B.查亚日历 每次测试时限&#xff1a; 2 秒 每次测试时限&#xff1a;2 秒 每次测试时限&#xff1a;2秒 每次测试的内存限制&#xff1a; 256 兆字节 每次测试的内存限制&#xff1a;256 兆字节 每次测试的内存限制&#xff1a;256兆字节 题目描述 查…

【数据结构】复杂度详解

目录 &#xff08;一&#xff09;算法的复杂度 &#xff08;二&#xff09;时间复杂度 &#xff08;1&#xff09;练笔解释&#xff1a; i&#xff0c;示例1 ii&#xff0c;示例2 iii&#xff0c;二分查找 iv&#xff0c;斐波那契 &#xff08;三&#xff09;空间复杂度…

英福康INFICON真空计MPG400MPG401使用说明PPT讲解课件

英福康INFICON真空计MPG400MPG401使用说明PPT讲解课件

Java解决杨辉三角

Java解决杨辉三角 01 题目 给定一个非负整数 *numRows&#xff0c;*生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRo…

浏览器常见进程和线程

文章目录 进程和线程的联系和区别早期浏览器Chrome 打开一个页面有多少进程&#xff1f;分别是哪些渲染进程中的线程说下浏览器的进程、线程模型&#xff0c;线程模型中的每个线程都是干嘛用的&#xff1f;你知道哪些进程间通信的方式&#xff1f;多标签之间怎么通信&#xff1…

LeetCode 3069.将元素分配到两个数组中 I

给你一个下标从 1 开始、包含 不同 整数的数组 nums &#xff0c;数组长度为 n 。 你需要通过 n 次操作&#xff0c;将 nums 中的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操作中&#xff0c;将 nums[1] 追加到 arr1 。在第二次操作中&#xff0c;将 nums[2] 追加到 …