GO的第三天,包和作用域

今天的内容看起来简单,其实深入了解的话还是蛮难的!不过,我们也是GO的初学者的一个身份,我们先从简单的理解开始吧。 包 什么是包?Go语言中的包和其他语言的库或模块的概念类似,目的都是为了支持模块化、封装、单独编译和代码重用。 import "fmt" 上面的代码中,fmt 就是一个包,是通过关键词import导入的。那么,我们怎么制作自己的包呢?一个包的源代码保存在 一个或多个 以.go为文件后缀名的源文件中,通常一个包所在 目录路径 的后缀是包的导入路径。每个源文件都是以包的 声明语句 开始...阅读全文

Segmentfault 2020-03-14 16:32:33 Mr_J

【译】Golang x-files 里的rsync介绍(并发问题的解决方案)

本文是基于原文并结合作者自己的一些观点混合而成,如有问题欢迎交流。 go语言里使用go关键字就可以轻松搞定并发的问题,它讲究的是“不要通过共享内存来通信,而应该通过通信来共享内存”的原则,在Go里channel是个线程安全的多线程通讯介质。Go本身的这些原语基本上可以解决常见的各种需求了。 但是有些时候在某些情况下,面对并发问题或在错误处理上需要引入更多的协调手段,比如,goroutines会去访问一个非线程安全的资源(如map,slice等)。Go的标准库给我们提供了WaitGroup, O...阅读全文

www.bangbangde.com 2018-08-17 17:23 刘付强

go/golang 新版 Protobuf API尝鲜

# 简介 Protobuf从v2用到了v3,从C++用到了Golang,个人特别喜欢。3月2日,Go官宣,有了新版的API。[中文介绍](https://mp.weixin.qq.com/s/7w6BM23CXrXGx4HD8ZnzMg) 说实话,没有太看明白。的确有点尴尬,从14年用到了20年,不过想那么多干嘛。用就完了。 **因为V2 API所涉及的新功能,目前我均未使用到,本文并未介绍** ## 开始尝试 ### 先来个小demo **相关proto文件就不展示了** ...阅读全文

Go语言中文网 2020-03-08 22:17:08 l7l1l0l

Go Web 编程--如何确保Cookie数据的安全传输

什么是Cookie Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。 Cookie主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置、主题等) 浏览器行为跟踪(如...阅读全文

掘金 2020年03月08日 kevinyan

Proxyer 私有内网映射工具

私有内网映射工具 项目地址 github 项目地址 gitee 试用地址 http://test.proxyer.cn:6789/访问密码:12345678 现在市面上的内网映射工具,大部分都是收费的,收费的同时一般也只能够提供有限的网络带宽。造成这个问题最主要的原因是流量本来就非常贵,无论是谁提供内网映射服务都绕不过这个问题,而免费的内网映射工具,更无法保证提供优质的服务了。 当下互联网大部分的应用已经高度依赖可靠的网络带宽,网络带宽小,会极大的影响很多应用的体验,例如远程桌面、文件传输、视频...阅读全文

Segmentfault 2020-03-12 21:32:33 khvysofq

[典藏版]Golang调度器GMP原理与调度全分析

该文章主要详细具体的介绍Goroutine调度器过程及原理,可以对Go调度器的详细调度过程有一个清晰的理解,花 费4天时间作了30+张图(推荐收藏),包括如下几个章节。 第一章 Golang调度器的由来 第二章 Goroutine调度器的GMP模型及设计思想 第三章 Goroutine调度场景过程全图文解析 一、Golang“调度器”的由来? (1) 单进程时代不需要调度器 我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每个程序就是一个进程,知道一个程序运...阅读全文

Segmentfault 2020-03-13 20:32:36 aceld

golang文件操作-读操作的常见方式汇总

1、ioutil读取整个文件(io/ioutil) ioutil的方式能够读取整个文件,只需传入文件名,操作简单。该操作方式需要把文件读入内容,效率高,同样占用内存也高 func ReadFile(filename string) ([]byte, error)ReadFile 从filename指定的文件中读取数据并返回文件的内容。成功的调用返回的err为nil而非EOF。因为本函数定义为读取整个文件,它不会将读取返回的EOF视为应报告的错误。 // ioutil.ReadFile读取整个文件...阅读全文

Segmentfault 2020-03-12 22:32:35 司国瑞

leetcode_10

Golang: 思路:回到动态规划,使用二维数组,dp[i][j]表示前i、j位能否匹配 代码如下: func isMatch(s string, p string) bool { dp:=make([][]bool,len(p)+1) for k,_:=range dp{ dp[k]=make([]bool,len(s)+1) } dp[0][0]=true for i:=1;i<=len(p);i++{ if p[i-1]!='*' { dp[i][0]=false }else{ dp[i]...阅读全文

简书 2020-03-08 17:32:46 淳属虚构

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

leetcode_32

Golang: 思路:动态规划,这题用二维数组也可以解,但不能通过所有测试用例,所以要用一维的 代码如下: func longestValidParentheses(s string) int { res:=0 arr:=make([]int,len(s)) for i:=0;i<len(s);i++{ if s[i]==')'{ if i-1>=0 { if s[i-1]=='(' { if i-2>=0 { arr[i]=arr[i-2]+2 }else{ arr[i]=2 } }else{...阅读全文

简书 2020-03-08 17:32:44 淳属虚构

leetcode_1331

Golang: 思路:这题需要对数组进行排序,然后将数组内的元素的实际排位存进map里,然后对数组进行依次赋值 代码如下: func arrayRankTransform(arr []int) []int { if len(arr)==0{ return []int{} } if len(arr)==1 { return []int{1} } arr2:=make([]int,len(arr)) copy(arr2,arr) sort.Ints(arr2) mp:=make(map[int]in...阅读全文

简书 2020-03-08 17:32:43 淳属虚构

golang 源码剖析(7): 延迟defer

简介 延迟调用(defer)的优势是: 即使函数执行出错,依然能保证回收资源等操作得以执行 可以在变量的定义处加入defer,代码结构上避免忘记做某些数据的回收 劣势: 性能上会会比直接调用慢一些 如果在defer中释放,相对来说只会在函数执行结束的时候才会调用,变量生命周期会变长. 定义 编写以下程序, dump出汇编. defer主要调用了一下两个函数func deferprocStack(d *_defer)和func deferreturn(arg0 uintptr) package m...阅读全文

简书 2020-03-08 17:32:42 darcyaf

Go防缓存击穿——singleflight

我们在开发时,有时会碰到一个接口的访问量突然上升,导致服务响应延迟或者宕机的情况。这时,除了利用缓存之外,也可以用到singlefilght来解决,下面是一个简单的示例 package main import ( "fmt" "sync" "sync/atomic" "time" "golang.org/x/sync/singleflight" ) func main() { g := singleflight.Group{} wg := sync.WaitGroup{} for i := 0;...阅读全文

Segmentfault 2020-03-12 22:32:34 iuoui

Go Web 编程--如何确保Cookie数据的安全传输

什么是Cookie Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。 Cookie主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置、主题等) 浏览器行为跟踪(如...阅读全文

Segmentfault 2020-03-12 08:32:34 Kevin

一行Golang代码引发的血案——全网最详细分析2020年3月Let’s Encrypt证书吊销事故

Let’s Encrypt作为一家免费提供SSL证书的组织,旨在推进互联网向更安全的HTTPS迁移,受到了大量小型网站的支持和认可。然而很多站长在3月3日收到了来自Let’s Encrypt名为ACTION REQUIRED: Renew these Let's Encrypt certificates by March 4的邮件,警告站长尽快更新证书。那么为什么需要更新证书?不更新证书有什么危害?如何更新证书?本文将为读者分析本次Let’s Encrypt证书漏洞事故的真相。 目录0x01 事...阅读全文

untitled.pw 2020-03-07 00:00 untitled.pw

Go 语言内存分配器的实现原理

本文节选自 Go 语言设计与实现的 7.1 节。阅读全书:https://draveness.me/golang/ 程序中的数据和变量都会被分配到程序所在的虚拟内存中,内存空间包含两个重要区域 — 栈区(Stack)和堆区(Heap)。函数调用的参数、返回值以及局部变量大都会被分配到栈上,这部分内存会由编译器进行管理;不同编程语言使用不同的方法管理堆区的内存,C++ 等编程语言会由工程师主动申请和释放内存,Go 以及 Java 等编程语言会由工程师和编译器共同管理,堆中的对象由内存分配器分配并由...阅读全文

Segmentfault 2020-03-11 18:32:35 draveness

Go 通道

无缓冲区通道 通过make(chan xxx)创建,没有设置缓冲区大小,这种类型的通道会在两种情况下导致阻塞: 通道中无数据,但执行通道读操作。 执行通道写操作,但是无协程从通道中读取数据。 // 情况1 func ReadNoDataFromNoBufCh() { noBufCh := make(chan int) <-noBufCh println("read from no buffer channel success") } // 情况2 func WriteNoBufCh() { ch...阅读全文

Segmentfault 2020-03-10 23:32:33 xiongkun01

Golang 包和依赖管理

前言:这篇简单整理了一下golang的包管理相关内容。 一、package package是基本复用模块单元。 注:以首字母大小写来区分是否可被包外代码访问。 大写代表,可以被包外引入。 小写代表,不可被包外引入。 package名可以与目录名不一致。(但建议一致) 同一目录下的Go文件,必须属于同一个package。 PS:在终端下,输入go env,可获得go的环境信息。 操作步骤: 第一步:我们要配置GoPath。将我们的工程路径写入GoPath内。 打开终端并输入: vim ~/.bas...阅读全文

掘金 2020年03月08日 奇舞647