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

golang中省略返回值造成内存泄漏

我已经两次因为不恰当的省略go中的函数返回值,一次造成MySql的too many connection错误,一次造成严重的内存泄漏。所以在这里大家分享一下这个问题和解决办法,也提醒自己以后不要再犯类似的错了。 众所周知,go中的函数可以返回多个值。但很多时候我们并不需要所有的值,而且go中定义了一个变量必须使用才可以,不然会报错。所以对于不需要的返回值,一般的操作方法就是省略: for _,value := range slice{ //.... } 一个典型就是上面的range。range可以返回两个值:如果后面是数组或者切片,第一值就是index索引号。如果range后面是map类型,第一值就是map的键key。第二值就是数据里或者map中具体的值了。很多时候我们不需要第一个值,所以就...阅读全文

博文 2014-10-04 19:26:41 WAKnow

Go语法

Go基础 变量 基本结构:var 变量名 变量类型 = 值 注:_(下划线)是个特殊的变量名,任何赋予它的值都会被丢弃 package main /* 全局变量 */ // 仅声明, 必要有var和变量类型 var a int var b, c int // 声明并初始化,变量类型可省略 var d int = 1 var e, f int = 1, 2 var g = 1 // 自动推断类型 var h, i = 1, "string" // 类型可以不一样 func main() { /* 局部变量特有的声明方式 */ j := 1 k, l := 1, 2 } 常量 常量可定义为数值、布尔值或字符串等类型。 /* 全局和局部声明方式相同 */ const a int = 1 const...阅读全文

博文 2015-04-03 18:00:19 LeoHsiun

HTTP Payload

今天用go重写了一个用Ruby实现的http请求功能。但是在请求参数相同的情况下go的请求一直被服务器返回参数错误。 既然参数相同,那就应该是Header里面有问题喽? 我把Ruby代码生成的请求弄出来看了下 POST参数是包在payload里面的。哦! 等等!payload是什么鬼啊!! 我在go的http package里面没看到这玩意儿。 所以还是要知道payload是干嘛的。 根据wiki的解释:payload是跟在请求header后面的数据,是一次请求的主要数据或者说主要目的。 SO上有一个直观的解释:Request Payload 就是POST、PUT等http请求所发送的数据。它是header之后的部分。 一个Content-Type是application/json的请求,具...阅读全文

golang中goconfig包使用解析

注意事项 本博客隶属于 goconfig - 课时 1:goconfig 使用解析 请注意配套使用。 本博文为 goconfig - Go 语言 INI 解析器的配套博客,旨在通过文字结合代码示例对该库的使用方法和案例进行讲解,便于各位同学更好地使用和深入了解。 库简介 goconfig 是一个由 Go 语言开发的针对 Windows 下常见的 INI 格式的配置文件解析器。该解析器在涵盖了所有 INI 文件操作的基础上,又针对 Go 语言实际开发过程中遇到的一些需求进行了扩展。相对于其它 INI 文件解析器而言,该解析器最大的优势在于对注释的极佳支持;除此之外,支持多个配置文件覆盖加载也是非常特别但好用的功能。 下载安装 您可以通过以下两种方式下载安装 goconfig: gopm get...阅读全文

博文 2015-10-28 22:00:41 chenbaoke

自己封装的golang 操作数据库方法

这个是我用Go写的第一个东东,可能还存在些BUG没有测试到。这里主要是提供一个参考。各位可以改写成自己的风格。 在命令行下输入如下两条命令,进行安装 go get github.com/male110/SimpleDb go install github.com/male110/SimpleDb Go语言的数据库操作,只能用Rows.Scan来一次性读取所有列。感觉很不习惯,我还是习惯按照列名来一列列的取数据。所以我自己封装了一个数据结构MyRows,MyRows实现了一个函数,GetValue(name string, value interface{})可以按列名来取数据。如下所示: err = rows.GetValue("IsBoy", &isBoy) if err != nil {...阅读全文

博文 2014-10-04 19:27:14 王岩0001

GoLang之错误处理

错误处理 error Go语言引入了一个错误处理的标准模式,即error接口,该接口定义如下: type error interface { Error() string } 对于大多数函数,如果要返回错误,可以将error作为多返回值的最后一个: func foo(param int)(ret int, err error) { ... } 调用时的代码: n, err := foo(0) if err != nil { // 错误处理 } else { // 使用返回值n } 我们还可以自定义错误类型,一个例子: package main import "fmt" import "errors" //自定义的出错结构 type myError struct { arg int errMs...阅读全文

博文 2017-11-24 16:00:00 chenny7

Golang错误和异常处理的正确姿势

Golang错误和异常处理的正确姿势错误和异常是两个不同的概念,非常容易混淆。很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。从表面上看,一切皆错误的思路更简单,而异常的引入仅仅增加了额外的复杂度。但事实并非如此。众所周知,Golang遵循“少即是多”的设计哲学,追求简洁优雅,就是说如果异常价值不大,就不会将异常加入到语言特性中。 错误和异常处理是程序的重要组成部分,我们先看看下面几个问题: 错误和异常如何区分? 错误处理的方式有哪几种? 什么时候需要使用异常终止程序? 什么时候需要捕获异常? ... 如果你对这几个问题的答案不是太清楚,那么就抽一点时间看看本文,或许能给你一些启发。 face-to-exception.p...阅读全文

博文 2017-11-28 14:00:01 zhangboyu

golang 中io包用法(一)

本文转自Golove博客:http://www.cnblogs.com/golove/p/3276678.html ,并在此基础上进行修改. io 包为I/O原语提供了基础的接口.它主要包装了这些原语的已有实现,如 os 包中的那些,抽象成函数性的共享公共接口,加上一些其它相关的原语。 由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户不应假定它们对于并行执行是安全的。 在io包中最重要的是两个接口:Reader和Writer接口,首先来介绍这两个接口. type Reader interface { Read(p []byte) (n int, err error) } Reader 接口包装了基本的 Read 方法。 Read 将 len(p) 个字节读取到 p 中...阅读全文

博文 2015-06-19 01:00:27 chenbaoke

filebeat_config 介绍

title: filebeat config date: 2017-06-11 03:22:31 categories: elk tags: filebeat Filebeat Prospector filebeat.prospectors: - input_type: log paths: - /var/log/apache/httpd-*.log document_type: apache - input_type: log paths: - /var/log/messages - /var/log/*.log Filebeat Options input_type: log|stdin 指定输入类型 paths 支持基本的正则,所有golang glob都支持,支持/var/log/*...阅读全文

博文 2017-06-11 04:07:11 budongshu

Go连接MySql数据库too many connections

Go中连接数据库的连接池:当你需要和数据库通信时,就会从连接池里面取出一个连接,和数据库交互。使用完的闲置的连接会回到连接池,等待下一次的调用。如果连接池里面没有闲置的连接,会自动创建一个新的连接出来。其中有一段: An sql.Row returns the connection when Scan() is called, sql.Rows returns either when Close() is called or all rows have been iterated over with Next(), and sql.Tx will return when Commit or Rollback() are called. If you forget to completely ...阅读全文

博文 2015-06-05 23:00:05 牛牛张

Go连接MySql数据库too many connections错误解决

这几天用Go写了个简陋的服务器,连接Mysql数据库,提供api给其他程序调用来实现增删改产等服务。Go的版本是1.2,使用的驱动是go-sql-driver/mysql。但是在有一定量的查询结果以后,会出先too many connection的错误。 google了一下,很多文章都建议修改MySql的配置文件:my.ini。文章是这样解释的:MySql的默认连接数是100,当查询数过多时,就会出现这个错误。所以把配置修改: max_connections=1000 这个字段后面的数字就是MySql允许的连接数,改的大一些就会解决问题。于是在电脑上直接改成10000,重启MySql。然后电脑就卡的要崩溃了。看了相关的文档大约知道,这个参数是控制MySql建立的线程数的。改成10000就会有...阅读全文

博文 2015-05-12 20:00:03 WAKnow

伙计们,Go 并没有那么简单

出于好奇,我最近开始接触一些 Go 的代码。我之前对它有一些了解,但是从来没有尝试去写(没有需求)。但是现在我们团队选择使用 Go 来开发一个项目,所以我觉得这是一个获得实际经验的好机会。 到目前为止,关于这门语言我已经学习了很长时间。在这个博文的末尾,我会写更多关于 Go 的干货。 社区实际上并不那么令人愉快,特别是那些因为它的简单性而主张使用 Go 的人。似乎简单已经成为 Go 社区中的一个流行语,许多人反复重复提到这点,却没有给出太多实际的想法。 这对我来说似乎很不幸,因为在我看来,Go 是一个“极其简单的语言”: 1. 不应该作为考虑使用 Go 的主要原因 2. 从他们的关注点中找到其他更有利的推荐理由 3. 甚至不是真的(不是真的简单) 在这篇文章中,我想围绕 Go 来分析一些简单...阅读全文

博文 2018-02-01 17:21:17 polaris

Golang调用Python

阅读原文请点击摘要:Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言。Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法。 ![干他一炮.jpg](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/f5ad9d2dbd36c37ef742c7be6998Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言。Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法。 原理Python提供了丰富的C-API。而C和Go又可以通过cgo无缝集成...阅读全文

博文 2017-07-06 07:08:31 骑猪逛街666

golang的io包

package io import "io" io包提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作。 因为这些接口和原语是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。 Index Variables type Reader type Writer type Closer type Seeker type ReadCloser type ReadSeeker type WriteCloser type WriteSeeker type ReadWriter type ReadWriteCloser type Read...阅读全文

博文 2014-10-04 19:26:40 刘地

GO语言结构体相等性

go语言结构体相等性是通过结构体成员的相等来判断的。 之前还在疑惑errors.New返回的结构体为什么会不相等,而且Read函数会返回io.EOF,很多例子代码都会把Read返回返回的error值来和io.EOF做比较,原来io.EOF是错误对象的指针,而不是错误对象本身。一个对象被实例化再多,他们的对象指针一定是不同的,这样就可以得知Read函数返回值和io.EOF比较的原因,因为比较的就是对象指针值,是纯数字的比较,这样也就区分了对象的不同实例...阅读全文

博文 2015-11-29 10:00:02 qscoding

golang笔记——函数与方法

你可能会偶尔遇到没有函数体的函数声明,这表示该函数不是以Go实现的。这样的声明定义了函数标识符。 package math func Sin(x float64) float //implemented in assembly language如果一个函数将所有的返回值都显示的变量名,那么该函数的return语句可以省略操作数。这称之为bare return。在Go中,错误处理有一套独特的编码风格。检查某个子函数是否失败后,我们通常将处理失败的逻辑代码放在处理成功的代码之前。如果某个错误会导致函数返回,那么成功时的逻辑代码不应放在else语句块中,而应直接放在函数体中。Go中大部分函数的代码结构几乎相同,首先是一系列的初始检查,防止错误发生,之后是函数的实际逻辑。函数定义时,可以使用函数类型...阅读全文

博文 2016-03-28 08:00:00 tianyajuanke

golang中的hmac验证应该怎样写

python是这样的 一般hmac验证需要两个参数,一个密钥和一个加密串(既接口参数值的拼接) import hmac hmacStr=hmac.new('密钥') hmacStr.update('加密串') hmacStr=hmacStr.hexdigest() 或者是 hmac.new(__api_secret, params, digestmod=hashlib.sha512).hexdigest() 在golang中应该怎样写?我到处都找不到例子和相关的用...阅读全文

go:匿名函数与闭包

一、匿名函数 定义:没有函数名的函数。 作用:在go语言中目前了解的作用就是用于构成闭包。 *注:由于js不存在块级作用域,故匿名函数常用来包含代码以不污染全局命名空间,运行后销毁环境。 ----来自知乎回答:http://www.zhihu.com/question/34649602 使用方法及其原理请参考:http://www.cnblogs.com/chenxianbin89/archive/2010/01/28/1658392.html 使用举例 (1) a := func() { fmt.Println(1) } a() //输出:1 (2)带参数 b := func(arg int) { fmt.Println(arg) } b(2) //输出:2 (func(arg int) ...阅读全文

博文 2015-10-23 03:00:06 xiaopipi

Java构造函数与Go构造函数的不同

因为Java的构造函数是不需要返回值的,所以一般是参数较多的构造函数调用参数较少的构造函数,然后继续赋值。 比如: public Student(String name){ this.name = name ; this.age = 10 ; } public Student(String name , int age ){ this(name) ; this.age = age ; } 而Go语言需要返回值,所以经常是参数较少的调用参数较多的构造函数,在调用时传入一个默认值。 所以代码可能是这样: func NewStudentWithAge(name string , age int) *Student{ return &Student{name :name,age :age } ; }...阅读全文

博文 2015-01-21 22:00:01 itfanr

Golang 中函数和方法的区别

golang 函数以及函数和方法的区别 原创 2016年12月11日 20:12:54 4363 在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。到底什么意思呢。 首先函数的格式是固定的,func+函数名+ 参数 + 返回值(可选) + 函数体。例 func main() { fmt.Println("Hello go") } 在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但...阅读全文

博文 2018-01-23 22:33:04 coder_kev

Golang hashmap 的使用及实现

基本语法 定义hashmap变量 由于go语言是一个强类型的语言,因此hashmap也是有类型的,具体体现在key和value都必须指定类型,比如声明一个key为string,value也是string的map, 需要这样做 var m map[string]string // 声明一个hashmap,还不能直接使用,必须使用make来初始化 m = make(map[string]string) // 初始化一个map m = make(map[string]string, 3) // 初始化一个map并附带一个可选的初始bucket(非准确值,只是有提示意义) m := map[string]string{} // 声明并初始化 m := make(map[string]string) ...阅读全文

博文 2017-08-22 10:05:03 51reboot

golang返回值为interface{}的类型判断

看标题就知道,这是一个很简单的问题,就一个函数的事,但是,今天一同学golang的几个人中,已经不止一个人问我了,在这里我就说一下,也希望对不清楚的娃有些许帮助,大神别喷,飘过就行了。 大家知道,golang对于不确定返回值可以用interface{}代替,这确实很方便,但是也带来了问题,那就是如何判断返回值是什么类型的?其实可以用反射也就是reflect来判断,通过函数 reflect.TypeOf() 即返回类型! $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

博文 2016-04-10 20:00:01 u013025612

Go语言defer的使用

载:http://cloudnil.com/2014/05/19/defer-in-go/ Go语言中没有类似于java中的try…catch…finally的语句块,但是却有一个非常优雅的defer。 defer关键字用来标记最后执行的Go语句,一般用在资源释放、关闭连接等操作,会在函数关闭前调用。 多个defer的定义与执行类似于栈的操作:先进后出,最先定义的最后执行。 在defer的使用中,碰到过许多坑,尤其是在defer与匿名函数搭配使用的时候,本文就来讲讲这些坑。 请先看下边几段代码,然后判断一下各自输出内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32...阅读全文

博文 2015-04-16 13:00:05 yugongpeng_blog

Golang中如何模拟C语言中的if(scanf(…)==EOF)来控制输入的终止

相信很多从C/C++转到Golang的朋友们都经常会对Go中的输入控制感到头疼。。。尤其是如果要在Go中模拟C语言中的如下代码会遇到不小困惑: char input[100]; while (1) { if (scanf("%s", input) == EOF) { printf("输入结束\n"); break; } } 上面这段代码在控制台中输入一个Ctrl+Z(EOF) 就可以终止输入了: C语言中的 int scanf() 函数返回的是一个int类型,它的值只有三种情况: (1) 如果一切正常,返回输入的字符个数,即值>0 (2) 如果出现错误,返回0 (3) 如果遇到结束符EOF,返回-1 注意第三条:遇到结束符会返回-1,这样就会结束输入。也就是说,如果我们输入EOF(EOF其实...阅读全文

博文 2014-10-21 20:00:01 u011774512

Golang笔记之值类型和引用类型

值类型:所有像int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址 引用类型:复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个字所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个字中。 局部变量被声明后必须在相同的代码块中使用它,否则会得到编译错误,全局变量允许声明但不使用 如果要交换两个变量(已声明且赋值)的值,可以简单地使用a,b = b,a,这被称为并...阅读全文

博文 2017-05-17 12:23:47 弧度里的微笑

Go flag包

一、命令行语法 命令行语法主要有以下几种形式: cmd -flag //只支持bool类型 cmd -flag=x cmd -flag x //只支持非bool类型 以上语法对于一个或两个‘-’号是一样的 对于整形flag,合法的值可以为1234,0664,0x1234或负数等。对于布尔型flag,可以为1,0,t,f,T,F,true,false,TRUE,FALSE,True,False等 二、命令行参数方法 (1)定义flag参数 参数有三个:第一个为参数名称,第二个为默认值,第三个是说明 (1) 通过flag.String(),Bool(),Int() 等flag.Xxx()方法,该种方式返回一个相应的指针 var ip = flag.Int("flagname", 1234, "h...阅读全文

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

Tango,微内核可扩展的Go语言Web框架

转自 [lunny的博客](http://lunny.info/2015/01/07/1-Tango-micro-and-pluggable-web-framework-for-Go.html) # 简介 Golang的web框架基本上处于一个井喷期,那么为什么要再造一个轮子。这是因为,目前可扩展性比较强的都是基于函数作为可执行体的,而以结构体作为执行体的框架目前可扩展性都不够强,包括我原先写的框架xweb也是如此。因此,一个全新的框架出来了,先上地址:[https://github.com/lunny/tango](https://github.com/lunny/tango)。 初看Tango框架,感觉和Martini及Macaron非常的像。比如这段代码: ``...阅读全文

golang语法总结(八):类型零值、类型别名、类型转换

类型零值 变量声明为某种类型后的值就为该类型的零值,它不是空值。通常数值类型默认为0,bool为false,string为空字符串 类型别名 比如: type text stringfunc main() { var t text = "hello world" fmt.Println(t)} 类型转换 Go语言不存在隐式转换,必须显式转换,并且只能在两种相互兼容的类型间转换,转换示例: a := 3.14b := int(a)fmt.Println(b)var c int32 = 256var d = float64(c)fmt.Println(d...阅读全文

博文 2016-02-22 14:00:07 QQ245671051

GO语言学习笔记(一)

每个Go源码文件开头都是package声明,表示Go代码所属的包要生成Go的可执行程序,需要定义一个main的包,同时创建main目录外部参数传入用os模块的os.Args方法获取,os.Args接收的参数下标从1开始 package main import ( "fmt" "os" ) func main(){ fmt.Println("Hello Test") fmt.Println(os.Args[1]) } 在函数返回时没有被明确赋值的返回值会被设置成默认值,例如float类型返回值会被设置成0.0,error类型返回值会被设置成为nil6g和6l是64为版本的Go编译器和链接器,32为版本的编译器和连接器是8g和8l,gcc版本的编译器是gccgo 6g helloworld.go...阅读全文

博文 2014-10-11 13:00:06 YaphetS_xiaoyang

golang reflect

reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,通过调用TypeOf获取其动态类型信息,该函数返回一个Type类型值。调用ValueOf函数返回一个Value类型值,该值代表运行时的数据。Zero接受一个Type类型参数并返回一个代表该类型零值的Value类型值 type package main import ( "reflect" "fmt" ) type lx interface { SayHi() } type User struct { Name string Age int64 Sex string } func (u *User) SayHi() { fmt.Println("hello world") } f...阅读全文

博文 2015-10-05 10:00:04 别人说我名字很长

golang 模板(template)的常用基本语法

golang 模板(template)的常用基本语法 模板 在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染。 这篇文章不讨论golang后端的模板读取及渲染方法,只讨论模板中嵌入变量,渲染变量、循环等一些基本用法。 变量 在golang渲染template的时候,可以接受一个interface{}类型的变量,我们在模板文件中可以读取变量内的值并渲染到模板里。 有两个常用的传入参数的类型。一个是struct,在模板内可以读取该struct域的内容来进行渲染。还有一个是map[string]interface{},在模板内可以使用key来进行渲染。 我一般使用第二种,效率可能会差一...阅读全文

博文 2016-09-08 12:00:03 sryan

Go interface详解

如Go method中提及,Golang没有明确支持多态,但是通过其他手段可以实现类似C++中的多态特性,即本文中即将介绍的Go interface功能。 interface定义   interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现。请注意:此处限定是一组方法,既然是方法,就不能是变量;而且是一组,表明可以有多个方法。再多声明一点,interface本质上是一种类型,确切的说,是指针类型,此处暂且不多表,后文中自然能体会到。   interface是为实现多态功能,多态是指代码可以根据类型的具体实现采取不同行为的能力。如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值。 type 接口名称 inter...阅读全文

博文 2019-03-06 19:34:40 北春南秋

go语言scan空值报错

http://xmarker.blog.163.com/blog/static/22648405720144743531420/ 今天使用go语言时,如果数据库里有空值,扫描出来报错,其中环境是这样的,数据库为postgresql9.3.2(其实和数据库无关),数据库里的数据如下: db_public=> \d t_tmp Table "usr_public.t_tmp" Column | Type | Modifiers --------+-----------------------------+----------- id | integer | not null name | character varying(30) | remark | text | time | timesta...阅读全文

博文 2016-04-19 18:00:01 leonpengweicn

go语言基本数据类型

初识GO语言 go是一门新语言,他在语言级提供了并发的支持(goroutine)和通信工具channel,同时它也是一门编译型、强类型的语言,拥有内存GC机制。程序的模块通过package来组织。 GO基础 整数 十进制整数,使用0-9的数字表示且不以0开头。 八进制整数,以0开头,0-7的数字表示 十六进制整数,以0X或者是0x开头,0-9|A-F|a-f组成 100 123455 0100 0600 0xff 0xFF12 浮点数 浮点数由整数部分、小数点和小数部分组成,整数部分和小数部分可以隐藏其中一种。也可以使用科学计数法表示: 0. 72.40 072.40 和72.40一样 2.71823 1.e+0 6.67428e-11 1E6 .25 .12345E+5 复数的虚部 由一个...阅读全文

博文 2016-12-09 09:00:04 sydnash

go语言中var

go语言中定义变量使用关键字var,如:var x int=4 也可以写成x:=4; 在函数中,:= 简洁赋值语句在明确类型的地方,可以用于替代 var 定义。 (:= 结构不能使用在函数外,函数外的每个语法块都必须以关键字开始。) package main import ( "fmt" ) func main() { var x int = 4 fmt.Println(x)//输出4 fmt.Println(&x)//输出指针 //fmt.Println(*x) //错误 y := 4 fmt.Println(y)//输出4 fmt.Println(&y)//输出指针 //fmt.Println(*y) //错误 var v *int = new(int)//返回值为指针 fmt.Prin...阅读全文

[golang note] 匿名组合

匿名组合 golang也提供了继承机制,但采用组合的文法,因此称为匿名组合。与其他语言不同, golang很清晰地展示出类的内存布局是怎样的。 • 非指针方式组合 ▶ 基本语法 // 基类 type Base struct { // 成员变量 } func (b *Base) 函数名(参数列表) (返回值列表) { // 函数体 } // 派生类 type Derived struct { Base // 成员变量 } func (b *Derived) 函数名(参数列表) (返回值列表) { // 函数体 } ▶ 继承规则 √ 在派生类没有改写基类的成员方法时,相应的成员方法被继承。 √ 派生类可以直接调用基类的成员方法,譬如基类有个成员方法为Base.Func(),那么Derived.F...阅读全文

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

golang如何执行脚本并获取返回值

golang中如何执行脚本并获取返回值 调用脚本 在golang标准库中提供了两种方式可以用来启动进程调用脚本 第一种是在os库中的Process类型,Process类型包含一系列方法用来启动进程并对进程进行操作(参考: https://golang.org/pkg/os/#Process) 第二种是在os/exec库种通过Cmd类型的各个函数实现对脚本的调用,实际上Cmd是对Process中各种方法的高层次封装(参考: https://golang.org/pkg/os/exec/) 示例 使用Process执行脚本 package main import ( "fmt" "os" ) func main() { shellPath := "/home/xx/test.sh" argv :...阅读全文

博文 2017-09-22 14:03:22 RichardFan

golang实现抽象工厂模式

在项目过程中,遇到某处需要使用工厂模式,因此写了个测试代码进行测试, 首先定义了interface Worker,其中包含一个接口Work(task *string) 然后定义创建Worker的interface WorkerCreator,包含一个接口Create() ,返回值为Worker type Worker interface { Work(task *string) } type WorkerCreator interface { Create() Worker } 我们假设有一个工种程序员,实现了Work接口,同时定义其构造类,实现Create()接口 type Programmer struct { } func (p *Programmer) Work(task *stri...阅读全文

博文 2016-04-16 19:00:00 qq_33204116

Weed-FS之Volume数据迁移

【Weed-FS又名叫Seaweed-FS】, 本篇主要是关于数据迁移相关的内容, 更详细的源码相关的请看分布式存储Weed-FS源码分析。 很多刚开始接触 Weed-FS 但是又不熟悉它的用户经常会使用以下的方式启动 weed 集群。 weed master -mdir="/tmp/mdata" -defaultReplication="001" -ip="localhost" -port=9334 weed volume -dir=/tmp/vol1/ -mserver="localhost:9334" -ip="localhost" -port=8081 weed volume -dir=/tmp/vol2/ -mserver="localhost:9334" -ip="localho...阅读全文

博文 2015-02-15 18:31:49 YanyiWu

从例子中学习 go 语言 —— 基本语法

go 语言或是 golang 官网上有个 tour。从例子中学习一门语言虽然具有片面性,但是往往是一个入门的好方法;如果一开始就去是看手册的话,有些凌乱,摸不着头脑,有点看字典的味道。所以,先从例子中学习,然后再系统的学习,应该是个不错的方法。 本篇文章基本按照 tour 的步骤,跑跑例子,从例子中去猜测/分析 go 的语法以及结构等,一定程度上可以锻炼一下,观察和分析能力。 hello,world: package main import "fmt" func main() { fmt.Println("hello,world") // 输出 hello,world } 1). package 将程序打包; 2). import 导入其他包,包名用双引号引住;fmt 包 —— 应该是 fo...阅读全文

博文 2014-10-24 11:36:49 陆仁贾

golang编码规范

目录[-]golang编码规范gofmt注释命名控制结构函数(必须)错误处理panicimport缩写参数传递接受者 golang编码规范注:此文档参考官方指南Effective Golang和Golang Code Review Comments进行整理,力图与官方及社区编码风格保持一致。gofmt大部分的格式问题可以通过gofmt解决,gofmt自动格式化代码,保证所有的go代码一致的格式。正常情况下,采用Sublime编写go代码时,插件GoSublilme已经调用gofmt对代码实现了格式化。注释在编码阶段同步写好变量、函数、包注释,注释可以通过godoc导出生成文档。注释必须是完整的句子,以需要注释的内容作为开头,句点作为结尾。程序中每一个被导出的(大写的)名字,都应该有一个文档注...阅读全文

博文 2014-12-24 03:00:02 stephen830

go语言 map转成struct结构(调用第三方包)

package main import ( "encoding/json" "fmt" "github.com/goinggo/mapstructure" ) //把请求包定义成一个结构体 type Requestbody struct { req string } //以指针的方式传入,但在使用时却可以不用关心 // result 是函数内的临时变量,作为返回值可以直接返回调用层 func (r *Requestbody) Json2map() (s map[string]interface{}, err error) { var result map[string]interface{} if err := json.Unmarshal([]byte(r.req), &result); ...阅读全文

博文 2015-06-17 23:05:56 zistxym

go语言函数参数与返回值示例,数组的简单应用

go语言函数参数与返回值示例,数组的简单应用 package main import "fmt" func main() { string1 ,string2 :=test_various_values(30,58) fmt.Println("参数1 ",string1) fmt.Println("参数2 ",string2) fmt.Println("------------------------------------------------------------------") v1 ,v2 :=test_various_values2(46,"huangmao") fmt.Println("--v1==== ",v1) fmt.Println("---v2 == ",v2) fm...阅读全文

博文 2016-10-26 17:00:01 qq_26337701

[go语言]使用defer和有名返回值,实现初始化失败的自动回滚

稍微复杂一些的程序的初始化会涉及到多个模块,任何一个模块初始化失败以后,就应该把已经初始化的其他模块一一回滚。这容易使得初始化的错误处理比较冗长,包含重复代码;或者执行路径跳转不容易读懂,也容易出错。用go语言提供的defer和有名返回值的机制,可以比较容易地解决这个问题,让初始化错误处理简洁清晰。 先看看一种常见的错误处理代码: func Initialize() error { var err error err = init_a() if err != nil { return err } err = init_b() if err != nil { uninit_a() return err } err = init_c() if err != nil { uninit_b() un...阅读全文

博文 2014-10-28 18:43:18 stevewang

Go之获取Windows下文件是否隐藏

起初,做了个小程序,用来检测磁盘中所有的文件 package main import( "fmt" "io/ioutil" "os" ) var dirpath ="D:\\" func main(){ CheckDir(dirpath) } func CheckDir(dirpath string){ dirs, err := ioutil.ReadDir(dirpath) if err !=nil{ panic("目录输入有误!") } for _, dir := range dirs { if dir.IsDir(){ if dir.Name()=="System Volume Information"{ fmt.Println("检测目录:", dirpath+"\\"+dir.Na...阅读全文

博文 2015-01-31 03:00:01 anbylau2130

Java程序员的Golang入门指南(上)

Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis、类Evernote的云笔记leanote等。 1.1 为什么要学习 如果有人说X语言比Y语言好,两方的支持者经常会激烈地争吵。如果你是某种语言老手,你就是那门语言的“传道者”,下意识地会保护它。无论承认与否,你都已被困在一个隧道里,你看到的完全是局限的。《肖申克的救赎》对此有很好的注脚: [Red] These walls are funny. First you hate ‘em, then you get used to ‘em. Enough time passes, you get so you depend on them. That’s institu...阅读全文

博文 2015-06-19 23:00:22 dc_726

go是函数式编程语言吗?

2012-05-19 翻译自这里, 对原文有所扩展, 也有所删减. go是函数式编程语言吗? 不是, 当然不是. 那么, go提供函数吗? 是的, 当然, 大多数编程语言都提供函数, go也不例外. 不相信吗? 我会用代码让你闭嘴: func SayHello() { fmt.Println("Hello") } 看见了吧. go使用关键字func定义函数, 并在函数体中编写函数逻辑. go函数可以接受参数吗? 嗯, 我又看到一个白痴的问题, 呵呵. 哦, 我懂了, 也许是我的SayHello函数给大家造成了错觉, 我会改造我的代码: func SayHelloToSomeone(name string) { fmt.Println("Hello " + name + ".") } 函数Sa...阅读全文

博文 2014-10-04 19:26:45 cool-xing

go语言捕获panic异常并转化为error

package main import ( "fmt" "errors" ) func testPanic2Error() (err error) { //捕获 and 恢复 panic. /*注意defer延迟执行的函数可以修改外围函数“testPanic2Error”的命名返回值. *通过调用recover捕获panic并转化为error. 也许有人打算在main函数中放一个下面这个defer语句,用于捕获程序中的一切panic异常, *建立最后一道防火墙,从而使程序避免崩溃运行下去, 但很不幸, 当main函数的defer延迟函数被执行时,也就意味着main函数要退出了, *此时再捕获panic恢复程序,意义还有多大呢;不过我们有办法克服, 建立一个像“testPanic2Error”...阅读全文

博文 2016-03-27 10:00:04 htyu_0203_39