golang strings包方法

package main import s "strings" //strings取个别名 import "fmt" //我们给 fmt.Println 一个短名字的别名,我们随后将会经常用到。 var p = fmt.Println func main() { //这是一些 strings 中的函数例子。注意他们都是包中的函数,不是字符串对象自身的方法,这意味着我们需要考虑在调用时传递字符作为第一个参数进行传递。 p("Contains: ", s.Contains("test", "es")...阅读全文

2015-04-20 10:42 benlightning
阅读:28730 评论:0

golang中goconfig包使用解析

注意事项 本博客隶属于 goconfig - 课时 1:goconfig 使用解析 请注意配套使用。 本博文为 goconfig - Go 语言 INI 解析器的配套博客,旨在通过文字结合代码示例对该库的使用方法和案例进行讲解,便于各位同学更好地使用和深入了解。 库简介 goconfig 是一个由 Go 语言开发的针对 Windows 下常见的 INI 格式的配置文件解析器。该解析器在涵盖了所有 INI 文件操作的基础上,又针对 Go 语言实际开发过程中遇到的一些需求进行了扩展。相对于其它 IN...阅读全文

阅读:13020 评论:0

golang截取中文字符串

1.问题: 在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现的问题是:由于中文一个字不只是由一个字节组成,所以直接通过切片可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码。 例如: 想要截取前四个字 name := "我是胡八一" fmt.Println("name[:4] = ",name[:4]) 执行后得到的结果会是这样的: name[:4] = 我? 2.解决方法: 先将其转为[]rune,再截取后,转会string nameRune ...阅读全文

阅读:11374 评论:1

golang语言并发与并行——goroutine和channel的详细理解(三)

Go语言并发的设计模式和应用场景 以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.slide 本文的示例代码在: https://github.com/hit9/Go-patterns-with-channel 生成器 在Python中我们可以使用yield关键字来让一个函数成为生成器,在Go中我们可以使用信道来制造生成器(一种lazy load类似的东西)。 当然我们的信道并不是...阅读全文

阅读:4323 评论:1

golang语言并发与并行——goroutine和channel的详细理解(一)

如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人。 Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据。 以下是我入门的学习笔记。 Go语言的goroutines、信道和死锁 goroutine Go语言中有个概念叫做goroutine, 这类似我们熟知的线程,但是更轻。 以下的程序,我们串行地去执行两次loop函数: func loop() { for i := 0; i < 10; i++ { f...阅读全文

2017-03-04 16:24 skh2015java
阅读:35396 评论:12

golang语言并发与并行——goroutine和channel的详细理解(二)

Go语言的并发和并行 不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话: var quit chan int = make(chan int) func loop() { for i := 0; i < 10; i++ { fmt.Printf("%d ", i) } quit <- 0 } func main() { // 开两个goroutine跑函数loop, loop函数负责打印10个数 go loop() go loop() for i := 0;...阅读全文

2017-03-04 16:25 skh2015java
阅读:8116 评论:4

Golang依赖管理工具:glide从入门到精通使用

介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍gilde。 glide是Golang的包管理工具,是为了解决Golang依赖问题的。 为什么需要glide? 原因很简单,Go 语言原生包管理的缺陷。罗列一下golang的 get 子命令管理依赖有很多大缺陷: 能拉取源码的平台很有限,绝大多数依赖的是 github....阅读全文

2017-07-22 13:33:09 梦朝思夕
阅读:18418 评论:11

Golang面试题解析

最近在很多地方看到了golang的面试题,看到了很多人对Golang的面试题心存恐惧,也是为了复习基础,我把解题的过程总结下来。 面试题 1. 写出下面代码输出内容。 package main import ( "fmt" ) func main() { defer_call() } func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func(...阅读全文

2017-09-12 11:49:12 梦朝思夕
阅读:16955 评论:16

图解 Go 并发编程

你很可能从某种途径听说过 Go 语言。它越来越受欢迎,并且有充分的理由可以证明。 Go 快速、简单,有强大的社区支持。学习这门语言最令人兴奋的一点是它的并发模型。 Go 的并发原语使创建多线程并发程序变得简单而有趣。我将通过插图介绍 Go 的并发原语,希望能点透相关概念以方便后续学习。本文是写给 Go 语言编程新手以及准备开始学习 Go 并发原语 (goroutines 和 channels) 的同学。 ## 单线程程序 vs. 多线程程序 你可能已经写过一些单线程程序。一个常用的编...阅读全文

2018-07-29 22:11:48 mbyd916
阅读:22149 评论:16

1 行 Go 代码实现反向代理

暂且放下你的编程语言来瞻仰下我所见过的最棒的标准库。 ![This is all the code you actually require…](https://raw.githubusercontent.com/studygolang/gctt-images/master/reverse-proxy/1_y3GxXdKfZlqa95bl19Rytg.png) 为项目选择编程语言和挑选你最爱的球队不一样。应该从实用主义出发,根据特定的工作选择合适的工具。 在这篇文章中我会告诉你...阅读全文

2018-08-15 20:53:45 snowInPluto
阅读:6796 评论:1

Go 系列教程 —— 35. 读取文件

![reading files](https://raw.githubusercontent.com/studygolang/gctt-images/master/golang-series/golang-read-files.png) 欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 35 篇。 文件读取是所有编程语言中最常见的操作之一。本教程我们会学习如何使用 Go 读取文件。 本教程分为如下小节。 - 将...阅读全文

2018-09-04 23:19:49 heyulong
阅读:34594 评论:13

Go defer实现原理剖析

1. 前言defer语句用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。为了方便描述,我们把创建defer的函数称为主函数,defer语句后面的函数称为延迟函数。延迟函数可能有输入参数,这些参数可能来源于定义defer的函数,延迟函数也可能引用主函数用于返回的变量,也就是说延迟函数可能会影响主函数的一些行为,这些场景下,如果不了解defer的规则很容易出错。其实官方说明的defer的三个原则很清楚,本节试图汇总defer的使用场景并做简单说明。2. ...阅读全文

2018-11-07 16:57:05 萤火的萤
阅读:4225 评论:2

Go 包依赖管理工具 —— govendor

govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具。与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本、以及无相互侵入的开发和管理。 vendor 特性 最开始的时候,Go 并没有提供较为妥当的包管理工具。从 1.5 版本开始提供了 vendor 特性,但需要手动设置环境变量 GO15VENDOREXPERIMENT=1。 在执行 go build 或 go run 命令时,会按照以下顺序去查找包: 当前...阅读全文

2019.03.25 17:52 舆图易稿
阅读:6727 评论:1

Go 系列教程 —— 36. 写入文件

![write files](https://raw.githubusercontent.com/studygolang/gctt-images/master/golang-series/golang-write-files.png) 欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 36 篇。 在这一章我们将学习如何使用 Go 语言将数据写到文件里面。并且还要学习如何同步的写到文件里面。 这章教程包括如下几个部分:...阅读全文

2019-04-02 14:35:33 flyup_chen
阅读:25710 评论:9

append(x,1)与x = append(x,1)的区别

在开发中遇到一个坑,记录下来。 昨天有人问我 ```go x := make([]int,4,4) x = append(x,1) //append(x,1) //两者有什么区别 ``` 我瞬间懵了,这不很明显吗? x = append(x,1)是在x的原先基础上增加了一个元素,所以x中元素为5,而append(x,1)没有赋返回值,所以会报错! 他说,这不是重点,我是问你append(x,1)后x中的元素有几个。 于是,我想了下,同时也请教...阅读全文

2019-05-15 09:45:20 OctopusLian
阅读:3018 评论:0

slice解析

切片切片是一种数据结构,这种数据结构便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。切片的动态增长是通过内置函数 append 来实现的。这个函数可以快速且高效地增长切片。还可以通过对切片再次切片来缩小一个切片的大小。因为切片的底层内存也是在连续块中分配的,所以切片还能获得索引、迭代以及为垃圾回收优化的好处。内部实现切片是一个很小的对象,对底层数组进行了抽象,并提供相关的操作方法。切片有 3 个字段的数据结构,这些数据结构包含 Go 语言需要操作底层数组的元数据....阅读全文

2019-05-16 20:39:38 cdwei
阅读:1369 评论:2

go mod 使用及技巧

[TOC] 首先 本文是建立在 go 1.12 及以上 常用go mod命令 go mod init 初始化当前文件夹, 创建go.mod文件 go mod edit 编辑go.mod文件 go mod graph 打印模块依赖图 go mod tidy 增加缺少的module,删除无用的module go mod vendor 将依赖复制到vendor下 go mod verify 校验依赖 go mod why 解释为什么需要依赖 go mod download 下载依赖的module到本地...阅读全文

2019.09.23 11:43:11 aside section . 等
阅读:6904 评论:0

VS Code中golang环境配置

1.VSCode 建议安装以下插件: 首先你必须安装 Golang 插件,然后再给 Go 安装工具包。 在 VS Code 中,使用快捷键:command+shift+P,然后键入:go:install/update tools,将所有 16 个插件都勾选上,然后点击 OK 即开始安装。 Installing 16 tools at /Users/maiyang/develop/goworkspace//bin gocode gopkgs go-outline go-symbols guru g...阅读全文

2020-03-08 17:32:45 turbock
阅读:873 评论:0