go

Go/CGo - how do you use a C array passed as a pointer

眉间皱痕 提交于 2020-12-05 07:05:25
问题 I'm posting this as a question/answer, as it took me a while to work out, and I wouldn't mind some feedback on my solution. In Go/CGo, how do you work with a C array passed as a pointer? For example, with this C struct: struct _GNetSnmpVarBind { guint32 *oid; /* name of the variable */ gsize oid_len; /* length of the name */ ... and other fields }; I want to convert oid field to a Go string, how would I work with the guint32* pointer? 回答1: You could convert the C array into a Go slice using a

7种DevOps工程师必备技能

耗尽温柔 提交于 2020-12-05 00:45:42
应用DevOps的目的是改变和改善开发与IT运营之间的关系,倡导两个部门之间更好的沟通与协作。虽然这看起来有些简单,然后,DevOps工程师还需要做更多的工作,才能成功部署代码,并将Dev和Ops两个部分成功地绑定在一起。 从应付DevOps压力的角度出发,DevOps工程师除了需要日常技能的基础,每个工程师都必须具备多种技能。DevOps工程师除了要对脚本和编码有着强烈的热情之外,还必须具有开放的思想和协作精神,才能成功地执行该过程。 “DevOps教练”参考一些文献,已经为你设计了一个清单,列出了下面的7种必备技能,公司的DevOps工程师的招聘需求里,应该明确提出下列所有品质。 1. 灵活性 编码是一个持续的过程,不断变化,总是需要更新。要成为一个成功而有效的DevOps工程师,理想的候选人必须有能力不断地开发新的系统,并将其集成到主干代码中。DevOps工程师必须具有灵活的工作技能并适应不断变化的代码。 无论是集成、测试、发布还是部署,工程师都必须能够轻松地从一个软件构建领域迁移到另一个领域。例如,持续集成需要具备快速有效地管理变更的技术技能,并且能够在团队中协作,以保证每个人都朝着共同的目标努力。 2. 安全技能 与许多其他所熟练的领域一样,安全始终是最重要的,尤其是在编码方面。黑客进入系统的一个简单方法是利用漏洞,破坏现有的系统并获取数据。

go 读取BMP文件头二进制读取

廉价感情. 提交于 2020-12-04 20:50:59
BMP文件头定义: WORD 两个字节 16bit DWORD 四个字节 32bit package main import ( "encoding/binary" "fmt" "os" ) func main() { file, err := os.Open("tim.bmp") if err != nil { fmt.Println(err) return } defer file.Close() //type拆成两个byte来读 var headA, headB byte //Read第二个参数字节序一般windows/linux大部分都是LittleEndian,苹果系统用BigEndian binary.Read(file, binary.LittleEndian, &headA) binary.Read(file, binary.LittleEndian, &headB) //文件大小 var size uint32 binary.Read(file, binary.LittleEndian, &size) //预留字节 var reservedA, reservedB uint16 binary.Read(file, binary.LittleEndian, &reservedA) binary.Read(file, binary.LittleEndian,

通过存储过程(SP)实现SQL Server链接服务器(LinkServer)的添加

你离开我真会死。 提交于 2020-12-04 15:15:12
1. 背景 当系统的微服务化做的不是很高的时候,部分功能要通过DB LinkServer 来实现跨 Server 查询,当然,有时候BI抽数据、DBA数据库维护可能也会创建LinkServer。 特别是当 DB迁移的时候,我们需要检查、创建 DB LinkServer。 2.脚本实现 下面是我们创建的一个存储过程,通过这个存储过程来实现简单、快速的添加链接服务器。 USE [ DBA_Manager ] GO /* ***** Object: StoredProcedure [dbo].[USP_Create_DBLink] Script Date: 2019/7/5 13:52:50 ***** */ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Carson> -- Create date: <Create Date,2018-06-18,> -- Description: <Description,实现创建DB LinkServer的脚本化,> -- ============================================= CREATE PROCEDURE [ dbo ]

要么忙于生存,要么忙于去死

耗尽温柔 提交于 2020-12-04 13:46:57
🌊 重温《肖申克的救赎》| 第132篇 Many people live a tangled life, for they want to gain others' recognition, but unable to polish themselves peacefully. 很多人之所有活得纠结,是因为既想得到别人的认可,却又无法静下心来提升自己。 写作真的是一件相当不易的事情。 我这么感慨当然并非抱怨,而是陈述一种事实。 拿我自己来说吧。 我的女儿两岁不到俩月,正是活泼可爱的年纪。 只要她醒来在我身边的时候,我的时间就是她的时间,她可以随时占用,于是我要写作的话,唯有避开她。 解决的办法只有一个,就是早起——闹钟定的是5点,但至于能不能按点起来,完全靠的是我自己的主观意愿。 如果昨天工作很累,下班后又要陪女儿玩,哄她睡觉,那么5点起来就变成了奢侈。 如果老婆再加上一句话——“睡吧,睡眠时间不够的话,人是很容易出问题的”,那么我就更容易放纵自己。 这两个如果一旦执行,那么5点的闹钟对于我来说,不过是形式而已。 黑灯瞎火的,看也不用看,随手摸到手机,一个熟练的操作就能把闹钟杀死。 于是怀着“那就再睡一会儿”的自我安慰再次入眠。 但毕竟心怀愧疚,因为只有这么点时间可以用来写书稿,再放任自我的浪费掉的话,“拖延症”的病可就又要发作了。 脑袋里这个警钟一直这么敲着,再次入眠

图解 Go 并发

丶灬走出姿态 提交于 2020-12-04 09:28:12
你很可能从某种途径听说过 Go 语言。它越来越受欢迎,并且有充分的理由可以证明。 Go 快速、简单,有强大的社区支持。学习这门语言最令人兴奋的一点是它的并发模型。 Go 的并发原语使创建多线程并发程序变得简单而有趣。我将通过插图介绍 Go 的并发原语,希望能点透相关概念以方便后续学习。本文是写给 Go 语言编程新手以及准备开始学习 Go 并发原语 (goroutines 和 channels) 的同学。 单线程程序 vs. 多线程程序 你可能已经写过一些单线程程序。一个常用的编程模式是组合多个函数来执行一个特定任务,并且只有前一个函数准备好数据,后面的才会被调用。 首先我们将用上述模式编写第一个例子的代码,一个描述挖矿的程序。它包含三个函数,分别负责执行寻矿、挖矿和练矿任务。在本例中,我们用一组字符串表示 rock (矿山) 和 ore (矿石),每个函数都以它们作为输入,并返回一组 “处理过的” 字符串。对于一个单线程的应用而言,该程序可能会按如下方式来设计: 它有三个主要的函数: finder 、 miner 和 smelter 。该版本的程序的所有函数都在单一线程中运行,一个接着一个执行,并且这个线程 (名为 Gary 的 gopher) 需要处理全部工作。 func main() { theMine : = [5]string{ " rock " , " ore " , "

Bash script can't execute Go command

女生的网名这么多〃 提交于 2020-12-04 07:16:00
问题 I'm trying to write a bash script to automatically run a go get/install in different directories. The relevant part is here: ( cd ../web ; go get ) ( cd ../web ; go install ) ( cd ../services ; go get ) ( cd ../services ; go install ) When I execute the script, I get this though: cd ../web go get ./staging.sh: line 43: go: command not found cd ../web go install ./staging.sh: line 44: go: command not found cd ../services go get ./staging.sh: line 45: go: command not found cd ../services go

Bash script can't execute Go command

可紊 提交于 2020-12-04 07:15:41
问题 I'm trying to write a bash script to automatically run a go get/install in different directories. The relevant part is here: ( cd ../web ; go get ) ( cd ../web ; go install ) ( cd ../services ; go get ) ( cd ../services ; go install ) When I execute the script, I get this though: cd ../web go get ./staging.sh: line 43: go: command not found cd ../web go install ./staging.sh: line 44: go: command not found cd ../services go get ./staging.sh: line 45: go: command not found cd ../services go

Swoole 协程与 Go 协程的区别

对着背影说爱祢 提交于 2020-12-04 04:54:31
Swoole 协程与 Go 协程的区别 进程、线程、协程的概念 进程是什么? 进程就是应用程序的启动实例。 例如:打开一个软件,就是开启了一个进程。 进程拥有代码和打开的文件资源,数据资源,独立的内存空间。 线程是什么? 线程属于进程,是程序的执行者。 一个进程至少包含一个主线程,也可以有更多的子线程。 线程有两种调度策略,一是:分时调度,二是:抢占式调度。 协程是什么? 协程是轻量级线程, 协程的创建、切换、挂起、销毁全部为内存操作,消耗是非常低的。 协程是属于线程,协程是在线程里执行的。 协程的调度是用户手动切换的,所以又叫用户空间线程。 协程的调度策略是:协作式调度。 Swoole 协程 Swoole 的协程客户端必须在协程的上下文环境中使用。 // 第一种情况:Request 回调本身是协程环境 $server->on('Request', function($request, $response) { // 创建 Mysql 协程客户端 $mysql = new Swoole\Coroutine\MySQL(); $mysql->connect([]); $mysql->query(); }); // 第二种情况:WorkerStart 回调不是协程环境 $server->on('WorkerStart', function() { // 需要先声明一个协程环境