十分钟带你入门Go语言(Golang)开发

在这里插入图片描述

概述

Go语言是由 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go语言的设计目标是将静态语言的安全性和性能与动态语言的易用性相结合。Go语言在语言层面提供了对协程的支持,特别适合编写高并发的项目。随着使用Go语言开发的Docker、Kubernetes、Isito等容器化技术的兴起,Go语言越来越被广大开发者所青睐,一度从TIOBE编程语言排行榜的榜上无名打入到了第8名,而且上升势头还正盛,而且Go的生态也越来越庞大,所以现在学习Go语言,是一个不错的选择,以后的工作岗位需求也会越来越多。

在这里插入图片描述

安装Go开发环境

在ubuntu、debian、raspberry中安装go
jagitch@5509e97c27ae:~$ ARCH=$(dpkg --print-architecture)
jagitch@5509e97c27ae:~$ GO_VERSION="go1.22.3"
jagitch@5509e97c27ae:~$ wget https://go.dev/dl/${GO_VERSION}.linux-$ARCH.tar.gz \&& sudo rm -rf /usr/local/go \&& sudo tar -C /usr/local -xzf ${GO_VERSION}.linux-$ARCH.tar.gz \&& export PATH=$PATH:/usr/local/go/bin \&& echo 'export PATH=$PATH:/usr/local/go/bin' >> .bashrc \&& rm ${GO_VERSION}.linux-$ARCH.tar.gz
在windows中安装go

去官网下载安装包安装即可 https://go.dev/dl/

在macOS中安装go

去官网下载安装包

https://go.dev/dl/go1.22.3.darwin-arm64.pkg

https://go.dev/dl/go1.22.3.darwin-amd64.pkg

设置GoProxy为国内代理服务器,加快Go包的下载速度

go env -w GOPROXY="https://goproxy.cn,direct"

聊聊Go的模块化

目前的Go语言,程序是组织在一个Go Module中的(入门课程先忽略过时的GOPATH组织代码的方式),所以创建项目的时候,首先要初始化一个模块。一个模块中可以创建Package(包),包是由同一个目录下多个文件组成的,包中可以定义变量、常量、函数、结构体、接口、类型以及导入别的包,这种模块化的方式易于维护和重用。

学习Go语言的第一个程序Hello World

我们从一个Hello World程序开始,来讲解Go项目的创建、编码以及运行、发布。开发环境我使用的是web版的vscode环境(基于Ubuntu系统和go1.22.2),它可以让我们使用手机、平板就可以浏览代码且可以进行开发调试,保存书签就可以快速打开项目进行开发,且此开发环境可以秒级部署、秒级启动,并且可以在Windows中使用Ubuntu环境(比WSL更轻量高效),如需搭建,请参考《搭建Golang在线开发环境(随时随地码代码)》

  1. 打开web版的vscode,浏览器访问http://127.0.0.1:8080/?folder=/home/coder/workspace

    在这里插入图片描述

  2. 如果vscode还没安装Go扩展程序请安装

    在这里插入图片描述

  3. 安装完Go扩展后,还需打开vscode的命令面板,执行Go:Install/Update Tools安装Go的工具链

    在这里插入图片描述

  4. 在终端输入命令创建项目文件夹,使用Linux系统后就习惯使用命令(比使用鼠标操作没直接输入命令快)

    jagitch@4d7a018f5ea9:workspace$ mkdir go-hello
    jagitch@4d7a018f5ea9:workspace$ cd go-hello
    jagitch@4d7a018f5ea9:go-hello$ 
    
  5. 创建Go Module(一定要创建,否则启动不了项目),会新建一个go.mod文件

    jagitch@4d7a018f5ea9:go-hello$ go mod init go-hello
    go: creating new go.mod: module go-hellojagitch@4d7a018f5ea9:go-hello$ ls
    go.mod
    
  6. 创建main.go文件

    jagitch@4d7a018f5ea9:go-hello$ touch main.go
    
  7. 在main.go文件中输入如下代码

    package mainimport "fmt"func main() {fmt.Println("Hello World")
    }
    
    1. package main声明了一个main包,每一个go文件都必须声明属于哪一个包,且同一个目录中的多个文件只能声明为同一个包,但是测试包(包名以_test结尾)除外

    2. import "fmt" 是导入语句,导入了go语言库中的fmt包,一个包可以导入到个包来调用那些包的功能

    3. func main() {}定义了一个函数,函数的作用是将同一个功能的代码封装到一起以供需要此功能的地方进行函数调用,每一个可执行的Go程序都需要一个main包中定义一个main函数,这是可执行程序的入口(严格来说应该是我们自己写的代码的运行入口,Go程序的真正入口在runtime中)。

    4. main函数的大括号中称为函数体,函数体中就是实现函数功能的语句的集合,语句的数量没有限制,可以没有语句,可以只有一条,也可以有很多条,此main函数,就只有一条语句fmt.Println("Hello World"),该语句调用fmt包中的Println函数,"Hello World"叫做字符串(有字符组成的串),字符串中可以有没有字符,叫空字符串"","Hello World"当作函数的参数传递给fmt.Println函数,作用是把这个字符串输出到标准输出(这里会显示在终端)并换行。

  8. 运行

    jagitch@4d7a018f5ea9:go-hello$ go run main.go
    Hello World
    jagitch@4d7a018f5ea9:go-hello$ 
    
  9. 编译,Go编译器可以直接将源码编译成目标架构的二进制可执行程序

    jagitch@4d7a018f5ea9:go-hello$ go build main.go
    jagitch@4d7a018f5ea9:go-hello$ ls
    go.mod  main  main.go  main_test.go
    jagitch@4d7a018f5ea9:go-hello$ ./main
    Hello World
    
  10. Go编译器还支持交叉编译(在宿主机中编译其他架构的二进制程序),例如我们在ubuntu中将程序编译为windows系统下的可执行程序

    jagitch@4d7a018f5ea9:go-hello$ GOARCH=amd64 GOOS=windows go build main.go
    jagitch@4d7a018f5ea9:go-hello$ ls
    go.mod  main  main.exe  main.go  main_test.go
    

    可以发现,在Ubuntu系统下我们成功编译出Windows系统下的可执行程序main.exe

总结

本文首先介绍了以下Go语言的由来以及基本特点与应用,我们也知道它是一门很有生命力的编程语言,才发展10多年就已经在TIOBE排名第八,而且还正在往上发展。接着介绍了Go语言的开发环境的搭建,讲解了Go Module和Go Package的作用和使用,最后从零搭建并运行了一个Hello World程序,这个Hello World项目虽小,但是已经包含了Go项目大部分的知识点了,大项目都是在这个基础上发展而来的。最后介绍了Go很强的一个功能:交叉编译,只需一台主机,就可以开发适合于多个平台下的程序,说明Go是一门非常适合开发跨平台软件的一门开发语言。Go也还有很多非常棒的特性,如函数支持多个返回值、语言层面支持协程(非常适合快速开发高并发程序)等,这些内容以后有时间都会写博客分享给大家,你们的鼓励就是我写作的动力,如果本博文对您有所启发和帮助,希望您给个一键三连,感谢!如果对本文以及Go语言有任何疑问的地方,欢迎评论区留言。

推荐阅读

1.【Go零基础系列】003:Go语言中的变量详解

2.【Git从入门到精通】系列课程02:从0开始为项目使用git进行版本控制

3. 十分钟带你入门PostgreSQL数据库开发

4. Ubuntu24.04怎么更换软件源/Ubuntu安装软件很慢怎么解决

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

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

相关文章

基于opencv的答题卡识别

文章目录 一、背景需求二、处理步骤图片预处理检测到答题卡轮廓透视变换找每个圆圈的轮廓轮廓排序判断是否答题正确 一、背景需求 传统的手动评分方法耗时且容易出错,自动化评分可以可以显著提高评分过程的速度和准确性、减少人工成本。 答题卡图片处理效果如下&am…

想出国?去外企?建议网工无脑冲思科认证。

近年来,国内职场竞争愈发激烈,内卷现象严重,大部分人都面临着巨大的就业压力,或是找工作无门、或是中年危机悄然来临,时刻担心被职场优化。 在这样的背景下,出国或进入外企工作,成为了许多人寻…

项目中使用多线程

项目中使用多线程 线程池 1、线程池配置 项目中如果要使用线程池,必须先进行配置,如果使用spring 默认的线程池配置可能会导致OOM异常 注意要在spring启动项 上加上EnableAsync 开启异步支持线程池要配置Configuration注解交给spring管理配置线程池主…

SpringMVC笔记详解

SpringMVC 1、SpringMVC简介 1.1、什么是MVC MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为实体类Be…

[JavaScript] 动态获取方法参数名

JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言&am…

Optional类的使用 java8(附代码)

🍰 个人主页:_小白不加班__ 🍞文章有不合理的地方请各位大佬指正。 🍉文章不定期持续更新,如果我的文章对你有帮助➡️ 关注🙏🏻 点赞👍 收藏⭐️ 文章目录 一、什么是Optional?二、…

科研绘图系列:R语言和弦图 (Chord diagram)

介绍 和弦图(Chord Diagram)是一种用于展示多个实体之间相互关系的数据可视化方法。它通常用于表示网络或系统中不同节点(实体)之间的连接强度或流量。和弦图由一个圆形布局组成,每个节点在圆周上占据一个扇形区域,节点之间的连接通过圆内的线条(和弦)来表示。 特点:…

linux环境下重新编译opencv的安卓动态链接库opencv_java4.so文件

一、安装java 1.8 #安装依赖 sudo apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo add-apt-repository ppa:ts.sch.gr/ppa sudo apt-get update sudo apt-get install oracle-java8-installer 二…

VB中的函数和子程序(Sub)的区别和用法

在VB(Visual Basic)及其派生语言如VBA(Visual Basic for Applications)中,函数(Function)和子程序(Sub)是两种不同类型的代码块,它们在用途、返回值以及调用方…

前端必知必会-html的id属性和Iframe

文章目录 HTML id 属性类和 ID 之间的区别带有 ID 和链接的 HTML 书签在 JavaScript 中使用 id 属性HTML IframeIframe - 设置高度和宽度Iframe - 删除边框Iframe - 链接的目标总结 HTML id 属性 HTML id 属性用于为 HTML 元素指定唯一 id。id 属性的值在 HTML 文档中必须是唯…

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.07.15-2024.07.20

文章目录~ 1.SegPoint: Segment Any Point Cloud via Large Language Model2.LLMs as Function Approximators: Terminology, Taxonomy, and Questions for Evaluation3.Scaling Laws with Vocabulary: Larger Models Deserve Larger Vocabularies4.Large Language …

数据结构第七讲:栈和队列OJ题

数据结构第七讲:栈和队列OJ题 1.有效的括号2.用队列实现栈3.用栈实现队列4.设计循环队列 1.有效的括号 链接: OJ题目链接 typedef char StackDataType;typedef struct Stack {StackDataType* arr;//使用一个指针来指向开辟的数组int capacity;//保存数组的空间大…

微信小程序注册及认证

进行了两个小程序的注册及认证,记录一下 首先,注册小程序通常都是给企业注册,有些资料最好事先准备,考虑到认证、备案的审核,以及对公打款需要走公司内的审批等,整个过程可能需要一到两周的时间。 准备工…

【ffmpeg命令入门】获取音视频信息

文章目录 前言使用ffmpeg获取简单的音视频信息输入文件信息文件元数据视频流信息音频流信息 使用ffprobe获取更详细的音视频信息输入文件信息文件元数据视频流信息音频流信息 总结 前言 在处理多媒体文件时,了解文件的详细信息对于调试和优化处理过程至关重要。FFm…

后端面试题日常练-day11 【Java基础】

题目 希望这些选择题能够帮助您进行后端面试的准备,答案在文末 Java中的String和StringBuffer/StringBuilder有何区别? a) String是不可变的,StringBuffer/StringBuilder是可变的 b) String是线程安全的,StringBuffer/StringBuil…

springboot爱宠屋宠物商店管理系统-计算机毕业设计源码52726

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

【机器学习】正规方程的简单介绍以及如何使用Scikit-Learn实现基于正规方程的闭式解线性回归

引言 Scikit-learn 是一个开源的机器学习库,它支持 Python 编程语言。它提供了多种机器学习算法的实现,并用于数据挖掘和数据分析 文章目录 引言一、正规方程的定义二、正规方程的原理三、使用 Scikit-Learn 实现基于正规方程的闭式解线性回归3.1 工具3.…

实验15.多线程调度

简介 实验.多线程调度 内核线程 1.在时钟中断函数中处理中,减少当前线程pcb的tick,tick为0则启动调度2.调度,把当前线程pcb放入就绪对立队尾,把就绪线程队首拿出来执行主要代码 引导 省略内核 list.h #ifndef __LIB_KERNEL_…

Nginx缓存配置实现CDN加速

Nginx缓存配置实现CDN加速 1. 前言2. 配置介绍2.1 proxy_cache_path2.2 proxy_cache2.3 proxy_cache_key2.4 proxy_cache_lock2.5 proxy_cache_lock_timeout2.6 proxy_cache_lock_age2.7 proxy_cache_min_uses2.8 proxy_cache_purge2.9 proxy_cache_valid 3. 强制分片4. 配置示…

【2024最新】 服务器安装Ubuntu20.04 (安装教程、常用命令、故障排查)持续更新中.....

安装教程(系统、NVIDIA驱动、CUDA、CUDNN、Pytorch、Timeshift、ToDesk、花生壳) 制作U盘启动盘,并安装系统 在MSDN i tell you下载Ubuntu20.04 Desktop 版本,并使用Rufus制作UEFI启动盘,参考UEFI安装Ubuntu使用GPTU…