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

正确使用Go的Timer

我们总是会使用Timer去执行一些定时任务,最近在Go语言的定时器使用上面不小心踩到一点问题,这里记录一下。 go demo(input) func demo(input chan interface{}) { for { select { case msg <- input: println(msg) case <-time.After(time.Second * 5): println("5s timer") case <-time.After(time.Second * 10): println("10s timer") } } } 写出上面这段程序的目的是从 input channel 持续接收消息加以处理,同时希望每过5秒钟和每过10秒钟就分别执行一个定时任务。但是当你执行这段程序...阅读全文

博文 2014-11-16 09:30:05 skoo

golang开发环境搭建

Golang开发环境搭建 Golang 入门教程 开发环境搭建 介绍 Go语言是谷歌推出的一种全新的编程语言, 可以在不损失应用程序性能的情况下降低代码的复杂性。 谷歌首席软件工程师罗布派克(Rob Pike)说: 我们之所以开发Go, 是因为过去1 0多年间软件开发的难 度令人沮丧。 谷歌资深软件工程师罗布·派克(Rob Pike)表示, “Go让我体验到了从未有过的开发效率。 ”派克表示, 今天的C++或C一样, Go是一种系统语言。 他解释道, “使用它可以进行快速开发, 同时它还是一个真 正的编译语言, 我们之所以现在将其开源, 原因是我们认为它已经非常有用和强大。 百度百科 维基百科 golang官网 安装 Windows 官方说明 http://golang.org/doc/in...阅读全文

博文 2014-12-05 14:00:02 steven_hl_0901

Go 语言测试(Test)、性能测试(Benchmark) 学习笔记

简介 Test Package testing provides support for automated testing of Go packages. It is intended to be used in concert with the “go test” command, which automates execution of any function of the form. testing包提供了对Go包的自动测试支持。 这是和go test 命令相呼应的功能, go test 命令会自动执行所以符合格式 func TestXXX(t *testing.T) 的函数。 Benchmark Functions of the form func BenchmarkXxx(b ...阅读全文

博文 2015-12-14 18:00:00 cchd0001

零猫科技告诉你-Go语言可以干嘛?

Hi,大家好!我是GO首席软件工程师Rob Pike说:我之所以被开发,是因为过去10多年间软件开发的难度令人沮丧。你所不知的,GO Go语言是谷歌发布的第二款开源编程语言。专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此也被设计用来解决多处理器的任务。我是GO,我够红 目前,已经有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer、k8s等,现在我们看下,有哪些大公司在用Go语言了。Google对Go寄予厚望。旗下Ap...阅读全文

GO语言学习: 项目构建 及编译 初步

一个GO工程中主要包含以下三个目录: src:源代码文件 pkg:包文件 bin:相关bin文件 step1: 建立工程文件夹 goproject step2: 在工程文件夹中建立src,pkg,bin文件夹 step3: 在GOPATH中添加projiect路径 例 e:/goproject step4: 如工程中有自己的包examplepackage,那在src文件夹下建立以包名命名的文件夹 例 examplepackage step5;在src文件架下编写主程序代码代码 goproject.go step6;在examplepackage文件夹中编写 examplepackage.go 和 包测试文件 examplepackage_test.go step7; 编译调试包 go bui...阅读全文

博文 2015-06-04 18:00:00 phlong999

Go最新的dep详解

该文翻译自https://medium.com/i-can-haz-downtime/dep-101-c85e8ab6ed45#.hbngswi0e我很高兴在过去几个月和几个其他gopher开发的一个原型依赖管理工具,名为dep。dep是去年开始由Peter Bourgon组织的项目的一部分。由于我参与开发了一个“godep”,Go的OG依赖管理工具(继承自Keith Rarick),因此加入了dep项目的团队。除了我自己和Peter,团队的其他成员是Jessie Frazelle,Andrew Gerrand和Sam Boyer。 Andrew是Google Go team的一员。 Jessie在Google工作,并参与过大型Go项目,如Docker和Kubernetes。 Sam维护gp...阅读全文

博文 2017-02-14 11:24:45 方圆

go语言:flag的使用

go语言flag的使用 package main import ( "flag" "fmt" ) var music_file *string = flag.String("file", "musicfile", "Use -file ") func main() { flag.Parse() fmt.Println(*music_file) } 例如文件为flagTest.go go run flagTest.go -file "../music/sun.mp3" 即可指定file参数的值。 如果直接使用go run flagTest.go -file则会提示你-file的使用说明.-file="musicfile": Use -file 如...阅读全文

博文 2014-10-21 23:00:00 x369201170

golang命令行库cobra的使用

简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序。下面是Cobra使用的一个演示: Cobra提供的功能 简易的子命令行模式,如 app server, app fetch等等 完全兼容posix命令行模式 嵌套子命令subcommand 支持全局,局部,串联flags 使用Cobra很容易的生成应用程序和命令,使用cobra create appname和cobra add cmdname 如果命令输入错误,将提供智能建议,如 app srver,将提示srver没有,是否是app server 自动生成commands和flags的帮助信息 自动生成详细的help信息,如app help 自动识别-h,--help帮助flag...阅读全文

博文 2016-07-29 10:00:01 borey

godebug:一个跨平台的Go程序调试工具

godebug是一个跨平台的Go程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符号。使用起来很麻烦而且很难移植。 godebug使用不同的方法,直接把源码作为目标程序,在每一行插入调试代码,然后编译并运行。结果就是一个全功能的调试器,完全可以移植到不同平台。事实上,由于有了gopherjs ,你也可以在浏览器上进行调试: 点击此处尝试原文调试窗口。通过原文的“DEBUG IT”按钮,你可以编辑程序并重新调试它。 工作原理 下面这张是描述上面例子的矢量图: 从中可以看出原始代码转换了两次:第一次godebug插入调试instrumentation,然后gopherjs将结果编译成JavaScript。 让我们看一下instrumentation步骤,以下是go...阅读全文

博文 2015-04-23 01:00:00 mengyidan1988

go reflect TypeOf 与ValueOf

学习go的反射对于理解go的底层实现以及接口机制有着非常重要的价值;本篇文章从一个源程序来体验一下go反射的两个核心函数TypeOf 和ValueOf的使用方法,特别体验下怎么根据type构造type实例的办法。 package main import ( "fmt" "reflect" ) type Speaker interface { Speak()string Set(string) } type Teacher struct { Name string } func (this *Teacher) Speak() string { return this.Name } func (this *Teacher) Set(name string) { this.Name = name ...阅读全文

博文 2015-06-18 09:03:56 hittata

还有比这更好的消息吗?— Go支持Android和iOS

minux大神就说了: 代码在 https://bitbucket.org/minux/goios 的 ios3 分支。 初步的文档在 misc/ios/README。交叉编译需要 iOS SDK,得在 OS X 上面开发。理论上如果你能在 Linux 架设交叉编译环境的话,在 Linux 上开发也不是不行。 我计划把这个 port 加入到 Go 1.5。按照 Brad 给出的 1.5 预览, 应该问题不大。http://talks.golang.org/2014/state-of-the-gopher.slide#40 现在的问题是如何架设 builder。 哎,断断续续搞了3年,终于搞定了。我觉得用 Go 开发 iOS 程序比用 Go 开发 Andro...阅读全文

go语言编译器详解

这里以Windows7 64位为例,如果是32位环境需安装对应版本程序。 一、安装golang1.2.2 1.3及1.3.1编译生成的二进制文件,无法使用LiteIDE23.2携带的gdb7.7进行调试。 二、安装及配置LiteIDE 将liteidex23.2.windows.7z解压到D:\即完成安装。 2.1 设置编辑环境 因为是64位环境,所以选择“win64”。 查看->编辑环境变量,确认GOROOT变量与GO安装路径一致。 2.2 添加GOPATH 查看->管理GOPATH...,创建新目录E:\Code_Repository\golang,并添加到“自定义目录”。 2.3 新建项目 选择上一步添加的GOPATH,模板为Go1 Command Project 编辑源代码,添加几行...阅读全文

博文 2016-11-21 07:00:09 gjy211

golang的闭包和普通函数调用区别

先看一段程序 package main import ( "fmt") func main() { a := []int{1, 2, 3} for _, i := range a { fmt.Println(i) defer p(i) } } func p(i int) { fmt.Println(i) } 运行这段程序,输出结果为 1 2 3 3 2 1 这里就是普通的函数调用,每次调用func p时,完成 i 的值复制,然后打印,此时 i 值复制了3次,分别是1,2,3。由于defer是后进先出,所以执行变成3,2,1 下面我我们用闭包改写下程序: package mainimport ( "fmt")func main() { a := []int{1, 2, 3} for _, i ...阅读全文

博文 2014-10-04 19:26:14 liangDream

CentOS安装Go语言编译环境&配置LiteIDE

Go语言是谷歌2009正式推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。 到这里 https://code.google.com/p/go/downloads/list 选择你需要的版本,安装非常简单,如下: 1 2 3 wget https://go.googlecode.com/files/go1.1.1.linux-386.tar.gz tar -C /usr/local -xzf go1.1.1.linux-386.tar.gz vim /etc/profile #打开/etc/profile在最后添加下面两行 export GOROOT=/usr/local/go export PATH=$GOROOT/bin:$PATH 1 2 3 4 source...阅读全文

博文 2014-10-12 19:00:01 hack715

使用 SwaggerUI 创建 Golang API 文档

为你的 API 提供一个文档比你想象中更加有用,即使你没有公开你的 API ,为你的前端或者移动团队提供一个文档会比你提供截图/片段或使用 Postman/Insomnia (带有同步的高级版本)等付费产品更容易。借助 SwaggerUI ,您可以自动获得所有 API 的设计良好的文档。当切换到 Go 时,由于缺少文档/教程,我在配置它的时候出现了一些问题,所以我决定写一个。 ![goswagger](https://raw.githubusercontent.com/studygolang/gctt-images/master/swagger-golang/swagger-golang1.jpg) 示例程序:[链接](https://github.com/ribice/golang-swa...阅读全文

博文 2018-02-05 12:02:27 toseek

Go 摆脱了 C,又惹上了 Java?

talks.golang.org 前几天放出了 PPT《Go in Go》和 《The State of Go》讲解最近 Go 的开发动态和成果: 随着 Go 1.5 版本的开发,现在整个系统都是使用 Go 编写的(有一小部分汇编) C 已经成为过去时了。 Go 1.5 计划在 8 月份发布,将会尝试支持 iOS。(Go 1.4 已经正式支持 Android) 4月份进行的 NYJavaSIG 聚会上 Go 团队的技术主管经理分享了《Go for Java Programmers》,为 Java 程序员提供的 Go 入门指南,正式向 Java 领域进军了吗? 视频地址:https://www.youtube.com/watch?v=_c_tQ6_3cCg PPT 地址:http://talk...阅读全文

博文 2015-05-29 18:53:00 oschina

2015年web开发的预测。。go语言

本文中,我们将一同看看当今 Web 开发的发展趋势,给大家分享我对 2015 年及未来的一些看法、观察和预测。我从 2000 年就开始做 Web 技术方面的工作,而近几年主要是做云架构解决方案。作为一名 Web 开发者,我曾在 .Net、Node.js 和 Go 技术栈上开发 Web 应用和 Web 服务。最近,我将 Web 技术和开发趋势作为整体研究了一遍,在这里分享一下我的想法和观察结果。首先,让我分享一些我所观察到的可用性和体系结构目前的趋势。可用性的趋势如今,用户体验变得比以往更重要,响应式网页设计(RWD)也成为了网站必备的特性。RWD 能让最终用户在不同尺寸的设备上访问网站,包括手机和平板浏览器。有了 RWD 取代移动网站,我们便无需为移动用户单独开发额外的网站。特别是当我们需要...阅读全文

博文 2015-03-08 04:00:02 蘑蘑茶

golang之flag.String

无论是c语言还是golang语言或是其他语言,启动应用程序时都可以带一些参数,然后系统根据传入的参数进行特点的工作。如:./main -b /home/backupdir -d true 那么如何更好的解析这些参数呢?前两周自己做项目时是通过 range os.Args 来解析这些参数。今天看到了 flag.String 这个方法,感觉之前做的好傻,觉得更应该用golang自带的flag.String来解析参数。 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 ) 7 8 func main() { 9 backup_dir := flag.String("b", "/home/default_dir", "backup path") 10 de...阅读全文

博文 2015-07-20 03:00:00 hezhixiong

Go 解决"Connection reset by peer"或"EOF"问题

【问题】 我编写了一个http Client程序代码如下: // create a request req, err := http.NewRequest(method, url, body) if err != nil { return nil, err } // send JSON to firebase resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("Bad HTTP Response: %v", resp.Status) } defer resp.Body.Clo...阅读全文

博文 2016-12-19 14:00:02 吃一堑消化不良

Go计算运行的时间

函数time.Since() 计算golang运行的时间是非常有用的性能衡量指标,特别是在并发基准测试中。下面将介绍如何简单地使用Go语言来计算程序运行的时间。 简单地使用Golang的time.Since()函数即可。下面有一个完整例子展示这个用法。 package main import ( "fmt" "time" ) func StartCac() { t1 := time.Now() // get current time //logic handlers for i := 0; i < 1000; i++ { fmt.Print("*") } elapsed := time.Since(t1) fmt.Println("App elapsed: ", elapsed) } fun...阅读全文

博文 2016-05-20 11:00:00 GreatElite

go和node.js的对比

go: Golang的诞生有着很强的目的性,所以根基显得非常的沉稳,语言未来针对高性能,高并发的优化也更得心应手。更主要Golang可以切实的解决实际问题,并在内存与CPU使用上大幅优于node。为此,针对有大量请求的服务端,Golang是个不错的选择。 从大型工程的角度来说,go 是完爆 Node 的。性能,内存开销,静态类型,对异步的处理,异常的处理,可调试性,系统稳定度,工具链的成熟度,等等,都是 go 占优。 Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Node.js No...阅读全文

博文 2016-05-24 18:00:00 qizhiqq

go程序调试总结

首先需要注意的是:golang1.3之后的版本,对于支持gdb调试存在很大的问题。产生这个问题的原因是,golang的runtime没有完整的被gdb支持。 最新比较完整支持gdb调试的版本是golang 1.2.2,但是也有个别问题存在。 为什么会出现以上种种问题,golang官网给出的解释是: GDB does not understand Go programs well. The stack management, threading, and runtime contain aspects that differ enough from the execution model GDB expects that they can confuse the debugger, even ...阅读全文

博文 2015-04-24 12:14:21 华子

golang的跨域

在使用golang做web的应用程序的时候,最容易碰到跨域问题了,跨域就是www.a.com访问www.b.com的文件。但是在浏览器里,为了安全起见,这样做是不允许的,这就是js的同源策略了。不懂的话google一下。1.golang做web的应用程序,不用使用像apache的web服务器,因为它自己可以构造一个web服务器。这样问题就来了,因为你使用js做前台,golang做后台,这样js传值的时候,是可以传到服务器的,并且是可以进行跨域访问的,因为golang构造的服务器与你前台就造成了跨域问题了。而ajax传值是传到服务器端的,并且可以进行跨域访问,所以我在开发的时候果断使用了它。 2而在golang接受传值之后,要返回信息给前台,这是golang里面就要设置可以进行跨域访了。设置就...阅读全文

博文 2015-10-22 19:00:02 helloworld20102010

Go--包引用介绍

最近在学习Go编程,本文简单的叙述如何在Go编程中使用包(包管理)。 和其他大多数语言一样,Go也存在包,并使用package关键字定义一个包。首先介绍在程序中如何引入包,引入包有以下几种方式: 1. 最简单的方式引入一个包的方式是直接引入包,例如: import "fmt" import "os" 2. 也可以通过下面的方式将包一块引入,并写在括号内: inport ( "fmt" "os" ) 通过上面的方式,可以引入系统包或第三方的包,下面重点介绍如何引入自定义的包和函数: 一般我们将主程序放在src的mian文件夹下(主程序中包含main函数,并将主程序的包名写为package main),将其他模块放在相应的文件夹下,例如下图所示 主函数在main.go文件中,主函数名也可以为其他...阅读全文

博文 2015-11-02 03:00:01 sunshiming

libgo 2.0发布

libgo 是一个使用 C++ 编写的协作式调度的stackful协程库, 同时也是一个强大的并行编程库。 设计之初是为高并发分布式Linux服务端程序开发提供底层框架支持,可以让链接进程序的同步的第三方库变为异步库,不影响逻辑的前提下提升其性能。 目前支持两个平台: Linux (GCC4.8+) Windows (Win7、Win8、Win10 x86 and x64 使用VS2013/2015编译) 使用libgo编写并行程序,即可以像golang一样开发迅速且逻辑简洁,又有C++原生的性能优势。 1.提供golang一般功能强大协程,基于corontine编写代码,可以以同步的方式编写简单的代码,同时获得异步的性能 2.支持海量协程, 创建100万个协程只需使用2GB内存 3.允许用...阅读全文

博文 2016-01-27 03:00:00 yyzybb

Golang lint简易使用方法

根据作者的说法: Golint is a linter for Go source code. Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes. Golint differs from govet. Govet is concerned with correctness, whereas golint is concerned with coding style. Golint is in use at Google, and it seeks to match the accepted style of the open source Go...阅读全文

博文 2015-05-12 20:00:06 dandan.fs

GO语言LiteIDE的安装使用

这里以Windows7 64位为例,如果是32位环境需安装对应版本程序。 一、安装golang1.2.21.3及1.3.1编译生成的二进制文件,无法使用LiteIDE23.2携带的gdb7.7进行调试。二、安装及配置LiteIDE将liteidex23.2.windows.7z解压到D:\即完成安装。 2.1 设置编辑环境因为是64位环境,所以选择“win64”。查看->编辑环境变量,确认GOROOT变量与GO安装路径一致。 2.2 添加GOPATH查看->管理GOPATH...,创建新目录E:\Code_Repository\golang,并添加到“自定义目录”。2.3 新建项目选择上一步添加的GOPATH,模板为Go1 Command Project编辑源代码,添加几行代码,包括变量声明...阅读全文

博文 2015-12-10 02:01:30 u011225629

[Go]Log记录

后端系统中的Log是相当重要的,做过高并发服务的同学都会认同这一点。相对而言,调试已经用处不大了,对于这样的项目,我现在也习惯了这种开发方式,有两个原因:1.debug只能在开发环境,到产线环境就不灵了。2.在并行计算下,debug可能无法发现潜在的问题。 有了以前做node.js的经验,放弃debug没有想象中那么可怕,只要我们程序设计合理,结构清晰,日志完整,看到异常信息后基本都可以快速定位问题所在。 做Java的时候有log4j,做.NET程序的时候有log4net, 做Node.js的时候有log4js....上述几个模块用了都不错,因此做Go项目自然选择了Log4go。 话说这个log4go并不完善,而且两年没维护了,白瞎了这么好的名字。比较严重的是程序退出可能有日志没有flush...阅读全文

博文 2014-11-11 17:00:01 abv123456789

geohash算法以及求最邻近区域的点-golang

geohash算法以及求最邻近区域的点, 对这两个算法封装成了golang package, 写LBS服务程序的时候有用。https://github.com/gansidui/geohashhttps://github.com/gansidui/nearest package main import ( "fmt" "github.com/gansidui/geohash" ) func main() { latitude := 39.92324 longitude := 116.3906 precision := 5 hash, box := geohash.Encode(latitude, longitude, precision) fmt.Println(hash) fmt.Prin...阅读全文

博文 2014-12-30 13:00:01 bluezwt

go语言坑之for range

go只提供了一种循环方式,即for循环,在使用时可以像c那样使用,也可以通过for range方式遍历容器类型如数组、切片和映射。但是在使用for range时,如果使用不当,就会出现一些问题,导致程序运行行为不如预期。比如,下面的示例程序将遍历一个切片,并将切片的值当成映射的键和值存入,切片类型是一个int型,映射的类型是键为int型,值为*int,即值是一个地址。 package main import "fmt" func main() { slice := []int{0, 1, 2, 3} myMap := make(map[int]*int) for index, value := range slice { myMap[index] = &value } fmt.Println...阅读全文

博文 2017-04-13 07:18:17 songleo

golang log用法

21天精品区块链课程免费学习,深入实战行家带路,助力开发者轻松玩转区块链! >>> package main import ( "log" "os" ) var logger *log.Logger func main() { file, err := os.OpenFile("test.log", os.O_APPEND|os.O_CREATE, 666) if err != nil { log.Fatalln("fail to create test.log file!") } defer file.Close() logger = log.New(file, "", log.LstdFlags|log.Lshortfile) // 日志文件格式:log包含时间及文件行数 log.Pri...阅读全文

博文 2018-09-01 14:33:12 Robin3D

golang-2018优秀开源框架和库

作者:承诺一时的美丽链接:https://www.jianshu.com/u/6719426bf97e來源:简书音频和音乐用于操纵音频的库。flac - Native Go FLAC解码器。flac - Native Go FLAC解码器。gaad - Native Go AAC比特流解析器。go-sox - 用于go的libsox绑定。go_mediainfo - 用于go的libmediainfo绑定。gosamplerate - 用于go的libsamplerate绑定。id3v2 - Go的快速稳定的ID3解析和编写库。malgo - 迷你音频库。minimp3 - 轻量级MP3解码器库。mix - 用于音乐应用的基于序列的Go-native音频混音器。mp3 - Native Go...阅读全文

博文 2019-01-25 15:34:48 西门厌

Go程序到底需不需要docker?

我是Go的粉丝,而且我也对容器感兴趣。容器可以使得代码更容易部署也更容易扩展。 但并不是所有Go程序员都使用容器。 在本文中,我将探讨一些真正应该考虑使用Go和容器的原因 - 然后我们来看一些容器根本不会增加任何好处的情况。首先,我们要确保我们都在相同的起点上。什么是容器对于使用这些容器的人来说,可能有许多不同的定义。对于许多人来说,尽管容器比Docker开源项目或Docker公司要久远得多,“容器”一词与Docker是同义词。如果您是容器的新使用者,Docker可能是您的最佳起点,其提供对开发人员友好的命令行支持,但依然还有其他可用的实现:Linux容器 - 容器实现,包括LXC和LXD来自CoreOS的rkt-pod-native容器引擎runc - 按OCI规范运行容器Windows容...阅读全文

博文 2017-04-25 03:07:32 方圆

golang中sublime text中配置goimports

生态go对于import包无法自动添加或者删除,对于某些用户来说很不适应.在sublime text中利用gosublime+goimports很好的解决了这一问题. 1首先确认sublime text安装了Gosublime(安装方法这里不在赘述); 2下载goimports: go get code.google.com/p/go.tools/cmd/goimports 3配置sublime text,配制方法如下:preferences->package settings->gosublime->setting-user中添加如下内容 { "fmt_cmd": ["goimports"] } 4重启sublime text,即可看到可以自动添加程序中缺少的包或者删除程序中多余的包,而不...阅读全文

博文 2015-06-17 20:17:46 chenbaoke

golang日志处理

golang程序日志记录 package main import ( "flag" "fmt" "log" "os" "runtime" ) var ( logFileName = flag.String("log", "cServer.log", "Log file name") ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) flag.Parse() //set logfile Stdout logFile, logErr := os.OpenFile(*logFileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) if logErr != nil { fmt.Println("Fai...阅读全文

博文 2014-10-04 19:26:52 liaojie

对golang的Channel初始化的有缓存与无缓存解释

首先编程的时候遇到疑问,输出跟我所想预想不一样,后来查到了golang社区的帖子,其中一篇帖子 :健哥大人 做出了一些解释。 我摘抄重点过来: 无缓冲的与有缓冲channel有着重大差别,那就是一个是同步的 一个是非同步的。 比如 c1:=make(chan int) 无缓冲 c2:=make(chan int,1) 有缓冲 c1<-1 无缓冲: 不仅仅是向 c1 通道放 1,而是一直要等有别的携程 <-c1 接手了这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着。 有缓冲: c2<-1 则不会阻塞,因为缓冲大小是1(其实是缓冲大小为0),只有当放第二个值的时候,第一个还没被人拿走,这时候才会阻塞。 我对以上做一些解释,首先确实得承认channel有缓存与无缓存确实差别巨大,缓存为1...阅读全文

博文 2015-06-17 20:05:13 paladinosment

使用 Go 语言开发 Android 程序

环境配置 安装 Go 1.5 以上版本,具体安装步骤见官网 https://golang.org/doc/install 安装 gomobile https://godoc.org/golang.org/x/mobile/cmd/gomobile执行以下命令,安装过程中可能需要翻墙 go get -v golang.org/x/mobile/cmd/gomobile gomobile init -v 在安装过程中可能会发生以下问题 提示 unrecognized import path 错误,通常翻墙后可解决 提示 import path does not begin with hostname 错误,如果设置了 GOROOT 的话取消该设置 提示 $GOPATH not set 错误,检查...阅读全文

博文 2017-03-20 05:34:12 bookislife

golang手动管理内存

作者:John Graham-Cumming. 原文点击此处。翻译:Lubia Yang 前些天我介绍了我们对Lua的使用,implement our new Web Application Firewall. 另一种在CloudFlare (作者的公司)变得非常流行的语言是Golang。在过去,我写了一篇 how we use Go来介绍类似Railgun的网络服务的编写。 用Golang这样带GC的语言编写长期运行的网络服务有一个很大的挑战,那就是内存管理。 为了理解Golang的内存管理有必要对run-time源码进行深挖。有两个进程区分应用程序不再使用的内存,当它们看起来不会再使用,就把它们归还到操作系统(在Golang源码里称为scavenging )。 这里有一个简单的程序制造了...阅读全文

Go-数据库连接

GO src中自带了sql包和连接数据库的包。这里以连接MYsql为例子。 sql.Open 就是开启了一个数据库连接处。在执行EXEC 或者 QUERY的时候就会自己去建立连接。因此整个应用程序 只需要初始化一次sql.db指针。然后到处用就oK了。 // dbTest project main.go package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "time" ) func IsErr(err error) { if err != nil { fmt.Printf("程晗错误:%s", err) } } func main() { //初始化数据库信息,此时就是一个数据库连接池 d...阅读全文

博文 2015-11-07 15:00:01 shuanger_

Go Mvc的一个示例

下载 Go Mvc的一个示例,项目后台用户管理部分,包括用户的添加,修改,删除,分页,查询等操作。分享出来供大家参考。 data.sql 是表结构的创建SQL,运行前先创建数据表。DBConfig.xml是数据库连接字符串的设置,只所以独立出来一个文件,主要是方便程序里对文件进行修,力求简单,在程序运行前先设置Mysql连接信息。访问地址为:http://localhost:6080/Admin/AdminUser/Index 下...阅读全文

博文 2015-05-12 21:00:02 王岩0001

golang mysql

我实在受不了哪些只会粘贴别人东西的东西。自己不动手实践就开始放屁!golang访问mysql数据库1)下载mysql驱动https://github.com/go-sql-driver/mysql下载zip包mysql-master.zip2)将mysql-master.zip放到redhat6.4的机器上,解压,获得文件夹mysql-master,将这个目录改名为mysql,并将mysql目录移到/usr/local/go/src/目录下。/usr/local/go目录是我的GOROOT目录。3)安装mysql,为了简单使用root用户在mysql数据库中创建表userinfo用户:root,密码:空;数据库:msyql,表userinfocreate table userinfo (ui...阅读全文

博文 2017-05-24 02:09:33 haolifengwang

也谈并发与并行

也谈并发与并行 六 23 bigwhite技术志 Concurrency, Go, Go1.5, Golang, Google, Gopher, goroutine, parallelism, RobPike, 并发, 并行, 线程, 编程语言, 调度 No Comments 在一般人的眼中,“并行”就是并行,即你干你的,我干我的,两个“并行”的执行过程可能是两条毫无瓜葛的平行线,也可能是有交叉,但瞬即分开的两条线。不 过在程序员的世界里,有关“并行”的概念却有两个单词:Concurrency和Parallelism,对应的比较主流的中文翻译为并发 (Concurrency)和并行(Parallelism)。 之前一直使用C、Python进行Coding,对Concrrency和Parall...阅读全文

数据库不适合Docker及容器化的7大原因

导读:所有的服务都开始了容器化升级,在一切皆容器的主流思想下,无状态的服务采用容器化已经是大势所趋,常常困扰架构师的一个问题是,数据库是否需要容器化,本文作者 Mikhail Chinkov 提出了自己否定观点,由高可用架构翻译。如果我们观察 2017 年技术行业,容器和 Docker 依然将是最热门的流行语。我们开始在每个领域的 Docker 容器中打包开发的软件。从小型初创公司到巨大的微服务平台都在使用容器技术。从 CI 平台到 Raspberry Pi 。从数据库到……数据库?您确定要将数据库放在容器中吗?不幸的是,这不是虚构的场景。我看到许多快速增长的项目将数据持久化到容器中。并且将计算服务和数据服务放在同一台机器上。笔者希望有经验的人不会用这个解决方案。下面是我的观点,数据库容器化...阅读全文

博文 2017-02-15 03:10:00 Mikhail Chinkov

记一次golang gc优化过程

我们使用golang编写的线上服务,通常会设置一个golang runtime指标监控,包括goroutine num、gc num、gc pause 等等。最近的一次上线,发现 gc 相关的指标出现异常,gc num 和 gc pause 大幅升高。由于 golang 的 gc 是 stop the world 来做, gc 过多会抢占程序的正常执行时间,甚至影响对外提供的服务,因此暂停了上线,准备先把 gc 的问题修复下。 出问题时的 gc 监控如下: image.png 其中蓝色曲线表示 gc num,黄色曲线表示 gc pause(单位ms),两个指标都是30s的累计数据。可以看到每30s的pause达到了秒级别。 登录到线上机器,通过 go tool pprof --alloc_o...阅读全文

博文 2017-09-25 12:34:48 zippera