本系列文章到现在已经将Go非常基础的部分介绍完成了,后面就开始设计非常具有Go特色的内容了,因为之后会出现一系列的名词和概念,为了方便本篇先把这些基础概念和我的理解阐述一下。 首先Go是一门编译型语言,编译时产生一份本地可执行代码,但是这些代码其实是执行在go 的runtime上的。 内存管理 Go 语言同Java类似帮助我们去管理内存,而不是C那样程序员自行管理。内存管理主要包含 内存分配、垃圾回收 两大部分: 内存分配器主要负责栈内存的分配及小对象的分配(小于32k的对象)。 goroutine goroutine 是go中设计最巧妙的地方所在,goroutine 是一种go 协程,相对于线程来说实现在用户空间下。 go 中的栈空间是分块式的,这个后续会详细介绍。 channel 管道是Go语言在语言级别上提供的goroutine间的通讯方式,我们可以使用channel在多个goroutine之间传递消息。
很多人对于Go的error比较吐槽,说代码中总是会有大量的如下代码: if err ! 关于源码中的error 先看一下go源码中go/src/builtin/builtin.go对于error的定义: // The error built-in interface type is the 注意:关于Go中函数支持多参数返回,如果函数有error的通常把返回值的最后一个参数作为error 如果一个函数返回(value, error)这个时候必须先判定error Go中的panic 意味着程序挂了不能继续运行了 对于刚学习go的时候经常用如下代码开启一个goroutine执行任务: go func() { ... } 这种情况也叫野生goroutine,并且这个时候recover是不能解决的。 /Users/zhaofan/app/go/src/runtime/proc.go:204 runtime.goexit /Users/zhaofan/app/go/src
个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。
回顾一下上一篇博客,主要是和大家分享了GO语言的基础语法,其中包含变量定义,基本类型,条件语句,循环语句。那本篇呢就开始和大家同步一下GO语言基础的进阶。 除此以外,其实GO语言相对于其他语言来说有一个比较骚的操作,就是他可以存在多个返回值。例如下面咱们写一个除法的例子,就是大家小学就学过的除不尽的时候存在余数的情况。下面我们来看一个函数。 其实GO语言也有指针,相对而言比较简单,因为GO语言的指针不能运算。 指针说白了就是一个指针指向了一个值的内存地址。 GO语言中的去地址符为&,放到变量以前的话就会返回相应的变量内存地址。 那么我们的GO是值传递还是引用传递,其实GO语言只有值传递。 大家可能有点懵了,其实很多时候,大家不用太过纠结,因为在实际的用法中我们往往通过函数return的值就能解决相关问题。 写在最后 上面呢,其实老猫和大家分享了GO语言的函数定义,以及一个比较重要的指针的概念,在后面的学习中,我们来更加深入地去体会。在实践中去慢慢加深印象。
上一篇文章讲述了几种基础的排序算法,可以回顾一下:Go 语言算法之美—基础排序,这几种算法平均情况下的时间复杂度都是 O(n2),在大规模数据下是非常低效的,所以它们的应用并不多。 n*log n) Space Complexity O(log n) Stability No 文中的全部代码可在我的 Github 上查看:https://github.com/roseduan/Go-Algorithm
语言没有类似Java或Python那种try...catch...机制处理异常,Go的哲学是与众不同的,Go的设计者认为主流的异常处理机制是一种被过度滥用的技巧,而且存在很大的潜在危害,Go的异常处理( 而Go者使用一种称为"恐慌的"机制,在有必要时,直接让系统宕机,让问题发生时立刻暴露出来,不必累积。很难说哪种设计更好,但Go语言确实简化了代码。 但这并不是Go语言所推崇的用法。 Go中,defer除了关闭句柄,还可用于释放并发锁。 Hello,go!
包含指标、链路、日志的一站式应用性能监控服务,开源协议平滑接入,有效加速故障排查,定位架构瓶颈
扫码关注腾讯云开发者
领取腾讯云代金券