Golang随谈——浅瞰底层:Go的并发调度模型

调度器分析 国内喜欢把Go的并发模型称为G-M-P模型,但在网上一查,貌似国外并没有这样的定义,他们喜欢直接称其为Go Scheduler——Go的调度器。不管如何,G-M-P都是Go调度器中的重要概念,它们都定义在sys/runtime/runtime2.go文件中,让我们看看它们都代表什么吧: G for Goroutine,定义于struct g,其存放着Goroutine的状态信息,如保存着Goroutine的执行堆栈信息、Goroutine的等待信息和变量的GC信息等信息。我们每用关键...阅读全文

掘金 2020年02月09日 2hwang

1 Go语言极速简介

Go语言经常被称为“Golang”,据官方的说法是因为最初无法注册到“go.org”这个域名,而只好使用了“golang.org”这个域名的原因。Go语言大约从2007年开始构想,最初是由谷歌公司的几位工程师设计的。Go语言的设计初衷是为了解决当时较流行的C++、Java等开发语言过于复杂而低效的问题。2009年11月10日,Go语言被正式转为开源项目,这一天也被认为是Go语言正式的诞生日。2012年,Go语言发布了第一个正式版本1.0。到2019年2月,Go语言发布到了1.12版。到目前为止,...阅读全文

简书 2020-02-10 11:32:46 陆满庭

2 Go语言安装方法

Go语言本身的安装比较简单,直接到Go语言的官网 golang.org 去下载对应操作系统的安装包安装就可以了。如果无法下载,可以直接网络搜索“Go语言安装包”下载即可。安装后,注意要设置环境变量GOPATH,将其设置为准备安放自己将要编写的Go语言代码所在的目录。注意这些代码以后编译出可执行程序的位置也将在该目录下。假设我们设置GOPATH为C:\goprjs,那么以后代码文件将统一被放在C:\goprjs\src下,而可执行文件一般放在C:\goprjs\bin下。另外,Go语言开发可以使用...阅读全文

简书 2020-02-10 11:32:46 陆满庭

- 安装Go语言中涉及golang.org/x下的包时无法安装时的解决方法

如果安装Go语言第三方包过程中,发现由于依赖golang.org/x下面的子包(例如golang.org/x/text就是一个子包,我们将其称为“golang.org/x”下的text子包),那么可以按下面的方法来处理:* 首先确保安装了git命令;* 在Windows的CMD中(Mac/Linux的终端窗口)将工作目录切换到src目录下的golang.org子目录下的x子目录(如果没有该目录则需要用mkdir命令逐级创建,或在Windows资源管理器中创建该目录也可以);切换到该目录后可以通过...阅读全文

简书 2020-02-10 11:32:45 陆满庭

关于网上各种GO语言GC文章的一些困惑和个人理解

目前网上有很多不错的介绍GO语言三色标记GC的文章和源码分析,这里推荐一篇个人感觉写的比较不错的从源码层面解析GO GC的博客Golang 垃圾回收剖析。看这些文章的过程中也产生了一些困惑,这里分享一下个人的思考,如果有不准确的地方欢迎大家批评指正。 困惑1:什么是root对象? 介绍go gc的文章都会提到,在三色标记的过程中,从root对象开始遍历找出所有的活跃对象,但我收集到的资料里没有提到什么是root。那什么是root对象呢? 全局变量:可执行文件的.data和.bss域记录了全局变量...阅读全文

Excelize 发布 2.1.0 版本, Go 语言 Excel 文档基础库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档类库,基于 ECMA-376 Office Open XML 标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的 XLSX 文档。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)、透视表和切片器等复杂样式的文档,还支持向 Excel 文档中插入图片与图表,并且在保存后不会丢失文档原有样式,可以应用于各类报表系统中。入选 2018 开源中国码云 Gitee 最有...阅读全文

Segmentfault 2020-02-15 09:32:34 续日

Golang之import和package

package 1、package是golang最基本的分发单位和工程管理中依赖关系的体现2、每个golang源代码文件开头都拥有一个package声明,表示该golang代码所属的package。3、要生成golang可执行程序,必须建立一个名为main的package,并且在该package中必须包含一个名为main()的函数。4、在golang工程中,同一个路径下只能存在一个package,一个package可以拆成多个源文件组成。5、import关键字导入的是package路径,而在源文...阅读全文

简书 2020-02-10 05:32:39 你仲夏未归

leetcode_141

Golang: 思路:这道题是我在刷题的早期遇见的题,当时的思路是用map记录跑过的点,如果有环,那么指针终归会经过map里的点。但是,这个思路不是最好的思路,很明显,快慢指针才是解决这个问题的王道。什么是快慢指针,就是双指针,一个指针每次走两步,另一个每次走一步,那么如果有环,快指针势必会追上慢指针。 小记:最近因为有其他事情,所以会耽误自己刷题,希望自己还是能尽量抽出闲暇时间来写写leetcode和算法。 代码如下: func hasCycle(head *ListNode) bool { ...阅读全文

简书 2020-02-10 05:32:38 淳属虚构

Go语言浅尝之方法

Hello,各位小伙伴大家好,我是小栈君,因为疫情的缘故,所以今年过了一个非同寻常的年,在这里小栈君也是衷心的希望大家清洗手,多通风,出门记得戴口罩,人多别去凑热闹。 安全卫生从你我做起,最重要的是即使呆在家里办公也别忘了学习哦~ file 今天我们继续go语言系列分享之方法,对于方法的介绍,相信做过编程的小伙伴或多或少都有了解。 概念 在golang中的方法是作用在特定类型的变量上,因此自定义类型都是可以有方法的,不仅仅只有一个struct 结构体。 方法和函数的区别 但是这里方法和我们之前介...阅读全文

简书 2020-02-09 21:32:41 IT干货栈

Go 每日一库之 logrus

简介 前一篇文章介绍了 Go 标准库中的日志库 log。最后我们也提到,log库只提供了三组接口,功能过于简单了。 今天,我们来介绍一个日志库中的“明星库”——logrus。本文编写之时(2020.02.07),logrus 在 GitHub 上 star 数已达到 13.8k。 logrus完全兼容标准的log库,还支持文本、JSON 两种日志输出格式。很多知名的开源项目都使用了这个库,如大名鼎鼎的 docker。 快速使用 第三方库需要先安装: $ go get github.com/sir...阅读全文

掘金 2020年02月08日 darjun

中文转换成html中的utf-8

在HTML中,中文的“好好学习”可以表示为 “好好学习”在项目中,需要对接短信告警,短信告警返回数据要求是utf8的后来继续沟通,才发现要的是html-utf8的;没有找到合适的golang工具包,涉及语言转码的包主要有mahonia,支持各种格式的数据转换,gbk,utf8,gb2312net/html,支持网页转码,改的是转换网页中的<,>,&,',',.根据网上经验,提供三个版本的转换:Javascript function ConvUtf8(obj) { returnobj.replac...阅读全文

简书 2020-02-09 15:32:41 一把人才

golang通过反射克隆数据

啥也不说,直接上代码 package utils import ( "encoding/json" "reflect" ) //浅克隆,可以克隆任意数据类型,对指针类型子元素无法克隆 //获取类型:如果类型是指针类型,需要使用Elem()获取对象实际类型 //获取实际值:如果值是指针类型,需要使用Elem()获取实际数据 //说白了,Elem()就是获取反射数据的实际类型和实际值 func Clone(src interface{}) interface{} { typ := reflect.T...阅读全文

简书 2020-02-09 15:32:41 悟道人

iris-开始

iris是golang的web框架,官方地址:https://github.com/kataras/iris/,支持mvc。下面开始iris的hello world。 基于go mod初始化项目 mkdir iris-example cd iris-example go mod init iris-example 入口程序main.go package main import ( "time" "github.com/kataras/iris/v12" ) func main() { app :...阅读全文

简书 2020-02-09 05:32:39 EasyNetCN

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境[golang快速入门[2.1]-go语言开发环境配置-windows]()[golang快速入门[2.2]-go语言开发环境配置-macOS]()[golang快速入门[2.3]-go语言开发环境配置-linux]()本文将介绍如何书写、编译、并运行第一个go语言程序同时详细介绍其内部机制书写第一个go语言程序首先我们可以在任意位置新建一个文件,命名...阅读全文

51CTO博客 2020-02-08 19:23:42 jonson_jackson

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境[golang快速入门[2.1]-go语言开发环境配置-windows]()[golang快速入门[2.2]-go语言开发环境配置-macOS]()[golang快速入门[2.3]-go语言开发环境配置-linux]()本文将介绍如何书写、编译、并运行第一个go语言程序同时详细介绍其内部机制书写第一个go语言程序首先我们可以在任意位置新建一个文件,命名...阅读全文

51CTO博客 2020-02-08 19:23:33 jonson_jackson

19.Go语言基础之并发

1.1并发与并行 并发:同一时间段执行多个任务(使用微信和多个朋友聊天) 并行:同一时刻执行多个任务(windows中360在杀毒,同时你也在写代码) Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。 goroutine是由Go语言的运行时(runtime)调度完成,而线程是由操作系统调度完成。 Go语言还提供channel在多个goroutine间进行通信。goroutine和channel是G...阅读全文

51CTO博客 2020-02-08 16:11:47 DevOperater

Golang&Goland配置

Golang配置 环境配置 设置环境变量 GOPROXY ,以使用 go get 的: export GOPROXY=https://goproxy.io Goland配置 gofmt与goimports(GoLand 2019.1.3) File Watchers插件下载 Tools -> File Watchers中,添加如下设置: image.png Go Modules 配置(GoLand 2019.1.3) Preferences -> Go -> Go Modules (vgo),勾...阅读全文

简书 2020-02-08 21:32:45 蚂蚁窝大梦想

go-pprof笔记

开篇 编写好了golang服务之后,接着要开始关注服务的CPU,内存使用情况。golang提供了性能剖析工具,记录一些自己搜集到的信息,写下一些实践的情况。在golang中内置了pprof工具,专门来做golang语言的优化。 PProf 关注的模块 CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据 Memory Profile(Heap Profile):报告程序的内存使用情况 Block Profiling:报告 goroutin...阅读全文

简书 2020-02-08 21:32:44 阿彪2020

session 和 cookie 到底是什么

cookie 大家应该都熟悉,比如说登录某些网站一段时间后,就要求你重新登录;再比如有的同学很喜欢玩爬虫技术,有时候网站就是可以拦截住你的爬虫,这些都和 cookie 有关。如果你明白了服务器后端对于 cookie 和 session 的处理逻辑,就可以解释这些现象,甚至钻一些空子无限白嫖,待我慢慢道来。 一、session 和 cookie 简介 cookie 的出现是因为 HTTP 是无状态的一种协议,换句话说,服务器记不住你,可能你每刷新一次网页,就要重新输入一次账号密码进行登录。这显然是...阅读全文

简书 2020-02-08 21:32:42 labuladong