【2-5 Golang】Go并发编程—管道chan

  Go语言实现了两种多线程同步方案,一种是传统多线程语言类似,基于共享内存方案;另一种称之为基于协程-管道的CSP(communicating sequential processes)并发编程模型,这也是Go语言推荐的方式。本篇文章主要讲解管道在并发编程中的典型应用,以及管道的底层实现原理。 ## 典型应用场景   顾名思义,管道可以从一端写入数据,一端读取数据,用户程序可以很方便的通过管道实现协程间通信,如下列方式: ``` pack...阅读全文

Go语言中文网 2022-09-28 09:53:17 tomato01

手写编程语言-递归函数是如何实现的?

![](https://tva1.sinaimg.cn/large/e6c9d24ely1h6k7cg9ushj20ic05kdge.jpg) # 前言 本篇文章主要是记录一下在 [GScript](https://github.com/crossoverJie/gscript) 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有必要记录一下。 在开始之前还是简单介绍下本次更新的 `GScript` v0.0.9 所包含的内容: ...阅读全文

Go语言中文网 2022-09-28 08:55:20 crossoverJie

【2-4 Golang】Go并发编程—网络IO

  我们都知道用户程序读写socket的时候,可能阻塞当前协程,那么是不是说明Go语言采用阻塞方式调用socket相关系统调用呢?你有没有想过,Go语言又是如何实现高性能网络IO呢?有没有使用传说中的IO多路复用,如epoll呢? ## 探索Go语言网络IO   HTTP服务肯定涉及到socket的读写吧,而且Go语言启动一个HTTP服务还是非常简单的,几行代码就可以搞定,前面也不需要反向代理服务如Nginx,我们写一个简单的HTTP服务来测试...阅读全文

Go语言中文网 2022-09-27 10:16:38 tomato01

优维低代码:Route Alias 路由别名和Segues 页面切换

​​优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。连载第二十二期《高级指引:Route Alias 路由别名和Segues 页面切换》▽Route Alias 路由别名在路由定义中,可以通过 alias 字段声明该路由的别名,该别名可以承担路由 ID 的作用。可以通过它来简化路由跳转的编排。# 示例可以在构件事件中跳转:bricks: ...阅读全文

Go语言中文网 2022-09-26 17:19:52 EASYOPS_youwei

【2-3 Golang】Go并发编程—调度器schedule

  我们一直提到,每一个线程都有一个线程栈,也称为系统栈;协程g0就运行在这个栈上,而且协程g0执行的就是调度逻辑schedule。Go语言调度器是如何管理以及调度这些成千上万个协程呢?和操作系统一样,维护着可运行队列和阻塞队列吗,有没有所谓的按照时间片或者是优先级或者是抢占式调度呢? ## 调度器schedule   我们已经知道每一个P都有一个协程队列runq,该队列存储的都是处于可运行状态的协程,调度器一般情况下只需要从当前p.runq获...阅读全文

Go语言中文网 2022-09-26 09:54:04 tomato01

UGeek大咖说 | 直播预告:顺丰高难度可观测性压测实践与应用

​本月「UGeek大咖说-大厂可观测」又双叒……来和大家见面了!本期大咖说特邀到顺丰科技应用架构高级工程师——李卓做客直播间,用实际案例带我们一起剖析大型复杂系统下可观测性在全链路压测中的落地实践。往期大咖说我们对可观测性做了很多诠释和分享,深挖了可观测性的背景、应用及前景发展。像日志、trace、metrics、apm、事件等我们已经听了很多,每个大厂都有自己的独到见解和落地思路。这一期「顺丰」专场,将结合实际场景,分享可观测性在压测领域的落地经验。压测,是保障系统稳定性的重要方法,而链路追踪...阅读全文

Go语言中文网 2022-09-23 17:11:52 EASYOPS_youwei

【2-2 Golang】Go并发编程—协程管理

  上一篇文章我们介绍了GMP并发模型的基本概念,知道了M是线程,P是逻辑处理器,G是协程。也了解到每一个M线程都有一个调度协程g0,调度主逻辑由函数schedule实现;协程都有自己的协程栈,协程的切换其实就是协程栈的切换,其实就是若干寄存器的保存与恢复。本篇文章重点介绍协程的管理,包括协程创建,协程切换;但是,涉及到寄存器的更改,只能深入到汇编去理解,可能会比较枯燥难以理解,可以根据自己兴趣学习研究。 ## 基础补充-栈桢结构   我们一直...阅读全文

Go语言中文网 2022-09-23 09:45:08 tomato01

【2-1 Golang】Go并发编程—GMP调度模型概述

  Go语言天然具备并发特性,基于go关键字就能很方便的创建协程去执行一些并发任务,而且基于协程-管道的CSP并发编程模型,相比于传统的多线程同步方案,可以说简单太多了。从本篇文章开始,将为大家介绍Go语言的核心:并发编程;不仅包括协程/管道/锁等的基本使用,还会深入到协程实现原理,GMP协程调度模型等。 ## 并发编程入门   设想下我们有这么一个服务/接口:需要从其他三个服务获取数据,处理后返回给客户端,并且这三个服务不互相依赖。这时候一般...阅读全文

Go语言中文网 2022-09-22 09:42:02 tomato01

【1-7 Golang】Go语言快速入门—泛型

  Golang在1.18版本支持了泛型,写过java/c++等语言的可能对泛型有一定的了解。那么泛型到底是什么呢?他有什么作用呢? ## 为什么需要泛型   为什么需要泛型呢?Golang是强类型语言,任何变量或者函数参数,都需要定义明确的参数类型。假设我们需要实现这么一个函数,输入两个参数,函数返回其相加的值,输入参数可以是两个整型int,浮点数float,还有可能是字符串等等,这时候通常怎么办?定义多个函数实现吗?如下面程序所示: ``...阅读全文

Go语言中文网 2022-09-21 10:17:41 tomato01

PHP+Go 开发仿简书,实战高并发高可用微服务架构

download:百度网盘php+Go 开发仿简书,实战高并发高可用微服务架构PHP程序员唯有掌握更高级的技能和架构设计思维,才能发展的更好。让自己成为不可替代的人员,需要全面提升掌控大中型项目能力、架构设计思维能力、独立完成复杂项目能力。本课程通过复杂大型项目实战,系统讲解各技术实现的底层原理和算法,带你掌握性能调优以及高可用、高并发微服务架构,并上手Go语言框架,进一步提升自己的技术储备,为你求职和涨薪增加筹码!适合人群从事PHP研发一段时间,不满足只进行CRUD的开发人员想进阶到高级开发的...阅读全文

Go语言中文网 2022-09-21 00:49:41 bjyqiun

【1-6 Golang】Go语言快速入门—反射

  反射使得Go语言具备一些动态特性,比如不知道参数类型怎么办?当然你可以定义多个函数,分别传递不同参数;你也可以定义一个函数就行,参数类型为interface{},函数内通过反射操作变量。一些rpc框架,通常使用反射注册服务方法,以及通过反射调用服务方法。 ## 反射初体验   如何使用反射呢?我们以字符串转化函数为例,strconv包定义了很多函数,可以将bool值,int值,float值等转化为字符串;但是,假如变量类型不知道呢?能否封装...阅读全文

Go语言中文网 2022-09-20 14:12:19 tomato01

适用于企业的 DevOps,你做对了吗?

​​作者/ Heena Soni来源/翻译外网产品或应用程序的开发是一个漫长的过程,涉及多个步骤,需要在多个阶段进行彻底检查。企业需要一个可以帮助他们管理此开发过程并使其更快、更高效的系统。DevOps 是在大型组织中实施的过程,可帮助他们实现更高的生产力、运营效率、优化结果等。它是一组工具、方法和实践,允许结合开发和运营能力以实现快速产品发展。01为什么 DevOps 被认为对企业很重要?标准的 DevOps 解决方案帮助组织专注于创建自动化持续集成和持续部署 (CI/CD) 管道。它分析了所...阅读全文

Go语言中文网 2022-09-19 17:03:54 EASYOPS_youwei

【1-5 Golang】Go语言快速入门—结构体与接口

  Go语言支持面向对象编程,但是又和传统的面向对象语言如C++,Java等略有不同:Go语言没有类class的概念,只有结构体strcut,其可以拥有属性,可以拥有方法,我们可以通过结构体实现面向对象编程。Go语言也有接口interface的概念,其定义一组方法集合,结构体只要实现接口的所有方法,就认为其实现了该接口,结构体类型变量就能赋值给接口类型变量,这相当于面向对象中的多态。另外,Go语言也可以有继承的概念,不过是通过结构体的"组合"实现的。 ## 结构体 ...阅读全文

Go语言中文网 2022-09-19 10:35:30 tomato01

低代码实战 | 1分钟,从0到1创建一个简单的微应用

​首先,我们来聊聊什么是低代码?⤵低代码(Low-Code)从字面意思,低就是少,在一般标准或平均程度之下,那低代码自然就是少代码,也就是说不需要付出太多的代码成本。如果想要从0实现一个可以在Web中访问的网页,那最好要掌握的技术必然是html、Css、JavaScript,大部分情况下仅仅有了以上三种技术的加持是不够,为了让所生产出来的Web页面有着高维护和高灵活性,一般要根据网页中的功能进行模块划分,以及确定页面的整个层次、结构等,其次再去考虑UI等设计类问题。通过上述描述可以发现,实现一个...阅读全文

Go语言中文网 2022-09-16 17:28:18 EASYOPS_youwei

【1-4 Golang】Go语言快速入门—哈希表MAP

  map又称为hash表、字典,存储键值对,其增删改查时间复杂度可以达到O(1)。map和切片是Go语言开发最常用的数据类型。 ## 基本操作   map存储键值对,支持key-value键值对的插入,查找/修改/删除key对应的value,并且这些操作都可以在O(1)时间复杂度完成。 ``` package main import "fmt" func main() { //map声明初始化 score := mak...阅读全文

Go语言中文网 2022-09-16 09:57:32 tomato01

深度解析云原生应用安全的方法

​​作者/ Nuwan Dias来源/翻译外网保护云原生应用程序需要正确理解微服务向各种消费者公开的接口(边界)。需要在每个边界上应用适当的工具和机制,以实现适当的安全级别。正确保护运行应用程序的基础架构也非常重要。这包括保护容器映像、安全运行容器运行时以及正确配置和使用容器编排系统 (Kubernetes)。01微服务安全格局在前微服务时代,大多数应用程序都遵循 MVC 架构。今天,我们将这些称为单体应用程序。与此类应用程序相比,云原生应用程序是高度分布式的,如图 1 所示。​图 1:单体应用...阅读全文

Go语言中文网 2022-09-15 17:31:21 EASYOPS_youwei

[开源十年]Go项目实战之实现图片上传和URL生成

最近没在社区更新文章,重新出来冒个泡。 项目地址:https://github.com/kaiyuan10nian/kaiyuan10nian ------------- #### 实现图片上传和URL生成 这个功能其实不是很难,对于新手来说比较困难的是对服务器各个路径的掌握。下面先介绍实现图片上传的逻辑,该功能一共分6步来实现: ###### 第一步 获取上传的文件 我们不可能让所有人都可以随意上传东西到我们服务器的,所以在开这个接口的时候肯定是要带token去...阅读全文

Go语言中文网 2022-09-15 16:45:51 kaiyuan10nian

【1-3 Golang】Go语言快速入门—字符串

  Go语言字符串的用法还是比较简单的,常用也就是字符串相加,字符串与byte切片、rune切片互相转换,字符串输出等等操作。那有什么可学的呢?其实还是有一些细节需要关注,比如字符串"只读"特性,字符串编码等等。 ## 基本操作   字符串只读?是的,就是你想的那样,只读就是不能修改的意思。那下面程序怎么解释呢? ``` package main import "fmt" func main() { str := "he...阅读全文

Go语言中文网 2022-09-15 09:48:29 tomato01

优维低代码:Pipes 管道

​​优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。连载第二十期《高级指引:Pipes 管道》▽在 placeholders 占位符 "@{ ... }" (参数注入中为 "${ ... }")中可以配置管道列表,管道提供了连续处理数据的能力,相当于由框架统一提供的全局数据加工函数。对于不具备通用性,而是针对特定的业务的加工函数,应使用 Cus...阅读全文

Go语言中文网 2022-09-14 17:23:47 EASYOPS_youwei