![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Golang
StellarCode
这个作者很懒,什么都没留下…
展开
-
一步步提升Go语言生成随机字符串的效率
假如我们要生成一个固定长度的随机字符串,包含大小写字母,没有数字,没有特殊字符串,那么我们怎么做呢?需要怎样优化,才会更简单,更高效?在最终的方案之前,我们看看最常见的写法是怎样的,然后是如何一步步演进到最终的高效率方案的。好吧,先看下最原始的方案。常见做法(Runes)func init() { rand.Seed(time.Now().UnixNano())}va...转载 2019-12-25 21:44:55 · 499 阅读 · 4 评论 -
为什么Go是一种设计糟糕的编程语言
好吧,我承认这个标题有点放肆。我多告诉你一点:我爱肆意妄言的标题,它能够吸引注意力。不管怎样,在这篇博文中我会试图证明 Go 是一个设计得很糟糕的语言(剧透:事实上它是)。我已经摆弄 Go 有几个月了,而且,我想我在六月某个时候运行了第一个 helloworld 程序。虽然我的数学不太好,但在那之后已经有四个月了,并且我的 Github 上已经有了几个 package。不必多说,我仍完全没有...转载 2019-01-11 07:54:17 · 900 阅读 · 0 评论 -
xorm 使用
库安装go get github.com/go-xorm/xorm go get github.com/go-xorm/cmd/xormcmd安装报错:这两个依赖的源代码在github上都有,通过git clone把源代码拉取拉下,然后把源代码的目录改成与import path相同就可以正常使用了。https://github.com/GoogleClou...http...原创 2019-01-11 10:07:00 · 481 阅读 · 0 评论 -
Go语言内幕(1):主要概念与项目结构
这个系列博客主要为那些对 Go 基本知识已经有一定了解,又希望对其内部细节进行更深一步地探索的人准备的。今天这一篇主要分析 Go 源代码的基本结构以及 Go 编译器的某些内部细节。读完这篇博客后,你会得到下面三个问题的答案:1. Go 源代码结构是什么样子的?2. Go 编译器是如何工作的?3. Go 语言中的结点树的基本结构是什么样的?让我们开始吧每当开始学习一门新编程语言...转载 2019-05-15 10:07:18 · 127 阅读 · 0 评论 -
Go Modules
版本控制和语义化版本包的版本控制总是一个包管理器绕不开的古老话题,自然对于我们的go modules也是这样。我们将学习一种新的版本指定方式,然后深入地探讨一下golang官方推荐的semver即语义化版本。控制包版本在讨论go get进行包管理时我们曾经讨论过如何对包版本进行控制(文章在此),支持的格式如下:vX.Y.Z-pre.0.yyyymmddhhmmss-abcde...转载 2019-02-10 12:46:39 · 2189 阅读 · 0 评论 -
go module 安装不了golang.org时的处理方式记录
go: golang.org/x/sys@v0.0.0-20180905080454-ebe1bf3edb33: unrecognized import path "golang.orgnrecognized import path "golang.org/x/sys" (https fetch: G1: dial tcp 216.239.37.1:443: conneet https:/...转载 2019-04-19 06:23:01 · 1940 阅读 · 0 评论 -
win10下go mod配置
这是因为获取golang.org/x/...时需要翻墙,而我这里没有翻墙,不过没关系,设置下代理即可:// bash mac export GOPROXY=https://goproxy.io// powershell windows $env:GOPROXY = "https://goproxy.io"然后再当前目录下用powershell执行命令:go mod d...原创 2019-05-14 17:21:40 · 9120 阅读 · 0 评论 -
golang 后台进程的启动和停止
不想再像java或者其他语言那样为了操作后台程序写各种脚本的话,这篇文章值得你一看启动命令和上一篇文章一样,我们先来个非后台运行的启动命令 func init() { startCmd := &cobra.Command{ Use: "start", Short: "Start Gonne", Run: func(...转载 2019-05-15 09:40:58 · 6012 阅读 · 0 评论 -
Golang并发:并发协程的优雅退出
goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、数据结果不正确等问题。这篇文章介绍,如何合理的退出goroutine,减少软件bug。goroutine在退出方面,不像线程和进程,不能通过某种手段强制关闭它们,只能等待goroutine主动退出。但也无需为退出、关闭gor...转载 2019-05-15 16:26:06 · 1572 阅读 · 0 评论 -
golang 后台进程的启动和停止
启动命令我们先来个非后台运行的启动命令func init() { startCmd := &cobra.Command{ Use: "start", Short: "Start Gonne", Run: func(cmd *cobra.Command, args []string) { start...转载 2019-05-24 15:38:37 · 8554 阅读 · 0 评论 -
golang 几种字符串的连接方式
最近在做性能优化,有个函数里面的耗时特别长,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其实有很多种实现。实现方法1. 直接使用运算符func BenchmarkAddStringWithOperator(b *testing.B) { hello := "hello" world := "world" for i := 0; i...转载 2019-07-19 16:22:25 · 195 阅读 · 0 评论 -
golang几种post请求方式
get请求get请求可以直接http.Get方法,非常简单。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 funchttpGet() { resp, err := http.Get("http://www.01ha...转载 2019-07-19 16:32:57 · 3051 阅读 · 1 评论 -
go语言与MySQL数据库(连接池)
导入包:import "database/sql"import _ "github.com/go-sql-driver/mysql"使用sql.Open函数创建一个连接池对象,不是单个连接。在open的时候并没有去连接数据库,只有在执行query、exce方法的时候才会去实际连接数据库。在一个应用中同样的库连接只需要保存一个sql.Open之后的db对象就可以了,不需要多次ope...转载 2018-12-17 22:04:43 · 977 阅读 · 0 评论 -
Go 系列教程-11 文件
文件读取是所有编程语言中最常见的操作之一。本教程我们会学习如何使用 Go 读取文件。本教程分为如下小节。将整个文件读取到内存 使用绝对文件路径 使用命令行标记来传递文件路径 将文件绑定在二进制文件中 分块读取文件 逐行读取文件将整个文件读取到内存将整个文件读取到内存是最基本的文件操作之一。这需要使用 ioutil 包中的 ReadFile 函数。让我们在 ...转载 2018-12-15 15:11:38 · 347 阅读 · 0 评论 -
探索 Go 中的错误处理模式
当你学习一种新的编程语言时,可能会存在一个挫败期,就是当你无法使用更熟悉的语言来表达想法的时候。你很自然的想知道为什么语言要设计成这样,很容易误认为(当表达想法遇到困难时)这是语言设计者的失误。这种推理可能会导致你以一种非惯用的方法使用一种语言。一个挑战我自己观念的内容是如何在 Go 中处理错误。概括如下:Go 中的错误是一个实现了 error 接口(实现了 Error() 函数)的任意类...转载 2018-12-12 21:55:23 · 263 阅读 · 0 评论 -
Go 系列教程-1 基础知识
变量是什么变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值。在 Go 中,有多种语法用于声明变量。声明单个变量var name type 是声明单个变量的语法。package mainimport "fmt"func main() { var age int // 变量声明 fmt.Println("my a...转载 2018-12-13 00:08:12 · 220 阅读 · 0 评论 -
Go 系列教程-2 基础知识
Go 系列教程 —— 6. 函数(Function)函数是什么?函数是一块执行特定任务的代码。一个函数是在输入源基础上,通过执行一系列的算法,生成预期的输出。函数的声明在 Go 语言中,函数声明通用语法如下:func functionname(parametername type) returntype { // 函数体(具体实现的功能)}函数的声明以关键...转载 2018-12-13 19:54:19 · 301 阅读 · 0 评论 -
Go 系列教程-3 基础知识-语法
Go 系列教程 —— 8. if-else 语句if 是条件语句。if 语句的语法是if condition { }如果condition为真,则执行{和}之间的代码。不同于其他语言,例如 C 语言,Go 语言里的{ }是必要的,即使在{ }之间只有一条语句。if 语句还有可选的else if和else部分。if condition {...转载 2018-12-13 19:57:15 · 337 阅读 · 0 评论 -
Go 系列教程-4 基础知识-数据类型
Go 系列教程 —— 11. 数组和切片数组数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 类型数组,可以包含任意类型)数组的声明一个数组的表示形式为[n]T。n表示数组中元素的数量,T代表每个元素的类型。元素的数量n也是该类型...转载 2018-12-13 20:00:57 · 400 阅读 · 0 评论 -
Go 系列教程-5 基础知识
Go 系列教程 —— 15. 指针什么是指针?指针是一种存储变量内存地址(Memory Address)的变量。如上图所示,变量 b 的值为 156,而 b 的内存地址为 0x1040a124。变量 a 存储了 b 的地址。我们就称 a 指向了 b。指针的声明指针变量的类型为 *T,该指针指向一个 T 类型的变量。接下来我们写点代码。package maini...转载 2018-12-13 20:09:33 · 408 阅读 · 0 评论 -
Go 系列教程-6 多线程 并发
Go 系列教程 —— 20. 并发入门Go 是并发式语言,而不是并行式语言。在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别。并发是什么?并发是指立即处理多个任务的能力。一个例子就能很好地说明这一点。我们可以想象一个人正在跑步。假如在他晨跑时,鞋带突然松了。于是他停下来,系一下鞋带,接下来继续跑。这个例子就是典型的并发。这个人能够一下搞定跑步和系鞋带两件事...转载 2018-12-14 15:21:09 · 1293 阅读 · 0 评论 -
Go 系列教程-7 面向对象
Go 系列教程 —— 26. 结构体取代类 Go 支持面向对象吗?Go 并不是完全面向对象的编程语言。Go 官网的 FAQ 回答了 Go 是否是面向对象语言,摘录如下。可以说是,也可以说不是。虽然 Go 有类型和方法,支持面向对象的编程风格,但却没有类型的层次结构。Go 中的“接口”概念提供了一种不同的方法,我们认为它易于使用,也更为普遍。Go 也可以将结构体嵌套使用,这与子类化...转载 2018-12-14 15:25:45 · 304 阅读 · 0 评论 -
Go 系列教程-8 错误处理
Go 系列教程 —— 30. 错误处理 什么是错误?错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。就像其他的内建类型(如 int、float64 等),错误值可以存储在变量里、作为函数的返回值等等。示例现在我们开始编写一个...转载 2018-12-15 15:05:49 · 485 阅读 · 0 评论 -
Go 系列教程-9 头等函数
什么是头等函数?支持头等函数(First Class Function)的编程语言,可以把函数赋值给变量,也可以把函数作为其它函数的参数或者返回值。Go 语言支持头等函数的机制。本教程我们会讨论头等函数的语法和用例。匿名函数我们来编写一个简单的示例,把函数赋值给一个变量。package mainimport ( "fmt")func main...转载 2018-12-15 15:09:21 · 243 阅读 · 0 评论 -
Go 系列教程-10 反射
反射是 Go 语言的高级主题之一。我会尽可能让它变得简单易懂。本教程分为如下小节。什么是反射? 为何需要检查变量,确定变量的类型? reflect 包 reflect.Type 和 reflect.Value reflect.Kind NumField() 和 Field() 方法 Int() 和 String() 方法 完整的程序 我们应该使用反射吗...转载 2018-12-15 15:10:29 · 233 阅读 · 0 评论 -
在 Go 语言中使用 Log 包
Linux 在许多方面相对于 Windows 来说都是独特的,在 Linux 中编写程序也不例外。标准输出,标准 err 和 null devices 的使用不仅是一个好主意,也是一个原则。如果您的程序将记录日志信息,则最好遵循目标约定。这样,您的程序将兼容所有 Mac/Linux 工具和托管环境。Go 在标准库中有一个 log 包和 logger 类型。使用 log 包将为您提供成为优秀公民...转载 2018-12-12 21:49:18 · 739 阅读 · 0 评论