刷新
Go语言入门14(channel通道01)

博主头像 channel(一) ​ channel用于goroutines之间的通信,让它们之间可以进行数据交换。像管道一样,一个goroutine_A向channel_A中放数据,另一个goroutine_B从channel_A取数据 channel 基本语法 // 因为channel是指针类型的数据类型, ...

给自己的项目发布一个文档吧

博主头像 给自己的项目发布一个文档 Github Page配置 在上一篇,我们搭建了一个脚手架,方便我们更快的开始一个项目。这篇我们将使用github page给这个项目发布一个文档 我们可以在 github 仓库的 Setting-Pages界面进行文档的设置,例如我这个仓库,把文档源设置成了当前仓库mas ...

golang推荐的命名规范

博主头像 # 二 golang推荐的命名规范 很少见人总结一些命名规范,也可能是笔者孤陋寡闻, 作为一个两年的golang 开发者, 我根据很多知名的项目,如 moby, kubernetess 等总结了一些常见的命名规范。 命名规范可以使得代码更容易与阅读, 更少的出现错误。 **文件命名规范** 由于文件 ...

golang基础知识

博主头像 # 一 golang基础知识 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种计算机编程语言语言。 **设计初衷** Go语言是谷歌推出的一种的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌 ...

golang中一种不常见的switch语句写法

博主头像 最近翻开源代码的时候看到了一种很有意思的switch用法,分享一下。 注意这里讨论的不是typed switch,也就是case语句后面是类型的那种。 直接看代码: func (s *systemd) Status() (Status, error) { exitCode, out, err := ...

浅谈如何使用 github.com/kardianos/service

博主头像 在实际开发过程中,有时候会遇到如何编写Go开机自启服务的需求,在linux中我们可以使用systemd来进行托管,windows下可以通过注册表来实现,mac下可以通过launchd来实现,上面的方式对于开发者来说,并不是什么困难的事情,但是对于使用者而言,是并不希望通过这么复杂的方式来达到开机自启 ...

为什么 Go for-range 的 value 值地址每次都一样?

博主头像 原文链接: 为什么 Go for-range 的 value 值地址每次都一样? 循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 for-range 循环迭代数组、切片、字符串、map 和 channel 这些数据类型。 但是在使用 ...

Go语言入门13(runtime包)

博主头像 Runtime包 GOMAXPROCS() ​ 用来设置可以并行计算的CPU核数最大值,并返回之前的值,具体使用方法上一篇有些,这里不再赘述 Gosched() ​ 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行 Goexi ...

Golang GMP原理(1)

博主头像 Golang GMP原理(1) 概念梳理 线程 线程一般指内核级线程,核心如下: 操作系统的最小调度单元 创建 销毁 调度由内核完成,cpu要完成内核态与用户态的转换 可充分利用多核,实现并行 协程 协程线程对应 协程,又称为用户级线程,核心点如下: 与线程存在映射关系,为M:1 创建、销毁、调度在 ...

go slice使用

博主头像 1. 简介 在go中,slice是一种动态数组类型,其底层实现中使用了数组。slice有以下特点: *slice本身并不是数组,它只是一个引用类型,包含了一个指向底层数组的指针,以及长度和容量。 *slice的长度可以动态扩展或缩减,通过append和copy操作可以增加或删除slice中的元素。 ...

浅谈errgroup的使用以及源码分析

博主头像 > 本文讲解的是`golang.org/x/sync`这个包中的`errgroup` ### 1、errgroup 的基础介绍 学习过 Go 的朋友都知道 Go 实现并发编程是比较容易的事情,只需要使用`go`关键字就可以开启一个 goroutine。那对于并发场景中,如何实现`goroutine` ...

go中 for循环的坑

博主头像 go中 for循环的坑 在使用for循环修改结构体切片中的值时,发现并没有修改成功。 type Dog struct { name string } func (d *Dog) setNewName(name string) { d.name = name } func main() { d := ...

Go语言入门12(协程 goroutine)

博主头像 协程 进程和线程 进程 ​ 当运行一个应用程序的时候,操作系统会为这个应用程序启动一个进程。可以将这个进程看作一个包含了应用程序在运行中需要用到和维护的各种资源的容器。这些资源包括但不限于内存地址空间、文件和设备的句柄以及线程 线程 ​ 一个线程是一个执行空间,这个空间会被操作系统调度来运行函数中所 ...

Go中的有限状态机FSM的详细介绍

博主头像 1、FSM简介 1.1 有限状态机的定义 有限状态机(Finite State Machine,FSM)是一种数学模型,用于描述系统在不同状态下的行为和转移条件。 状态机有三个组成部分:状态(State)、事件(Event)、动作(Action),事件(转移条件)触发状态的转移和动作的执行。动作的执 ...

Go语言入门11(泛型)

博主头像 泛型 问题解决 一个计算sum的函数 func sum(slice []int) int { var res int for _, value := range slice { res += value } return res } ​ 如果需要提供对int,float64,string三种数据类型 ...

夜莺初探三·Categraf采集器

夜莺初探三·Categraf采集器 前言 github仓库文档中对Categraf有很详细的介绍,简单重复一下就是:支持多种数据格式的remote_write;All-in-one的设计理念,指标采集只需要一个agent完成,也计划支持日志和调用链路的数据采集;Go编写,依赖少,容易分发和安装;内置 ...

Go语言上手(三) | 青训营笔记

博主头像 高质量编程简介及编码规范 高质量: 各种边界条件考虑完备 异常情况处理,稳定性 易读易维护 编程原则 简单性 可读性 生产力 编码规范 公共符号始终要注释 例外:实现接口的方法不需要注释 格式化 使用gofmt(官方工具)自动格式化 注释 代码作用(适合公共符号) 代码如何实现 (适合注释实现过程) ...

Go语言入门10(异常处理)

博主头像 异常处理 panic 异常处理 ​ 如果出现了panic异常,那么会停止当前函数的运行,然后会找recover()方法,如果没有的话,就会报错退出程序,如果有就会执行recover的方法体中的方法 ​ 我们可以使用defer延迟处理函数来捕获panic异常,用recover()来从错误场景中恢复,必 ...

<1···192021>