Go语言之基础入门

news/2024/11/15 0:40:57/

网站:http://hardyfish.top/

免费书籍分享:

资料链接:https://url81.ctfile.com/d/57345181-61545511-81795b?p=3899

访问密码:3899

在这里插入图片描述

免费专栏分享:

MySQL是怎样运行的从根儿上理解MySQL

课程链接:https://juejin.cn/book/6844733769996304392

资料链接:https://url81.ctfile.com/f/57345181-1272304696-1e5528?p=3899

访问密码:3899

架构实战案例解析

课程链接:https://time.geekbang.org/column/intro/281

资料链接:https://url81.ctfile.com/f/57345181-1272420925-8cf0b9?p=3899

访问密码:3899

给程序员的职场情商课

课程链接:https://www.imooc.com/read/62

资料链接:https://url81.ctfile.com/f/57345181-1272447235-571d25?p=3899

访问密码:3899

从0开始学大数据

课程链接:https://time.geekbang.org/column/intro/100020201

资料链接:https://url81.ctfile.com/f/57345181-1313968579-ad89a0?p=3899

访问密码:3899

在这里插入图片描述

Go语言优势

语法简洁,相比其他语言更容易上手,开发效率更高;

自带垃圾回收(GC),不用再手动申请释放内存,能够有效避免 Bug,提高性能;

语言层面的并发支持,让你很容易开发出高性能的程序;

提供的标准库强大,第三方库也足够丰富,可以拿来即用,提高开发效率;

可通过静态编译直接生成一个可执行文件,运行时不依赖其他库,部署方便,可伸缩能力强;

提供跨平台支持,很容易编译出跨各个系统平台直接运行的程序。

Java 虽然具备垃圾回收功能,但它是解释型语言,需要安装 JVM 虚拟机才能运行;

C 语言虽然不用解释,可以直接编译运行,但是它不具备垃圾回收功能,需要开发者自己管理内存的申请和释放,容易出问题。

而 Go 语言具备了两者的优势。

微服务和云原生已经成为一种趋势,而 Go 作为一款高性能的编译型语言,最适合承载落地微服务的实现,又容易生成跨平台的可执行文件,相比其他编程语言更容易部署在 Docker 容器中,实现灵活的自动伸缩服务。

第一个Go语言程序

package mainimport "fmt"func main() {fmt.Println("Hello, 世界")}
$ go run ch01/main.goHello, 世界

代码中的 go 是一个 Go 语言开发工具包提供的命令,它和你平时常用的 ls 命令一样都是可执行的命令。

它可以帮助你运行 Go 语言代码,并进行编译,生成可执行的二进制文件等。

run 在这里是 go 命令的子命令,表示要运行 Go 语言代码的意思。

第一行的 package main

代表当前的 ch01/main.go 文件属于哪个包,其中 package 是 Go 语言声明包的关键字,main 是要声明的包名。

在 Go 语言中 main 包是一个特殊的包,代表你的 Go 语言项目是一个可运行的应用程序,而不是一个被其他项目引用的库。

第二行的 import “fmt”

是导入一个 fmt 包,其中 import 是 Go 语言的关键字,表示导入包的意思,这里导入的是 fmt 包,导入的目的是要使用它。

第三行的 func main()

是定义了一个函数,其中 func 是 Go 语言的关键字,表示要定义一个函数或者方法的意思,main 是函数名,() 空括号表示这个 main 函数不接受任何参数。

在 Go 语言中 main 函数是一个特殊的函数,它代表整个程序的入口,也就是程序在运行的时候,会先调用 main 函数,然后通过 main 函数再调用其他函数,达到实现项目业务需求的目的。

第四行的 fmt.Println(“Hello, 世界”)

是通过 fmt 包的 Println 函数打印 Hello, 世界 这段文本。

其中 fmt 是刚刚导入的包,要想使用一个包,必须先导入。

Println 函数是属于包 fmt 的函数,这里我需要它打印输出一段文本,也就是 Hello, 世界。

第五行的大括号 }

表示 main 函数体的结束。

语言环境搭建

先下载 Go 语言开发包。

可以从官网 https://golang.org/dl/ 和 https://golang.google.cn/dl/ 下载(第一个链接是国外的官网,第二个是国内的官网,如果第一个访问不了,可以从第二个下载)。

安装测试

可以打开终端或者命令提示符,输入 go version 来验证 Go 语言开发工具包是否安装成功。

如果成功的话,会打印出 Go 语言的版本和系统信息。

环境变量设置

GOPATH

代表 Go 语言项目的工作目录,在 Go Module 模式之前非常重要,现在基本上用来存放使用 go get 命令获取的项目。

GOBIN

代表 Go 编译生成的程序的安装目录,比如通过 go install 命令,会把生成的 Go 程序安装到 GOBIN 目录下,以供你在终端使用。

假设工作目录为 /Users/flysnow/go,你需要把 GOPATH 环境变量设置为 /Users/flysnow/go,把 GOBIN 环境变量设置为 $GOPATH/bin。

项目结构

采用 Go Module 的方式,可以在任何位置创建你的 Go 语言项目。

假设你的项目位置是 /Users/flysnow/git/gotour,打开终端,输入如下命令切换到该目录下:

$ cd /Users/flysnow/git/gotour

然后再执行如下命令创建一个 Go Module 项目:

$ go mod init

执行成功后,会生成一个 go.mod 文件。

然后在当前目录下创建一个 main.go 文件,这样整个项目目录结构是:

gotour├── go.mod├── lib└── main.go

其中 main.go 是整个项目的入口文件,里面有 main 函数。

lib 目录是项目的子模块,根据项目需求可以新建很多个目录作为子模块,也可以继续嵌套为子模块的子模块。

编译发布

可以编译生成可执行文件,也可以把它发布到 $GOBIN 目录,以供在终端使用。

在项目根目录输入以下命令,即可编译一个可执行文件。

$ go build ./ch01/main.go

回车执行后会在当前目录生成 main 可执行文件。

$ ./main Hello, 世界

如果成功打印出 Hello, 世界,证明程序成功生成。

以上生成的可执行文件在当前目录,也可以把它安装到 $GOBIN 目录或者任意位置,如下所示:

$ go install ./ch01/main.go

使用 go install 命令即可,现在你在任意时刻打开终端,输入 main 回车,都会打印出 Hello, 世界。

跨平台编译

Go 语言通过两个环境变量来控制跨平台编译,它们分别是 GOOS 和 GOARCH 。

  • GOOS:代表要编译的目标操作系统,常见的有 Linux、Windows、Darwin 等。
  • GOARCH:代表要编译的目标处理器架构,常见的有 386、AMD64、ARM64 等。

这样通过组合不同的 GOOS 和 GOARCH,就可以编译出不同的可执行程序。

比如操作系统是 macOS AMD64 的,想编译出 Linux AMD64 的可执行程序,只需要执行 go build 命令即可,如以下代码所示:

$ GOOS=linux GOARCH=amd64 go build ./ch01/main.go

编辑器推荐

第一款是 Visual Studio Code + Go 扩展插件,通过官方网站 https://code.visualstudio.com/ 下载使用。

第二款是老牌 IDE 公司 JetBrains 推出的 Goland,所有插件已经全部集成,更容易上手,并且功能强大,新手老手都适合,可以通过官方网站 https://www.jetbrains.com/go/ 下载使用。


http://www.ppmy.cn/news/1470948.html

相关文章

【element-ui】el-date-picker动态设置picker-options

<el-date-pickerv-model"formObj.startDate"type"date"placeholder"开始时间":picker-options"startPickerOptions"> </el-date-picker><el-date-pickerv-model"formObj.endDate"type"date"placeh…

应届毕业之本科简历制作

因为毕设以及编制岗位面试&#xff0c;最近好久没有更新了&#xff0c;刚好有同学问如何制作简历&#xff0c;我就准备将我自己制作简历的流程分享给各位&#xff0c;到此也算是一个小的结束&#xff0c;拿了工科学位证书毕业去做&#x1f402;&#x1f40e;了。 简历主要包含内…

低代码平台实践:打造高效动态表单解决方案的探索与思考

&#x1f525;需求背景 我司业务同事在抓取到候选人的简历之后&#xff0c;经常会出现&#xff0c;很多意向候选人简历信息不完整&#xff0c;一个个打电话确认的情况&#xff0c;严重影响了HR的工作效率&#xff0c;于是提出我们可以通过发送邮件、短信、H5链接的方式来提醒候…

python基础1.2----爬虫基础

python基础内容之爬虫 ## 1. 关于爬虫的特殊性 爬虫是一个很蛋疼的东西, 可能今天讲解的案例. 明天就失效了. 所以, 不要死盯着一个网站干. 要学会见招拆招(爬虫的灵魂) 爬虫程序如果编写的不够完善. 访问频率过高. 很有可能会对服务器造成毁灭性打击, 所以, 不要死盯着一个网…

7、PHP 实现矩形覆盖

题目&#xff1a; 矩形覆盖 描述&#xff1a; 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形&#xff0c;总共有多少种方法&#xff1f; <?php function rectCover($number) {$prePreNum 1;$preNum 2;$temp 0;i…

TCP与UDP_三次握手_四次挥手

TCP vs UDP TCP数据 具体可以通过Cisco Packet Tracer工具查看&#xff1a; UDP数据 三次握手、四次挥手 为什么是3/4次&#xff1f;这牵扯到单工、双工通信的问题 TCP建立连接&#xff1a;表白 TCP释放连接&#xff1a;分手 TCP—建立连接—三次握手 解释&#xff1a; 首先&…

RabbitMQ消息队列 安装及基本介绍

一.MQ介绍 Message Queue &#xff08;MQ&#xff09;是一种跨进程的通信机制&#xff0c;用于在系统之间进行传递消息。MQ作为消息中间件&#xff0c;可以进行异步处理请求&#xff0c;从而减少请求响应时间和解耦 1.1 应用场景 1.1.1 系统之间通过MQ进行消息通信&#xff0…

linux 如何判断磁盘是HDD还是SSD

本文主要是判断磁盘是 HDD 还是不上 HDD&#xff0c;只用于直通盘的判断&#xff0c;raid盘不在内 方法一、 使用lsblk 命令判断 # 仅查看物理盘的名称、空间大小、SSD(0)? HDD(1)?, 设备供应商以及状态。 [integraTorsctyunos ~]$ lsblk -d -o NAME,SIZE,ROTA,VENDOR,STATE…