Go语言中文网 为您找到相关结果 192

什么是运行时(runtime)

runtime 运行时 什么是 runtime 在计算机领域中,经常会接触到 runtime 这个概念,那么 runtime 究竟是什么东西? runtime 描述了程序运行时候执行的软件/指令, 在每种语言有着不同的实现。可大可小,在 C 中,runtime 是库代码, 等同于 C runtime library,一系列 C 程序运行所需的函数,在 Java 中,runtime 还提供了 Java 程序运行所需的虚拟机等。 总而言之,runtime 是一个通用抽象的术语,指的是计算机程序运行的时候所需要的一切代码库,框架,平台等。 Go中的 runtime 在 Go 中, 有一个 runtime 库,其实现了垃圾回收,并发控制, 栈管理以及其他一些 Go 语言的关键特性。 runtime ...阅读全文

博文 2020-05-22 14:32:43 陆铭恒

windows下vscode在安装go工具包,绝对有用,点一下,看一年

首先在vscode中安装go插件然后再运行go文件的时候vscode会提示安装gopkgs,然后选择全部安装.有六个包会安装失败:golang.org/x/tools/cmd/gurugolang.org/x/tools/cmd/gorenamegithub.com/acroca/go-symbolsgithub.com/ramya-rao-a/go-outlinegithub.com/sqs/goreturnsgithub.com/golang/lint/golint原因是在src下的golang.org/x/tools文件夹下没有对应的文件例如:golang.org/x/tools/cmd/guru 对应 golang.org/x/tools/cmd/gurugolang.org/x/t...阅读全文

博文 2018-05-14 14:51:17 she-lovely

golang var _ 在编译期间执行

## 证明如下 ``` package main import "fmt" func main() { } // make sure that all the initialization happens before the init() functions // are called, cf https://golang.org/ref/spec#Package_initialization var _ = initDebug() //这是在编译期间就执行 func initDebug() bool { fmt.Println("in the initDebug happens before the init()") return true...阅读全文

mysql的Ping()函数

我遇到一个很奇怪的问题,不知道大家是否遇到过: ```go MySQL_db, err = sql.Open("mysql", "root:123456@tcp(10.52.1.1:8088)/smanager?charset=utf8") MySQL_db.SetConnMaxLifetime(8*60*time.Second) MySQL_db.SetMaxIdleConns(5) MySQL_db.SetMaxOpenConns(10) ``` 开始时候这个连接是正常。让代码运行一段时间后我关闭数据库。 但是执行的 ``` MySQL_db.Ping() ``` 一直得到的是nil。 那我们怎么进行数据库连接存活的检查呢...阅读全文

谷歌发布 Go 1.1 正式版本

谷歌Go语言开发团队今天发布了1.1正式版本。 Go是谷歌于2007年9月启动设计的编程语言,最初定位于web服务、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以帮助开发者创建并行任务。Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。 与1.0版本相比,该版本的主要改进如下: 1. 性能改进 与1.0版本相比,该版本对编译器和链接器、垃圾回收、goroutine(Go语言的并发机制)调度、map实现、部分标准库进行了优化,基于该版本构建的Go代码运行速度将会明显提升。 2. 语言本身的变化 语言本身有一些细微的变化,其中两个需要注意的变化是:放宽了return语句的限制(可以简化现有代码中多余的return语句,使程序更加简洁)、引入了方法...阅读全文

go项目运行main方法 undefined: methodname

用的goland做go开发的ide刚学go,网上下了demo打算本地跑下依赖安装好后运行,main方法,结果如下,居然说找不到别的文件中的方法然后网上搜了下,有说得建个路径放这些文件把方法名大写,改了一个太麻烦了就没有试还有说go run *.go 编译运行所有的方法的,但是运行后出现这个错误,说文件名匹配不上,擦其实这个用go build后的exe是可以运行的,然后觉得是项目在ide中的运行问题,找到这个run kind 运行方式改成packagepackage path 写上你项目的位置就ok...阅读全文

博文 2019-04-28 10:31:04 keepd

golang -- rpc

内置的gob rpcserver package main import ( "errors" "fmt" "net" "net/rpc" "os" ) type Args struct { A, B int } type Quotient struct { Quo, Rem int } type Arith int func (t *Arith) Multiply(args *Args, reply *int) error { *reply = args.A * args.B return nil } func (t *Arith) Divide(args *Args, quo *Quotient) error { if args.B == 0 { return errors.New("d...阅读全文

博文 2014-10-04 19:26:55 flyking

并发协程goroutine

1. 操作系统与运行库 “运行库”这个词其实不止包括用于和编译后的目标执行程序进行链接的库文件,也包括了脚本语言或字节码解释型语言的运行环境,譬如Python,C#的CLR,Java的JRE。 对系统调用的封装只是运行库的很小一部分功能,运行库通常还提供了诸如字符串处理、数学计算、常用数据结构容器等等不需要操作系统支持的功能,同时,运行库也会对操作系统支持的功能提供更易用更高级的封装,譬如带缓存和格式的IO、线程池。 1. 支持新的语义或语法,从而便于我们描述和解决问题。譬如Java的泛型、Annotation、lambda表达式。 2. 提供了新的工具或类库,减少了我们开发的代码量。譬如Python 2.7的argparse 3. 对系统调用有了更良好更全面的封装,使我们可以做到以前在这个...阅读全文

博文 2015-06-18 17:00:25 kjfcpua

Go 应用程序构建浅析

要理解并灵活运用一个语言,我觉得有必要了解其构建应用程序的内部机制。经过这段时间对GO的接触,个人对GO构建程序的方式挺满意:简单、直接、灵活。下面就对GO语言构建应用程序的方法进行一个浅显的分析。 构建一个GO项目,我们只需设置好工程工作目录,并在该目录下新建名为src的文件夹,然后将你的源文件放到src下就行了。为便于理解,这里给出一个简单项目的例子进行具体说明。 环境变量:GOPATH =path/to/GoPro:$GOPATH GoPro/ bin/ hello pkg/ linux_amd64/ example/ mymath.a src/ example/ mymath/ sqrt.go //package mymath hello/ test.go //package mai...阅读全文

博文 2014-11-15 18:00:08 u013148156

libtask channel机理及调度理解

学习golang的时候libtask库的代码是一定要看的,需要深入理解chan和携程的运行机制,下面就结合libtask的源码说明下运行原理,如果理解的有偏差欢迎指正 下面是libtask中Channel的结构 1 struct Alt 2 { 3 Channel *c; 4 void *v; 5 unsigned int op; 6 Task *task; 7 Alt *xalt; 8 }; 9 10 struct Altarray 11 { 12 Alt **a; 13 unsigned int n; 14 unsigned int m; 15 }; 16 17 struct Channel 18 { 19 unsigned int bufsize; 20 unsigned int el...阅读全文

博文 2016-03-10 09:00:01 davygeek

《Go语言编程》calc.go的错误

最近看由人民邮电出版社许式伟 吕桂华等编著《Go语言编程》【第1章初识Go语言】【1.5 工程管理】时,发现了示例代码calc.go有几处错误,args := os.Args数组变量args[0]代表程序自身,3个if语句len(args)条件判断右值也都小了1,按照书本编写代码运行时将会一直执行匿名函数Usage(),显示如下: USAGE: calc command [arguments] ... The commands are: add Addition of two values. sqrt Square root of a non-negative value. 正确的calc.go代码如下: // calc.go package main import ( "fmt" "os"...阅读全文

博文 2014-12-09 16:00:02 董松

[转载] goroutine背后的系统知识

文: http://www.sizeofvoid.net/goroutine-under-the-hood/ 文章写的非常好, 对内部原理解释的非常清楚, 是我喜欢的风格, 感谢作者的精彩文章. ================================================== Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。 1. 操作系统与运行库2. 并发与并行 (Concurrency and Parallel...阅读全文

博文 2015-06-25 03:00:00 zhengran

**北京:年薪30个比特币,招募区块链开发,欢迎Golang来聊**

北京某区块链研究院,**年薪30个比特币**(100万)招聘技术负责人,要求精通GO语言 、区块链技术 **岗位职责描述**: 1、从事区块链产品的设计和研发工作,研究区块链的协议,运行机制和底层实现等; 2、搭建基于区块链的底层架构,能实现公链、侧链、私有链及多种逻辑,供应用层调度使用; 3、根据实际需求及应用场景,设计区块链运行机制,开发智能合约; 4、组织制定区块链产品的技术方案,指导项目团队成员的日常开发工作,解决开发中的技术问题。 **任职要求**: 1、**985或211院校**,计算机相关专业硕士及以上学历,**8年以上开发工作经验**; 2、熟悉一种区块链开源项目,有区块链项目的开发/实施经验; 3、熟悉各种数据结构和算...阅读全文

《Go语言编程》【1.5 工程管理】calc.go的代码错误

最近看由人民邮电出版社许式伟 吕桂华等编著《Go语言编程》【第1章 初识Go语言】【1.5 工程管理】时,发现了示例代码calc.go有几处错误,args := os.Args数组变量args[0]代表程序自身,3个if语句len(args)条件判断右值也都小了1,按照书本编写代码运行时将会一直执行Usage()指向的匿名函数,显示如下: USAGE: calc command [arguments] ... The commands are: add Addition of two values. sqrt Square root of a non-negative value. 正确的calc.go代码如下: // calc.go package main import ( "fmt" ...阅读全文

博文 2014-12-09 20:00:01 董松

2018-09-16yummy日志

不浪费在百度的一分一秒!+数据库系统原理——阅读课本搜索实际应用——对书本框架提问,记录在文档——搜索实际应用,记录在文档——缩读书籍,百度搜索,知网搜索相关应用,不懂的地方在微信、百度知道、知乎请教相关专业人士——补充完善文档就业:数据工程师,大数据技术部门,为底层数据提供技术服务ibm Data Developer:Job Description / Responsibilities - Develop ETL jobs to support data flow based on requirements - Develop BI reports to support data displaybased on requirements - Be responsible to delive...阅读全文

博文 2018-09-16 12:34:41 yummy1995

Python名称空间规则 无基础学python

名称到对象的映射。命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。 通俗讲:名称空间就是存放名字的地方,三种名称空间,(之前遗留的问题x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方) **一、名称空间分类** 1. 全局命名空间( Global):每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。 2. 局部命名空间(Local):每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。 3. 内置命名空间(Built-in...阅读全文

如何使用Python字节码?

本文转自老男孩教育,转载请注明出处:http://www.oldboyedu.com 如果你曾经编写亦或只是使用Python语言,那么你可能已经习惯了看Python源码文件; 源码的文件名以.py结尾。或许你也已经注意到了另一种类型的文件,文件名以.pyc结尾,或许你已经听说过它们就是Python的“字节码”文件。(但在Python 3上却难觅其踪 -- 原因是它们不再与.py文件出现在同一个目录中,而是放在一个名为__pycache__的子目录中了)。或许你也已听说过这是一种程序加速机制。通过防止Python每次运行时都重新解析源代码从而加快程序运行。 **Python中如何使用python字节码工作?** Python经常被称为是一种解释型语言 -- 一种源代码在程序运...阅读全文

golang中io操作与其中读写指针移动的体现

图1 图2 从图1和图2的对比中可以 看到,图2少了第15行的读取操作,然后图2代码运行的结果,就是全部的hello worldABCDEFG,图1的代码就只有从read之后算起的ABCDEFG。原因是什么呢?读写指针在其中作怪!每次的读写操作都是从指针位置开始的。图1中,第一次read之后,读写指针已经跑到hello word这个地方了,不是在0处,所以第二次read的结果是从这个非零指针之后开始往后读的,所以结果就只有后面的ABCDEFG。图2中,刚开始没有进行read操作,所以读写指针一直保持在零处,所以下一次read是从零处开始读取的。结果为全部的hello worldABCDEFG。 图3 从图3可以看到,用buf.string()这种方式可以看到并没有进行读指针的移动。 图4 从...阅读全文

博文 2017-08-17 07:05:12 舒小贱

GO语言练习:struct基础练习

1、代码 2、运行 1、代码 1 package main 2 3 import "fmt" 4 5 type Rect struct { 6 x, y float64 7 width, height float64 8 } 9 10 func (r * Rect) Area() float64 { 11 return r.width * r.height 12 } 13 14 func Init() { 15 rect1 := new(Rect) 16 rect2 := &Rect{} 17 rect3 := &Rect{0, 0, 100, 200} 18 rect4 := &Rect{width : 100, height : 200} 19 20 ShowRect(rect1) 21...阅读全文

博文 2015-07-07 03:00:00 fengbohello

基于DNSPod的动态域名工具GoDNS

基于DNSPod的动态域名工具,实现类似花生壳的DDNS功能,只要有域名托管在DNSPod,即可在家中或者内网中的机器运行GoDNS,实现动态域名解析效果。项目基于纯Go实现。 项目介绍: [https://xiaozhou.net/godns-project-2014-05-18.html](https://xiaozhou.net/godns-project-2014-05-18.html) 支持运行方式: * upstart * systemd * docker * nohup运...阅读全文

ubuntu 安装go语言编译环境

1. ubuntu 安装 go语言 sudo apt-get install golang 2.测试go mkdir CODE //创建一个名为CODE的文件夹的命令 vim test.go //在vim下创建一个名为test的go文件的命令 按i进入插入模式,编辑代码 /************************************************************************* > File Name: test.go > Author: ACway > Created Time: 2015年01月10日 星期六 15时23分29秒 ************************************************************...阅读全文

GO语言练习:switch基本用法

1、代码 2、运行 1、代码 1 package main 2 import "fmt" 3 4 func switch_1(i int){ 5 switch i { 6 case 0 : 7 fmt.Println("0 --: i = ", i); 8 case 1: 9 fmt.Println("1 --: i = ", i); 10 case 2: 11 fmt.Println("2 --: i = ", i); 12 fallthrough 13 case 3: 14 fmt.Println("3 --: i = ", i); 15 case 4, 5, 6: 16 fmt.Println("4, 5, 6 --: i = ", i); 17 default : 18 fmt.Pr...阅读全文

博文 2015-07-03 03:00:00 fengbohello

OAuth 认证反向代理sohop

sohop 是一个反向代理,可以选择性地限制对使用 OAuth 进行身份验证的用户的访问权限。它还提供一个运行状况检查端点,用于报告上游服务的可达性。 sohop 可以在保持限制访问的情况下,公开原有的内部应用到公共互联网,而不必在应用本身配置认证/授权...阅读全文

Golang 在国产化平台中应用

背景国产化平台主要以Linux系统为主,CPU架构包括Arm、MIPS、PowerPC等。基于国产化平台开发的系统应用大多需要适配多CPU架构。Go语言跨平台编译特性能很好适应这种异构需求。跨平台编译Go语言支持交叉编译,例如:在linux开发环境中:GOOS=linux GOARCH=arm go build -ldflags"-s -w" -i -o ./bin/bitA main.goGOOS=linux GOARCH=arm go build -ldflags"-s -w" -i -o ./bin/bitM main.go在windows开发环境中:创建编译脚本:build.batset GOPROXY=https://goproxy.ioset GOOS=linuxset GOAR...阅读全文

博文 2020-04-13 21:32:50 holimon

go 协程与主线程强占运行

最近在学习了go 语言 , 正好学习到了 协程这一块 ,遇到了困惑的地方.这个是go语言官方文档 . 在我的理解当中是,协程只能在主线程释放时间片后才会经过系统调度来运行协程,其实正确的也确实是这样的,但是我遇到了协程强占主线程的一个问题,经过帮助,现在已经了解.废话不多说,先看代码 1 package main 2 3 import ( 4 "fmt" 5 "time" 6 ) 7 8 func main() { 9 go say("world") 10 say("hello") 11 /* 12 fmt.Println("---------------1") 13 14 a := []int{7, 2, 8, -9, 4, 0} 15 fmt.Println("===", a[:len(...阅读全文

博文 2017-02-17 15:00:14 qo2yycc2

go怎样做stw

文链接: Go: How Does Go Stop the World? : Author : Vincent Blanchon 本文基于 go 1.13 在垃圾回收算法中,Stop The Word(STW)是一个很重要的概念,他会中断程序运行,添加写屏障,以便扫描内存 ,现在一起来看看它内部的原理以及可能存在的问题 STW 停止程序运行意味着停止所有运行态的goroutines,一个简单的例子: func main() { runtime.GC() } 运行垃圾回收算法将触发两个阶段的STW 有关垃圾回收的更多细节,请参考同作者的另外一篇文章_“_Go: How Does the Garbage Collector Mark the Memory? STW的步骤 第一步,抢占所有正在运行...阅读全文

博文 2020-04-29 10:33:01 yixiao

golang在go get时提示xx cannot download,xxx is a GOROOT, not a GOPATH. For more details see: 'go help ...

新换了电脑,把之前的go代码全拷贝了过来,顺便升了个级,在设置完GOPATH和GOROOT后,发现运行go version已经没问题了,是最新版本,但是当想下载一个新的包时,提示我我设置的GOPATH是GOROOT.go get github.com/akavel/rsrcpackage github.com/akavel/rsrc: cannot download, F:\GoPath is a GOROOT, not a GOPATH. For more details see: 'go help gopath'我当时以为是设置的时候翻车了,在我仔细对照了几次配置文件后,发现并没有问题.本着"程序永远不会出错,错的一定是我,找不到错就人机对骂"的原则,我又从头走了几遍流程,问题还是没解决...阅读全文

博文 2020-03-11 13:33:11 拉风月

Go之旅-常量

## Go之旅-常量 常量是指程序运行时不可改变的值,常量必须初始化值,定义常量可以指定类型,编译器也可以通过常量初始化值做类型推断。在函数代码块中定义常量,不被使用也不会出现编译错误。在常量组中如果不指定常量类型和初始化值,那么常量会和上一行的非空常量值相同。 ```golang // 声明包main package main // 导入包 import ( "fmt" ) // 定义常量 const a = 10 // 必须赋值,可指定类型,也可以编译器通过初始化值类型推断 const b = "Hello World" const c = false const d, e = 1, 10 // 常量组 const ( f = true ...阅读全文

GO语言练习:map基本用法

1、代码 2、运行 1、代码 文件:map.go 1 package main 2 import "fmt" 3 4 type PersionInfo struct{ 5 ID string 6 Name string 7 Address string 8 } 9 10 func main(){ 11 var persionDB map[string] PersionInfo 12 persionDB = make(map[string] PersionInfo) 13 14 persionDB["12345"] = PersionInfo{"12345", "Tom", "Room 203, ..."} 15 persionDB["1"] = PersionInfo{"1", "Jack"...阅读全文

博文 2015-07-03 03:00:01 fengbohello

关于defer

请问这是怎么运行的 最好来个图片箭头指示:smile: func main() { var s []byte protect(func() { s[0] = 0 }) protect(func() { panic(42) }) s[0] = 42 } func protect(g func()) { defer func() { log.Println("done") if x := recover(); x != nil { log.Printf("run time paric:%v", x) } }() log.Println("start:") g() ...阅读全文

go1.11的module机制和dep/govendor机制问题

##module机制和dep/govendor机制是否冲突? 自从go团队推出`module`机制后,go团队和dep社区发生了一些冲突,有一篇有名的争论《关于Go Module的争吵》, 读后给人一种错觉,似乎`module`机制和`dep/govendor`机制是不相容的。但是仔细分析二者的运行机制, 其实两者并无冲突,反而是互补性质的。 `module`机制由环境变量`GO111MODULE`控制,它有三个值:`off、on、auto`,默认值是`auto`。 在`auto`模式下,在`$GOPATH/src`路径下`build`时,默认使用`vendor`、`GOPATH`导入第三方包, 而在`GOPATH`之外编译时,默认使用`go.mod`设置导入项目。我们知道`vendor`机...阅读全文

博文 2018-08-26 21:58:42 fuhuizn

GO语言练习:for基本用法

1、代码 2、运行 1、代码 1 package main 2 import "fmt" 3 4 func main(){ 5 for k:= 0; k < 5; k++{ 6 JLoop: 7 for j := 0; j < 5; j++{ 8 for i := 0; i < 10; i++{ 9 if i > 5 { 10 break JLoop 11 } 12 fmt.Printf("%d ", i) 13 } 14 } 15 fmt.Println() 16 } 17 fmt.Println("Hello world !") 18 } 2、运行 $ go run for.go 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 ...阅读全文

博文 2015-07-03 03:00:01 fengbohello

3.6学习内容,androidwifiP2p,golang http.ListenAndServe运行机制,

android p2p两篇文章: http://blog.csdn.net/gophers/article/details/38060307 http://blog.csdn.net/max2005/article/details/12237905 官方文档:http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html golang, http://blog.csdn.net/gophers/article/details/37815009 func (srv *Server) Serve(l net.Listener) error { defer l.Close() var tempDel...阅读全文

博文 2015-06-17 20:04:30 u010499721

goroutine背后的系统知识

Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。 1. 操作系统与运行库2. 并发与并行 (Concurrency and Parallelism)3. 线程的调度4. 并发编程框架5. goroutine 1. 操作系统与运行库 对于普通的电脑用户来说,能理解应用程序是运行在操作系统之上就足够了,可对于开发者,我们还需要了解我们写的程序是如何在操作系统之上运行起来的,操作系统如何为应用程序提供服务,这样我们才能分清楚哪些服务是操作系...阅读全文

博文 2015-12-22 03:00:01 LeeZz

GO语言练习:值与引用

1、代码 2、运行 1 package main 2 3 import "fmt" 4 5 func testValue(){ 6 fmt.Println("for value") 7 var a = [3]int {1, 2, 3} 8 var b = a 9 b[1]++ 10 fmt.Println("a = ",a, "\nb = ", b) 11 } 12 13 func testReference() { 14 fmt.Println("for reference") 15 var a = [3]int {1, 2, 3} 16 var b = &a 17 b[1]++ 18 fmt.Println("a = ",a, "\nb = ", *b) 19 } 20 21 func ...阅读全文

博文 2015-07-07 03:00:00 fengbohello

关于channel的问题

程序如下,当num为奇数的时候,输出就会少了最后一个。 本人小白,刚接触go,希望能够有人解惑,非常感谢! ``` func main() { var ch = make(chan int) num := 11 go func() { for i := 1; i <= num; i++ { ch <- i //fmt.Println("++", i) } close(ch) }() for ii := range ch { val := ii go func() { fmt.Println("--", val) }() } fmt.Println("程序运行结束") } ``` 输出结...阅读全文

【GO语言】合理配置GOMAXPROCS提升一倍以上的性能

GOMAXPROCS 用默认的,就是CPU的硬件线程数目, 对于大部分IO密集的应用是不合适的。 至少应该配置到硬件线程数目的5倍以上, 最大256。 具体参见。 这是为什么呢? 我们来复习下Go的线程模型,M/P/G 三种对象,分别代表 操作系统线程、协程执行令牌、协程; 在任何情况下,Go运行时并行执行(注意,不是并发)的goroutines数量是小于等于P的数量的。 如果一个持有P的M,由于P当前执行的G调用了syscall而导致M被阻塞,那么: 注意 注意 注意 关键点:此时,GO的调度器是迟钝的,它很可能什么时都没做,直到M阻塞了想当长时间以后,才会发现有一个P/M被syscall阻塞了。然后,才会用空闲的M来强这个P。 补充说明:调度器迟钝不是M迟钝,M也就是操作系统线程,是非常...阅读全文

博文 2017-08-09 02:14:41 LinkerLin

GO语言初探

Go编程语言是Google中一些大牛(尤其是有着plan9前科的大牛们)如Rob Pike,Ken Thomason这两位赫赫有名的程序高手、技术作家。 很多人认为Go编程语言有点像是C语言与Python的混血,在Golang主页上也清楚写着Go的祖先有C,有Pascal/Modula(也是C++的祖先)/Oberon,还有CSP这个语言,另外很多基础代码也来自Plan 9操作系统。 我是在一个Ubuntu9.10的虚拟机上试用的Go,大家可以跟着我的脚步一探Go的究竟。 1,准备 安装Go之前需要安装mercurial,这是Go的版本控制工具,可以直接通过ubuntu的安装程序搜索添加。 然后为当前用户定义下面几个bash变量。在ubuntu下敲入cd $HOME,一般是/home/use...阅读全文

博文 2016-03-06 17:00:06 bournechen

golang goroutine协程运行机制及使用详解

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go于2009年正式推出,国内各大互联网公司都有使用,尤其是七牛云,基本都是golang写的, 传闻Go是为并发而生的语言,运行速度仅比c c++慢一点,内置协程(轻量级的线程),说白了协程还是运行在一个线程上,由调度器来调度线程该运行哪个协程,也就是类似于模拟了一个操作系统调度线程,我们也知道,其实多线程说白了也是轮流占用cpu,其实还是顺序执行的,协程也是一样,他也是轮流获取执行机会,只不过他获取的是线程,但是如果cpu是多核的话,多线程就能真正意义上的实现并发同时,如果GO执行过程中有多个线程的话,协程也能实现真正意义上的并发执行,所以,最理想的情况,根据cpu核数开辟对应数量的线...阅读全文

博文 2019-03-03 21:34:41 臣以君纲