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

Go语言之基础入门

网站: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/ 下载使用。

相关文章:

  • 汉语拼音字母表 (声母表和韵母表)
  • 【AI大模型】驱动的未来:穿戴设备如何革新血液、皮肤检测与营养健康管理
  • Go团队的工作方式
  • 第一章 通信系统基本概念
  • 网络安全和信息安全
  • Python编程技巧:如何正确使用with语句(Python中with用法详解)
  • PostgreSQL与MySQL的区别探究
  • 上海媒体邀约的类型有哪些?分行业精准邀约
  • GitHub上狂揽62Kstars的程序员做饭指南
  • WPF 深入理解一、基础知识介绍
  • 华为HDC开发者大会鸿蒙进展超预期
  • Mac 安装依赖后依旧报错 ModuleNotFoundError: No module named ‘Crypto‘
  • CSS背景属性:打造丰富视觉效果的背景设计
  • 打造坚固的SSH防护网:端口敲门入门指南
  • 【SPSS】基于RFM+Kmeans的电商客户价值聚类分析
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [笔记] php常见简单功能及函数
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【RocksDB】TransactionDB源码分析
  • ES6语法详解(一)
  • HTTP 简介
  • javascript 总结(常用工具类的封装)
  • JavaScript设计模式系列一:工厂模式
  • Java方法详解
  • node-glob通配符
  • QQ浏览器x5内核的兼容性问题
  • scrapy学习之路4(itemloder的使用)
  • 读懂package.json -- 依赖管理
  • 缓存与缓冲
  • 区块链技术特点之去中心化特性
  • 如何学习JavaEE,项目又该如何做?
  • 使用Swoole加速Laravel(正式环境中)
  • 算法---两个栈实现一个队列
  • 算法系列——算法入门之递归分而治之思想的实现
  • Android开发者必备:推荐一款助力开发的开源APP
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 我们雇佣了一只大猴子...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #include到底该写在哪
  • #Z2294. 打印树的直径
  • #微信小程序(布局、渲染层基础知识)
  • $$$$GB2312-80区位编码表$$$$
  • (C语言)fgets与fputs函数详解
  • (js)循环条件满足时终止循环
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (生成器)yield与(迭代器)generator
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)大型网站的系统架构
  • (转载)hibernate缓存
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET中两种OCR方式对比
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @Bean, @Component, @Configuration简析