定义:命令源码文件是程序的原型入口,是每个可独立运行的程序必须拥有的,我们可以通过构建和安装生成对应的可执行文件,后者一般与该命令源码文件的直接父目录同名
但是在某些情况下,我们要对一个key指定多个值。 并获取多个值得数组。 这时我们需要定义一个Type Value接口类型
前面文章介绍了 Go 语言原生数据类型。Golang 中具备丰富的数据类型,基本类型有整型、浮点数、布尔型、字符串型等,除此之外,还有切片、结构体、指针、通道、map、数组等其他类型。本文将会介绍 GO 语言中的指针基本概念与相关用法。
在 Golang 程序中有很多种方法来处理命令行参数。简单的情况下可以不使用任何库,直接处理 os.Args;其实 Golang 的标准库提供了 flag 包来处理命令行参数;还有第三方提供的处理命令行参数的库,比如 Pflag 等。本文将介绍 Golang 标准库中 flag 包的用法
说起 golang 的 flag 个包,我们第一反应的是什么呢?至少我曾经第一次看到 flag 包的时候,第一反应是想起写 C 语言的时候咱们用于定义一个表示的,我们一般会命名为 flag 变量
如果想学会一门新语言,不仅要多读文档,还要多看别人写的代码,更要强迫自己用新语言多写代码。我在学习 Golang 之前,读过好几本相关的书籍,不过总感觉没真正学会,于是我决定动手用 Golang 写一个能用的工具试试,因为 Golang 最大的优势就是 goroutine 和 channel,所以我觉得实现一个简版的 ab(Web 压力测试工具)应该是一个不错的选择,用 Golang 磕磕绊绊总算实现了预想的功能,能够计算 Requests per second 和 Time per request 的值,不过总感觉写出来的代码不够漂亮,于是我又找来 hey 的代码前后读了几遍,然后结合自己的理解临摹了一遍,感觉总算是入门了。
golang当中的字符串本质是只读的字符型数组,和C语言当中的char[]类似,但是golang为它封装了一个变量类型,叫做string。
flag作为go的基础模块,属于必知必会的常用模块,flag实现命令行flag解析,比如ls -l中的-l,当然golang内置的flag也可以实现类似docker ps -a中的ps -a这样子命令的效果,今天简短描述下go的flag模块该如何使用
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
使用golang flag包开发命令行程序或者读取命令行参数时,有时候参数为bool值会读取不到后面的参数
描述: 我们可以采用os包中的Open()函数打开一个文件,返回一个*File和一个err。然后对得到的文件实例调用Close()函数就能够关闭文件。
今天是Golang专题的第四篇,这一篇文章将会介绍golang当中的函数、循环以及选择判断的具体用法。
问题引入 毫无疑问,错误处理是程序的重要组成部分,有效且优雅的处理错误是大多数程序员的追求。很多程序员都有C/C++的编程背景,Golang的程序员也不例外,他们处理错误有意无意的带着C/C++的烙印。 我们看看下面的例子,就有一种似曾相识的赶脚,代码如下: func deferDemo() error { err := createResource1() if err != nil { return ERR_CREATE_RESOURCE1_FAILED }
gRPC payload 的默认格式是 Protobuf,但是 gRPC-Go 的实现中也对外暴露了 Codec interface ,它支持任意的 payload 编码。我们可以使用任何一种格式,包括你自己定义的二进制格式、flatbuffers、或者JSON 格式。
EasyDSS视频直播/点播服务平台诞生至今,我们做了不少版本的功能更新和升级。除EasyDSS外,TSINGSEE青犀视频全线视频平台均有演示平台供参考,用户可以进入演示平台阅览界面了解相关功能。
思路源于一次三小时十二题的内部 CTF 竞赛,其中一道简单 MISC 给出明文范围(字母数字)和 MD5 开头,要求穷举出 flag——这当然不难,python 十几行代码搞定,但是运行出结果竟然用了近 20 分钟,感觉十分没有性价比啊!!
Linux 2.6.13 内核中引入了新的文件系统变化通知机制 inotify ,使用该特性提供的用户态调用 api ,可以方便的完成文件变化监听。
go代码: package main import ( "flag" "fmt" "glog-master" "net/http" "code.google.com/p/go.net/websocket" ) // 初始化函数 func init() { fmt.Println("Entry init") // 连接池的 初始化; 数据结构的初始化; PlayerBuShu =
import ( "flag" "image" "image/draw" "image/jpeg" "io/ioutil" "log" "os" "github.com/golang/freetype" "golang.org/x/image/font" ) var ( dpi = flag.Float64("dpi", 72, "screen resolution in Dots Per Inch") fontfile = flag.String("fontfile", "luxisr.ttf", "filename of the ttf font") hinting = flag.String("hinting", "none", "none | full") size = flag.Float64("size", 12, "font size in points") spacing = flag.Float64("spacing", 1.5, "line spacing (e.g. 2 means double spaced)") wonb = flag.Bool("whiteonblack", false, "white text on a black background") ) var text = []string{ "33333333333333333", } func main() { flag.Parse() //读取字体 fontBytes, err := ioutil.ReadFile(*fontfile) if err != nil { log.Println(err) return } //解析字体 f, err := freetype.ParseFont(fontBytes) if err != nil { log.Println(err) return } // 初始化图片背景 fg := image.Black if *wonb { fg = image.White } //初始化一张图片,生成原图 imgB, _ := os.Open("a.jpg") img, _ := jpeg.Decode(imgB) defer imgB.Close() b := img.Bounds() rgba := image.NewNRGBA(b) draw.Draw(rgba, rgba.Bounds(), img, image.ZP, draw.Src) //在图片上面添加文字 c := freetype.NewContext() c.SetDPI(*dpi) //设置字体 c.SetFont(f) //设置大小 c.SetFontSize(*size) //设置边界 c.SetClip(rgba.Bounds()) //设置背景底图 c.SetDst(rgba) //设置背景图 c.SetSrc(fg) //设置提示 switch *hinting { default: c.SetHinting(font.HintingNone) case "full": c.SetHinting(font.HintingFull) } // 画文字 pt := freetype.Pt(10, 10+int(c.PointToFixed(*size)>>6)) for _, s := range text { _, err = c.DrawString(s, pt) if err != nil { log.Println(err) return } pt.Y += c.PointToFixed(*size * *spacing) } imgw, _ := os.Create("out.jpg") jpeg.Encode(imgw, rgba, &jpeg.Options{100}) defer imgw.Close() }
xdm好久不见,记得上次更新还是在上次,感谢伙伴们的关注和催更(笑)。这段时间阿巩回看了往期文章,感觉偏重概念理论而缺乏实践以及真正落实到coding上的东西,于是便有了“读猿码系列”,我会到github上找一些star多的或者有趣的开源项目,先clone到本地跑起来,然后从入口函数开始一点点究其本质,本系列文章会记录下来这个过程,也欢迎各位和我一起实践。对了,不要忘记给原作者个star哦~日拱一卒,我们开始吧!
今天是golang专题的第16篇文章,我们一起来聊聊golang当中的并发相关的一些使用。
此前的文章中,我们看到 golang 如何实现面向对象的封装: 通过 GoLang 实现面向对象思想
cobra https://github.com/spf13/cobra 是 golang 中一个非常好用的 命令 开发库。
RPC(Remote Procedure Call)远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议,简单的理解是一个节点请求另一个节点提供的服务。RPC只是一套协议,基于这套协议规范来实现的框架都可以称为 RPC 框架,比较典型的有 有阿里巴巴的 Dubbo、Google 的 gRPC、Facebook 的 Thrift 和 Twitter 的 Finagle 等。
日常命令行操作,相对应的众多命令行工具是提高生产力的必备工具,我在之前的文章我的生产力工具推荐-终端01篇中有推荐过一些我常用的基于terminal终端的命令行cli工具
Golang中,文件是指计算机中存储数据的实体,文件可以是文本文件、二进制文件、配置文件等。在Go语言中,通过操作文件,我们可以读取文件的内容,写入数据到文件,以及获取文件的属性等。
我们有时候会不得不出现包名需要两个单词来描述的情况。在没有了解到这个规则之前,确实我很多命名的时候还是会选择使用下划线进行分隔来命名包名。 原因有两个,一个是之前 C 的影响,一个是由于全小写难以辨认,故会使用下划线。所以,这个规则以后还是要多注意。
某项目要集成 PDF 文件的 OCR 功能,不过由于此功能技术难度太大,网络上找不到靠谱的开源实现,最终不得不选择 ABBYY FineReader Engine 的付费服务。可惜 ABBYY 只提供了 C++ 和 Java 两种编程语言的 SDK,而我们的项目采用的编程语言是 Golang,此时通常的集成方法是使用 C++ 或 Java 实现一个服务,然后在 Golang 项目里通过 RPC 调用服务,不过如此一来明显增加了系统的复杂度,好在 Golang 支持 CGO,让我们可以很方便的在 Golang 中使用 C 模块,本文总结了我在学习 CGO 过程中的心得体会。
strings 库包含了许多高效的字符串常用操作的函数和方法,巧用这些函数与方法,能极大的提高我们程序的性能。下面介绍一些常用的函数和方法。
时间不知不觉到了 3 月, 我们的 DevOpsCamp 也到了 第4期。在前面的内容中, 我尝试通过将 cobra 拆解成一个个功能, 并进行解释和扩展。希望能带领大家逐步进入 Go 开发的世界。
更多内容请移步我的repo:https://github.com/anakin/golang-leetcode
var xhr = new XMLHttpRequest(); xhr.open('get', 'https://v1.hitokoto.cn/'); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { var data = JSON.parse(xhr.responseText); var hitokoto = document.getElementById('hitokoto'); hitokoto.innerText = data.hitokoto; } } xhr.send();
介绍 这是一个系列 探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架 探索 Golang 云原生游戏服务器开发,根据官方示例实战 Gorilla WebSocket
package main import ( "bufio" "flag" "fmt" "image" "image/color" "image/draw" "image/png" "io/ioutil" "log" "os" "github.com/golang/freetype" "golang.org/x/image/font" ) var ( dpi = flag
Golang 提供了 pprof 包(runtime/pprof)用于输出运行时的 profiling 数据,这些数据可以被 pprof 工具(或者 go tool pprof,其为 pprof 的变种)使用。通常我们这样来使用 pprof 包:
Golang 语言的标准库 os 包提供独立于平台的操作系统相关功能的接口。其设计类似于 Unix,尽管错误处理类似于 Go,调用失败则返回 error 类型的错误,而不是错误编号的值。通常,error 类型的错误中会提供更多信息。
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
更详细的资料请移步文档:https://studygolang.com/pkgdoc
注意: 在使用 int 和 uint 类型时,不能假定它是 32 位或 64 位的整型,而是考虑 int 和 uint可能在不同平台上的差异。
最近在使用nginx+lua+redis做一个系统,来支撑高并发高访问量的应用。开发时突然想到golang是不是也可以达到同样的效果。于是写了个简单的代码对比一下。
2023年诺贝尔物理学奖颁发给皮埃尔·阿戈斯蒂尼、费伦茨·克劳斯和安妮•吕利耶,以表彰他们“为研究物质中的电子动力学而产生阿秒光脉冲的实验方法”。随着奖项颁布,阿秒物理学也同时被老百姓所知。相信在不久的将来,必然会出现类似摄像机的工具用以记录原子内部的运动“影片”。所以人类也正是在理论和实践中不断的进步。回想人类从石器时代到当下发达的科技,都离不开工具的不断演变和创新。再回到我们的话题中,在zabbix的工具箱中也有那么一个工具——zabbix_sender给数以万计的开发者提供能力。而通常情况下我们不需要自己写一个zabbix_sender,因为zabbix官方已经提供了一个这样的工具。那么这个工具是什么作用呢?官方给的介绍如下:
Go is a statically compiled language that gained a lot of popularity lately due to the fact that is simple, performant and fits really well with developing cloud applications. It has a strong, yet poorly documented sub-package level base library that deals with a lot of aspects related to internationalization (i18n) and localization (l10n), such as character encodings, text transformations, and locale-specific text handling. Let's see what we can do to master this library and make our Go applications locale aware.
Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger。但是它也有缺点,比如不支持区分日志级别,不支持日志文件切割等。
全局变量要避免的坑:例如定义了一个全局变量, 然后有使用了 := 给全局变量赋值, 此时会出现问题。 看下面的例子:
Go 中的 for 循环可以使用 continue, break 进行控制,同时也可以标签
领取专属 10元无门槛券
手把手带您无忧上云