我是如何 3 小时上手 Golang 的

一篇文章带你入门Golang 条件判断语句条件分支语句循环语句与其它编程语言不同的是,Go 语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构。关键字 for 的基本使用方法与其他语言类似,只是循环条件不含括号循环控制语句goto 可以打破原有代码执行顺序,直接跳转到某一行执行代码。math包提供了基本的数学常数和数学函数,使用时需要import "math"类型名:标识结构体的名称,在同一个包内不能重复。结构体中属性,也叫字段,必须唯一。同类型的成员属性可以写在一行。 阅读详情

Golang 是一门诞生 10 来年左右的“新”的编程语言(2009 年开源,相比 C 和 Java 是新语言),但是很多人推荐学习它,因为它的并发编程很方便,还有 Docker 是使用 Golang 开发的杀手级应用。因此我也打算简单了解一下,算是拓宽一下自己的知识面,或者有一天可以用到它。无论怎样吧,我把我学习的内容进行了整理,方便其他有意向的同学可以进行快速了解。

      Golang 也被称为 Go,或者 Go 语言。我并没有按照一般的学习路线进行学习,毕竟我已经具备了一些其他编程语言的基础,比如 Java、PHP、C 等。因此,我大体从五个方面对 Go 语言进行了学习,我学习的内容包括 指针、函数参数的传递、面向对象、协程 和 Gin 框架的简单使用。如果读者完全是一个编程小白,就是没有任何编程语言的基础,那么这篇文章并不适合阅读,因为我只是挑了几个自认为的重点进行了学习了解,因此至少要了解一门高级编程语言再读我整理的这篇文章。

      接下来,我开始介绍对于 Go 我学习的几个点。

指针

      指针被称为 C 语言的灵魂,同时也是被很多非 C 语言程序员望而生畏的一个特性。Java、C# 等语言虽然也会有报出类似“空指针”这样的异常,但是 Java 和 C# 已经在有意的将这个概念淡化掉,甚至不再提它。但是,Go 语言中是有这个概念的。

       提到指针,就不得不提 C 语言的指针。C 语言的指针可以简单的被理解为是一个内存地址,但我认为这么理解其实并不严谨。我在学 C 语言的时候,书上和老师都说“指针就是一个地址”,但是我觉得很奇怪,“指针”既然是一个“地址”,为什么不直接了当的说它是一个“地址”,而是要称呼它为“指针”。后来经过自己的使用,好像明白了其中的原因。“地址”表示的是内存的一个编号,而“指针”表示的是一块内存的起始位置。也就是说,“指针”是有类型和长度的。而 指针 的类型关系到了 指针 的 加法 和 减法 的运算。

       在 C 语言中,指针常用的运算有 加法、减法、取地址 和 取内容。对应的运算符分别是:自增 1(++)、自减 1(--)、自增(+=)、自减(-=)、取地址(&) 和 取内容(*)。C 语言的指针在进行 加法 和 减法 运算的时候,是根据 指针类型的不同 所移动的地址长度是不同的,这点是很关键的一点,往往这点也是比较难理解的一点,尤其是操作 多级指针 和 多维数组 的时候。不过,好在 C 语言中的 指针自增、自减 的这些操作在 Go 语言中都没有。在 Go 语言中,只有 取地址(&) 和 取内容(*)两个操作,因此,我们只关心 & 和 * 即可。

      对于 Go 语言的指针相对于 C 语言的指针而言是非常简单的,这里通过一个简单的例子,来了解一下 Go 语言这两个运算符的使用方法。先来看 取地址 运算符 & 的用法。

package main

import "fmt"

func main() {
	var i int
	i = 10

	fmt.Printf("%x, %d\r\n", &i, i)
}

       上面的代码中,定义了一个整型变量 i,然后通过 fmt.Printf() 来输出了 变量 i 的地址 和 变量 i 的值。上面的内容输出如下:

src>go run point.go
c0000a2058, 10

       上面输出中的 c0000a2058 就是变量 i 的地址(地址的输出会因操作系统版本、补丁版本、Go 编译器版本的不同而不同),因此只要在变量前使用 & 就可以得到变量的地址,看下面的示意图。

图片

      上面的变量 i 是一个通常情况下的普通变量,接着我们来看一下 指针变量。我们来定义一个 指针类型 的变量,代码如下:

package main

import "fmt"

func main() {
	var i int
	var p *int

	i = 10
	p = &i

	fmt.Printf("%x, %d\r\n", &i, i)
	fmt.Printf("%x, %x, %d\r\n", &p, p, *p)
}

       在上面的代码中,定义了 整型指针类型 的变量 p,指针变量中存放的是一个内存地址,我们就可以将 i 的地址赋值给 p,又因为 变量 i 是 int 类型,因此需要将 p 定义为 *int 类型。因为 p 是 指向整型的指针,指针中保存的是内存的地址,因此对 p 进行赋值的时候,在 整型 变量前加一个 & 符号,变量 p 中就保存了 i 的地址。上面代码的输出结果如下:

src>go run point.go
c00000a0c0, 10
c000006028, c00000a0c0, 10

       上面的输出,第一行输出的是变量 i 的 地址 和 值,第二行的输出,分别是 p 的地址,p 指向的地址 和 p 指向的地址中的值,从指针变量中取出它指向的变量的值,需要使用 * 运算符。对于一个 普通变量 而言,有它的地址,和它的值。而对于一个 指针变量 而言,有它的地址、它指向的地址(其实就是它的值),还有它指向的地址中的值。它们之间的关系大致如下图所示。

图片

       指针变量在使用之前需要进行初始化,无论是取值、还是赋值,这点和 C 语言一样。不过在 Go 语言中的指针如果没有初始化,直接输出指针变量的值为 0,这点与 C 语言不太相同。但是,在 Go 语言中对未初始化的指针取内容,则和 C 语言中的情况是一样的,即“内存访问违例”。代码如下:

package main

import "fmt"

func main() {
	var ptr *int

	fmt.Printf("%x\r\n", ptr)
	fmt.Printf("%d\r\n", *ptr)
}

      定义了一个 *int 的指针,

全套GO语言自学视频教程(纯资源分享) 全套GO语言自学视频教程(纯资源分享),记得点赞收藏哦! 初级阶段 go语言基础深入浅出 https://pan.baidu.com/s/12JPiSpXDac7dJjLdl_TmrQ 密码:lcrg Go语言Gui游戏开发——黑白棋 https://pan.baidu.com/s/1rsBREBpz_1qQ8NAKiuTUlg 密码:l794 20小时入门学会go语言 https://pan.baidu.com/s/1FomZffxBLD1eMuybGZOvFw 提取码:ovy2 中级阶段 Go语言Web 阅读详情

相关推荐

流量回放工具:goreplay实战,Golang开发快速上手

这个过程中会看到在gor运行目录下生成requests_0.gor,如果1个文件放不下,会继续生成_1、_2等录制文件。gor文件会记录整个录制过程中所有发的http协议请求,分批存到不同的gor文件中,按【ctrl+c】停止录制。这样就能实现在8081生产环境录制的http流量,重新在性能环境8082上回放一遍,默认是每隔5秒发一次请求。–http-allow-url 采用正则表达式,只抓取请求URL中匹配正则表达式的请求。然后根据业务高峰期等待1小时,甚至更长时间,例如12小时,

2401_84264408的博客 634

2022年学go还是java?

Java仍然是主流的企业级应用编程语言,比如像传统的ERP,OA,CRM这些信息化系统还是会用Java作为主要语言,看看阿里,华为,金蝶等大厂的招聘岗位就知道了。而Go语言代表了未来,很多新兴上市公司都在使用Go做主编程语言。Go致力于使事情简单化,它只提供了基本功能,没有多余,在性能这块,当前我们使用 Go 编写的最大微服务的编译时间只需 6 秒。相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势。......

m0_57290404的博客 1336

php开发转go的学习计划及课程资料信息

通过这套教材组合,你可以在保持PHP开发思维的同时,快速建立Go语言的知识体系。遇到具体问题时,优先查阅《Go语言实战》对应章节和Go官方FAQ。

baixiaoshengaaa的博客 1420

Go团队规模化落地的四大工程支柱

Go语言以语法简洁著称,但其工程化落地远不止于安装编译器或运行Hello World。核心在于理解模块化(module)机制与依赖管理原理,通过可复现构建、统一工具链和自动化规范保障协作确定性。技术价值体现在降低CI失败率、压缩新人上手时间、提升二进制可审计性;典型应用场景包括微服务重构、数据管道重写及云原生基础设施建设。实践中,‘go环境配置’与‘go mod download’等高频问题,本质是环境治理与依赖信任链缺失所致——本文聚焦团队级Go工程化的四个关键支柱:环境治理、代码规范、依赖管理与认知对齐

weixin_33709590的博客 416

Agent应用开发由python转go

Agent开发从Python转向Go,核心是应用场景从「快速原型」到「生产级部署」的升级Python赢在「生态丰富、开发高效」,适配早期试错;Go赢在「高并发、低延迟、分布式友好、工程化强」,适配生产环境的大规模、高可靠需求。两者互补,共同支撑Agent应用的落地与迭代。

shao.bing的专栏 944

MinIO 部署指南:半小时搭建 S3 兼容对象存储服务

对象存储是云计算时代的基础设施之一,它以桶和对象的扁平模型替代传统目录树,通过 HTTP 接口读写文件。S3 协议作为对象存储的事实标准,让同一套接口可以跨云厂商和私有化环境复用,这也是 S3 兼容服务广受欢迎的原因。开源方案 MinIO 凭借轻量、兼容性好、部署链路短等特点,常被用于本地联调、私有化文件存储和测试环境。借助 Docker 或 systemd 快速拉起服务,并结合 mc 客户端管理桶和文件,能帮助团队低成本获得一套可靠的对象存储底座。围绕 MinIO 的安装启动、初始配置、生产托管与常见排查

weixin_31292729的博客 135

Unitree Go2 Pro四足机器人开箱与上手全攻略:从拆箱到编程开发

四足机器人作为机器人技术的重要分支,其核心在于通过多关节协同控制实现复杂地形下的稳定运动。其工作原理基于仿生学设计,结合高精度伺服电机、惯性测量单元(IMU)及多种传感器,通过先进的控制算法实现动态平衡与自适应步态。这项技术的价值在于为移动机器人提供了超越轮式结构的越障与地形适应能力,在巡检、救援、教育及娱乐等领域具有广泛应用前景。本文以宇树科技Go2 Pro为例,深入解析其开箱配置、运动控制及传感器校准流程,并探讨如何通过官方SDK与ROS进行二次开发,为机器人开发者与爱好者提供从基础操作到进阶编程的实践

weixin_33904756的博客 445

Golang结合SIP协议打造高效语音通信系统

本文详细介绍了如何利用Golang的高并发特性和SIP协议的标准开放性,构建高效的语音通信系统。通过实战代码演示了从SIP客户端注册、呼叫建立到RTP媒体流处理的完整流程,并分享了性能优化、资源管理及系统监控等产品级开发经验,为开发企业电话、客服系统等应用提供了坚实的技术方案。

weixin_29204749的博客 202

“后端开发并不困难?入门Go语言基础只需3小时!“

在当今的软件开发领域中,前端和后端开发都扮演着重要的角色。对于初学者来说,学习一门新的编程语言可能会感到有些艰难,但实际上,通过合适的学习资源和正确的方法,入门后端开发并不是一件难事。当然,这只是一个开始,后端开发涉及到更多的概念和技术,例如数据库访问、API设计等。在本文中,我们探讨了后端开发的基础知识,并以Go语言为例进行了说明。通过简单的示例代码,你可以了解到Go语言的基本语法和常用功能,从而快速入门后端开发。通过函数,我们可以封装可重用的代码块,并实现特定的功能。在上面的示例中,我们使用。

ZuqCloud的博客 332

golang中make和new的区别

引出问题 先看下面的代码 package main import ( "fmt" ) func main() { var i *int *i=10 fmt.Println(*i) } 上面的代码会报错,因为对于引用类型的变量,我们不光要声明它,还要为它分配内容空间 func main() { var i *int i=new(int) *i=10 fmt.Println(...

yonggeit的博客 6141

go项目完整下载、安装与运行教程-Windows(含视频版本)【图文式小白教程】

go项目完整下载、安装与运行教程-Windows(含视频版本)【图文式小白教程】 文章目录goland软件的下载安装官方下载系统选择优快云下载安装安装软件激活软件第一次打开项目设置环境设置GOROOT设置GOPATH异常情况运行项目完整视频地址 本文章是一个简易版本,视频教程大家可以去下载。(视频中间有很多暂停没体现出来,视频共有三个文件,总时长30分钟左右,但是总的一个操作时间超过了3小时) 视频下载地址: https://download.youkuaiyun.com/download/qq_26525215/1

谙忆-陈浩翔 3641

Go必知必会系列:Go语言基础语法与特性

Go(英文全称:Golang)是一种静态强类型、编译型、并发的编程语言,它的特点是快速编译、执行速度快,读写方便简单。它支持并发、函数式编程、面向对象编程等多种编程范式,也有自己独有的垃圾回收机制,经过“GC复制算法”的优化,可以用于开发可伸缩、高性能的服务端应用。Go已经成为云计算领域的标杆语言,被越来越多的公司和组织采用作为主要开发语言。因此,Go语言在国内也有非常广泛的应用。

AI天才研究院 993

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场”

本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。

weixin_30655569的博客 424

Gazebo仿真UUV水下机器人:从环境搭建到避障算法实战

本文详细介绍了使用Gazebo仿真平台进行UUV水下机器人开发的全流程,涵盖从环境搭建、uuv_simulator配置、传感器集成到核心避障算法实战。通过搭建水下仿真实验室并实现基于激光雷达数据的反应式避障算法,为水下机器人算法验证与开发提供了高效、低成本的解决方案。

weixin_28840591的博客 263

ARM的CI-700和Arteris的NoC对比

设计理念:CI-700注重于为移动和客户端SoC提供定制化的互连解决方案,而Arteris的NoC更侧重于提供灵活、可配置的网络互连技术,适用于多种应用场景。性能与功耗:CI-700通过系统级缓存和网状拓扑结构优化性能和功耗,而Arteris的NoC通过物理感知和多协议支持来提升性能和降低功耗。功能安全:Arteris的NoC提供了功能安全支持,这对于汽车和工业应用尤为重要,而CI-700虽然也关注安全性,但未明确提及功能安全支持。互操作性。

ygyglg的专栏 2622

HP DL380G9 iLO降级Degrated及存储失败storage Failed报错如何解决?

HP DL380G9 iLO降级(Degrated)及存储失败(storage Failed)报错如何处理? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者https://blog.51cto.com/lander 2018/09/7 7:30 问题描述 某沙特公司搭建的虚拟化环境中有一台ESXi主机报Storage Fialed警告但是仍...

weixin_34226182的博客 4848

华大HC32F460RS485通信实验

华大HC32F460RS485通信实验

ZhuoWuKeJi的博客 1798

SpringBoot项目搭建

SpringBoot项目搭建

私信可回答各种问题~ 1022

【软件系统架构】系列五:TCP/IP 协议栈

TCP/IP协议栈是现代网络通信的核心框架,采用分层架构设计,包含应用层、传输层、网络层和网络接口层四层结构。应用层提供HTTP、FTP等用户服务接口;传输层通过TCP/UDP实现端到端通信;网络层负责IP寻址和路由选择;网络接口层处理物理数据传输。数据在传输过程中经历层层封装,从应用层报文最终转换为物理层的比特流。该协议栈通过三次握手建立连接、数据传输、四次挥手断开连接的流程,确保可靠通信。作为互联网的基础,TCP/IP协议栈具有跨平台、标准化和可扩展的特点,广泛应用于各类网络设备和嵌入式系统中。

moton2017的博客 2163

【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法

相比C文本类编程语言,Simulink图形化编程语言的优势是逻辑思路和数据流清晰了很多,劣势是程序执行的时序不明确,而且各个模块的配置使编程的灵活度下降了不少,在使用习惯上面总感觉有各种限制。本文就是拆解Simulink中最基础的几个编程模块,发扬它的优势,避开劣势。

Mr.Cssust的博客 3850

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Redis | Redis 的事务一
下一篇: JWT库生成Token的使用与原理
码农UP2U
博客等级 码龄14年 6276粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农UP2U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值