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

【GoLang笔记】浅析Go语言Interface类型的语法行为及用法

Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态在语法上并非完全对等,但至少在最终实现的效果上,它有多态的影子。 那么,Go的Interface类型到底是什么呢?怎么使用呢?这正是本篇笔记试图说明的问题。 1. Method(s) in Go 在说明Interface类型前,不得不先用Go的method(s)概念来热身,因为Go语言的interface与method(s)这两个语法有非常紧密的联系。 虽然Go语言没有类的概念,但它支持的数据类型可以定义对应的method(s)。本质上说,所谓的method(s)其实就是函数...阅读全文

博文 2015-03-23 11:00:06 slvher

<三> go 枚举

在go语言中,没有直接支持枚举的关键字,也就造成go没有直接枚举的功能。但是go提供另一种方法来实现枚举,那就是const+iota // 实现枚举例子 type State int // iota 初始化后会自动递增 const ( Running State = iota // value --> 0 Stopped // value --> 1 Rebooting // value --> 2 Terminated // value --> 3 ) func (this State) String() string { switch this { case Running: return "Running" case Stopped: return "Stopped" default:...阅读全文

博文 2015-11-20 09:00:01 a11101171

golang中defer的执行

golang中defer的执行 大家都知道golang的defer关键字,它可以在函数返回前执行一些操作,最常用的就是打开一个资源(例如一个文件、数据库连接等)时就用defer延迟关闭改资源,以免引起内存泄漏。例如: func do() (ok bool) { file,_ := os.Open("c:\a.txt") defer file.Close() // doSomething return ok } 我们可以在官方的文档中看到defer的执行顺序是逆序的,也就是先进后出的顺序: for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } 打印结果是:4,3,2,1,0 那么再看这个例子: func deferRet(x,y int) ...阅读全文

博文 2014-10-04 19:26:10 wowzai

go语言25个关键字总结

var和const :变量和常量的声明 var varName type 或者 varName : = value package and import: 导入 func: 用于定义函数和方法 return :用于从函数返回 defer someCode :在函数退出之前执行 go : 用于并行 select 用于选择不同类型的通讯 interface 用于定义接口 struct 用于定义抽象数据类型 break、case、continue、for、fallthrough、else、if、switch、goto、default 流程控制 chan用于channel通讯 type用于声明自定义类型 map用于声明map类型数据 range用于读取slice、map、channel数...阅读全文

博文 2014-10-04 19:26:29 T_star

go - 继承

1 方法的继承 在go中没有继承的关键字,但是我们可以通过interface这个类型做出继承的效果,看如下代码,Car就继承了Start和Stop这两个方法 import ( "fmt" ) type Engine interface { Start() Stop() } type Car struct { Engine } func (this *Car) Start() { fmt.Println("Car->Start()") } func main() { fmt.Println("Start Main func()") car := new(Car) car.Start() } 2 成员变量的继承 相当与定义Person人这个类,然后定义男人Man继承人的姓名,年龄这个两个成员属性...阅读全文

博文 2015-11-16 17:00:01 a11101171

Golang 简单的启用一个线程

// code by shaoyongyang package main import ( "fmt" "time" ) func say(s string) { fmt.Println(s) } func main() { go say("who are you?") go say("who are you?1") fmt.Println(2) time.Sleep(1e9) } 好吧,我之前都在想为什么say方法里面没有任何输出,查了很多资料后发现,是因为程序已经结束运行了,启动的线程还在运行。 在最后面加入线程休眠时间就可以了。 启用一个线程仅仅 go say("see i am new thread") ,仅仅使用go关键字即...阅读全文

博文 2015-02-01 08:00:01 未来还没来

Golang实现简单tcp服务器04 -- 服务器的粘包处理

服务器的粘包处理 什么是粘包 一个完成的消息可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和封包问题 TCP粘包和拆包产生的原因 应用程序写入数据的字节大小大于套接字发送缓冲区的大小 进行MSS大小的TCP分段。MSS是最大报文段长度的缩写。MSS是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。所以MSS并不是TCP报文段的最大长度,而是:MSS=TCP报文段长度-TCP首部长度 以太网的payload大于MTU进行IP分片。MTU指:一种通信协议的某一层上面所能通过的最大数据包大小。如果IP层有一个数据包要传,而且数据的长度比链路层的MTU大,那么IP层就会进行分片,把数据包分成托干片,让每一片都...阅读全文

博文 2015-06-02 23:00:16 victoriest

c语言客户端与golang服务端通信(网络字节序)

网络二进制数据转换: 总所周知,数据在tcp网络传输协议中传输的字节序是大端模式的,换句话说如果你要传输一个int32型的整数,那么假设其二进制小端模式表示为11111111111111110000000000000000那么其大端模式表示为00000000000000001111111111111111,利用c语言的htonl函数会将数据字节序转换成大端模式,在网络上面传输,接收端想解出原始数据只需要认为发送来的数据是大端模式,按照大端模式表示的数据解析便可 举个例子: 在C语言端发送一个int32_t数据过程如下: 发送端(c语言) char buf[100]; int32_t x = 100; ((int*)buf)[0] = htonl(x); send(clientfd, buf,...阅读全文

博文 2016-02-26 03:00:01 candycloud

golang笔记-注释-标识符

Go语言注释 行注释://xxxxxx 块注释:/* xxxxxx */ Go语言关键字,严格区分大小写。 1.break 2.default 3.func 4.interface 5.select 6.case 7.defet 8.go 9.map 10.struct 11.chan 12.else 13.goto 14.package 15.switch 16.const 17.fallthrough 18.if 19.range 20.type 21.contiue 22.for 23.import 24.return 25.var Go语言预定义标识符 1.append 2.bool 3.byte 4.cap 5.close 6.complex 7.complex64 8.compl...阅读全文

博文 2016-04-09 23:00:01 golangerblog

golang 中的 type switch 类型判断

golang 语言中 也有 类是 javascript 的 typeof 判断类型的 方法 比如 func (a interface{}){ //第一种 if inst,ok:=a.(TypeA);ok{ inst.MethodA() } //第二种 switch inst:=a.(type){ case TypeA: inst.MethodA() default: fmt.Println("unknow") } } a可能是任意类型 a.(某个类型) 返回两个值 inst 和 ok ,ok代表是否是这个类型,Ok如果是 inst 就是转换后的 类型 a.(type) type是关键字 结合switch case使用 TypeA(a) 是强制转...阅读全文

博文 2014-10-04 19:26:55 健哥大人

golang expected declaration, found 'IDENT'

这个问题是因为:=只能在函数内部使用,如果声明全局变量需要使用var关键字 例如 func foo() { id := 1 } 如果声明为全局变量则需要这样声明 var id = 1 PS:Go中引入:=是为了减少一些临时变量的定义,所以一个好的习惯是:=只用来声明临时变量,对于一个函数中常用的变量还是使用var进行声明。 附: Short_variable_declarations $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

博文 2015-12-12 17:00:01 jiaolongdy

Golang关键字—— if/else

Golang中,if/else 关键字用于条件判断,如果满足条件就做某事,否则做另一件事: if age >= 18 { fmt.Println("成年人") } else { fmt.Println("未成年") } 多重判断: if score >= 90 { fmt.Println("优秀") } else if score >= 70 { fmt.Println("良好") } else if score >= 60 { fmt.Println("一般") } else { fmt.Println("差") } Golang允许在条件判断语句里声明一个变量,该变量的作用域只在该条件逻辑块内: if score := 40; score >= 90 { fmt.Println("优秀:...阅读全文

博文 2015-05-21 10:00:00 nianhua

Go 1.4 Beta 1 发布

Go 1.4 Beta 1 发布,此版本是 Go 1.4 的 beta 版本,现已提供下载,反馈bug请前往这里。 此版本仅包括一个小的编程语言修改;对编译器做了重大修改,向后兼容 for-range loop 形式。此版本关键点在实现功能,改进垃圾收集器和为下个版本完整的收集器打好基础。 此版本还添加了新的工具,支持使用 go 命令生成构建时源代码。此版本支持 Android 和 Native Client(NaCl)的 ARM 处理器和 Plan 9 的 AMD64。 Go 1.4 最终版本计划在 2014 年 12 月 1 日发布,更多更新内容请看发行说明...阅读全文

博文 2014-11-01 01:00:01 mengyidan1988

Go学习笔记:interface

Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态在语法上并非完全对等,但至少在最终实现的效果上,它有多态的影子。 那么,Go的Interface类型到底是什么呢?怎么使用呢?这正是本篇笔记试图说明的问题。 1. Method(s) in Go 在说明Interface类型前,不得不先用Go的method(s)概念来热身,因为Go语言的interface与method(s)这两个语法有非常紧密的联系。 虽然Go语言没有类的概念,但它支持的数据类型可以定义对应的method(s)。本质上说,所谓的method(s)其实就是函数...阅读全文

博文 2015-11-09 16:00:03 qdx411324962

Golang协程与通道整理

协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之,不通过OS进行切换,自行切换,系统运行开支大大降低 通道channel 并发编程的关键在于执行体之间的通信,go通过通过channel进行通信 channel可以认为类似其他OS体系中的消息队列,只不过在go中原生支持,因而易用 消息队列有哪些值得关注的地方?常见问题包括创建、关闭或删除、阻塞、超时、优先级等,golang中也不例外。罗列如下: 可否探测队列是满或空?或者说是否可以不阻塞地尝试读写? 读阻塞和写阻塞时关闭会怎样? 关闭后未读取的消息会被抛弃? 往关闭的channel发送数据或读取数据会怎样? 怎样探测channel的...阅读全文

超级简单ORM的实现方式

//根据传入的struct中定义的字段名自动小写首字母,查询得到的值自动插入struct中.当然也可以用tag查询,但是需要首先把tag取出来,然后做一个map把tag值和对应的field存储起来. func SelectOne(i interface{}, query string, a ...interface{}) { rows, err := db.Query(query, a...) if nil != err { log.Println(err) return } cols, err := rows.Columns() if nil != err { log.Println(err) return } is := ma...阅读全文

在线安装 IntelliJ IDEA的 golang 插件

IntelliJ IDEA是非常受欢迎的开发工具,如果我们希望使用IntelliJ IDEA 进行Go语言的开发,需要安装Golang插件。网上的资料几乎都是建议开发者编译源码进行安装,但这是不必要的。还有更简单快捷的在线安装方式,这里给出基本步骤(基于IntelliJ IDEA 14.1,不同版本界面会有细微差异,但步骤相似):1. 在“Settings”菜单,点击“Plugins”,打开插件管理窗口:2. 点击“ Browse repositories”,打开插件仓库管理窗口:3. 点击“Manage repositories...”,打开自定义仓库窗口:4. 在URL中输入:https://plugins.jetbrains.com/plugins/alpha/50475. 点击“OK...阅读全文

博文 2015-11-11 09:00:01 stri-zhaolei

关于Go语言中defer关键字

在Go语言中,defer语句会在该函数结束的时候被调用,即使后面的语句运行时出现异常了defer语句仍然会被执行。 需要注意的是,如果defer语句中引用了参数,则该参数的值将是程序到defer这一行的时候的值,而与后面的语句没有关系。 以下为简单测试: package main import "fmt" func main() { func_b_0() func_b_1() func_b_2() } func func_b_0() { fmt.Println("func_b_0...top") a := 5 defer fmt.Println("a=", a) a++ } func func_b_1() { fmt.Println("func_b_1...top") a := 5 defe...阅读全文

博文 2015-06-17 23:00:51 books1958

golang 发送多人邮件 textproto.Error{Code:554, Msg:"Transaction failed: Illegal semicolon, not in group"

网上很多版本发送邮件都是用; 号,关键在于,多个邮件分割不能用; 号,需要用,号 // send mail func SendMail(subject string, message string, from *mail.Address, to []string, smtpConfig SmtpConfig, isHtml bool) error { auth := smtp.PlainAuth( "", smtpConfig.Username, smtpConfig.Password, smtpConfig.Host, ) contentType := "text/plain" if isHtml { contentType = "text/html" } msg := fmt.Sprin...阅读全文

博文 2015-01-23 03:00:00 zhangqingping

从例子中学习 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-04 19:25:56 wuwenxiang91322

[Golang] 从零开始写Socket Server(1): Socket-Client框架

第一次跑到互联网公司实习 。。感觉自己进步飞快啊~第一周刚写了个HTTP服务器用于微信公共号的点餐系统~ 第二周就直接开始一边自学GO语言一边写用于Socket的服务器了。。。 因为发现Golang这一块资料挺少的,接下来我会在Blog里把整个Server的Coding,还有遇到的坑都记录下来~ 在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其他语言那样需要为socket、bind、listen、receive等一系列操作头疼,只要使用Golang中自带的net包即可很方便的完成连接等操作~ 在这里,给出一个最最基础的基于Socket的Server的写法: package main import ( "fmt" "net" "log" "...阅读全文

博文 2015-09-07 23:00:00 ahlxt123

配置go语言vim

Go语言自带vim 的语法高亮文件。 1: 开启vim语法高亮 vim ~/.vimrc syntax on set fencs=utf-8,gbk 2:将/usr/local/go/misc/vim/目录下文件拷贝到~/.vim/目录下(如果没有该目录则新建) mkdir ~/.vim cp -R /usr/local/go/misc/vim/* ~/.vim/ 3:新建~/.vim/ftdetect/go.vim,加入下面的内容:au BufRead,BufNewFile *.go set filetype=go echo "au BufRead,BufNewFile *.go set filetype=go" > ~/.vim/ftdetect/go.vim 只需3步,开启vim go...阅读全文

博文 2015-02-27 20:00:04 pkufergus

Go-Type

在谈论struct和interface已经用到了type这个关键字。 另外,Go的type另外一种常用功能,是类似于C/C++的typedef。在Go的package中,这种用法非常常见。 A type declaration defines a new named type that has the same underlying type as an existing type. The named type provides a way to separate different and perhaps incompatible uses of the underlying type so that they can’t be mixed unintentionally. type n...阅读全文

博文 2016-09-07 07:00:01 u013344915

golang interface用法

接口是一个或多个方法签名的集合,任何类型的方法集中只要拥有与之对应的全部方法,就表示它"实现"了该接口无须在该类型上显式添加接口声明。 所谓对应方法,是指有相同名称、参数列表 (不包括参数名) 以及返回值。当然,该类型还可以有其他方法。(1)接口命名习惯以er结尾结构体。(2)接口只有方法签名,没有实现。(3)接口没有数据字段。(4)可在接口中嵌入其他接口。(5)类型可实现多个接口。 下面举个栗子:用例:一个人,他的有两种角色,在公司是程序猿,在家里是孩他爸。在公司当程序猿时就写bug,在家当爹时就洗尿布。则其接口和结构体的映射关系为: package main import "fmt" type CodeMonkey interface { codingEveryday() string ...阅读全文

博文 2014-10-04 19:27:27 Estone

程序员自白:为什么我们能将月入五万活得像月薪五千

点击上方“CSDN”,选择“置顶公众号”关键时刻,第一时间送达!最近 IT 圈里流行着一个话题:月薪 5W 的程序员,活得却好似月薪 5K。究竟是什么原因,让表面上高收入的程序员生活得如此简约质朴呢?咱们在这里简单分析一下:原因一:穷说到穷,可能有人不服气了:都月薪 5W 了,怎么还能叫穷呢?我们这里所说的穷,更多的是指出身普通。至少在国内,没听说过有哪个富二代在苦逼写代码、改 Bug,绝大多数小伙伴们都是一身清贫地在北上广打拼。如果有幸达到税前月薪 5W,扣去个税和保险,剩下不过 3.5W。对于有房贷,有娃的程序员们,5W 的薪资真的不多,拿什么来奢侈?原因二:忙这个理由应该没有什么争议。互联网大厂的程序员们全年 996,天天对着电脑,谁还有时间关注时尚,谁还有时间逛街消费?原因三:圈子单...阅读全文

博文 2017-10-26 00:13:27 程序员小灰

golang语言部分保留字的举例

golang和c的代码有很大不同的,一不小心就会误用。 1 /* go保留字: */ 2 /* 3 break default func interface select 4 case defer go map struct 5 chan else goto package switch 6 const fallthrough if range type 7 continue for import return var 8 9 */ 10 /*1 package Name 包的名字 */ 11 //package go_reserved 12 package main //No1 13 /*2 import "Name" 导入包 14 import ( 15 别名 "fmt" 一旦启用别名,...阅读全文

博文 2015-03-13 03:00:01 neujie

Go 的插件化开发 Pingo

Pingo 是一个用来为 Go 程序编写插件的简单独立库,因为 Go 本身是静态链接的,因此所有插件都以外部进程方式存在。Pingo 旨在简化标准 RPC 包,支持 TCP 和 Unix 套接字作为通讯协议。当前还不支持远程插件,如果有需要,远程插件很快会提供。 使用 Pingo 创建一个插件非常简单,首先新建目录,如 "plugins/hello-world" ,然后在该目录下编写 main.go:

// Always create a new binary
package main

import "github.com/dullgiulio/p...阅读全文

开源项目 2015-04-27 16:00:00 dullgiulio

[翻译]Go 数据结构

[翻译]Go 数据结构 http://mikespook.com/2013/12/%e7%bf%bb%e8%af%91go-%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84/#more-1775 2013/12/05mikespook发表回复 关于 Go 的内存结构在 Go 内存模型 中已经有介绍,但是内容相对简单,许多细节也一带而过。Ross Cox 的这篇文章 Go Data Structure 讲解得比较系统也很全面的一篇。翻译至此,希望能对大家有帮助。 2009 年的旧文,发现自己当时没有翻译完。所以再次做了增补和修改。如果我没记错,应该已经有人在 OSC 上发表过同一篇文章的翻译了。大家对照参考阅读吧。 ————翻译分隔线———— Go 数据结构 每当给新手...阅读全文

博文 2015-06-17 20:06:18 blogNote

Go函数的定义格式

菜鸟,刚开始学Go语言,函数定义都看不太懂 关键字func,函数名,参数列表,返回值,函数体和返回语句 那么:写起来应该是 func MyFoo(a int) (b int) { return } 但我也能看见func (file *File) Read(b []byte) (n int, err Error)这样的函数,那么函数定义中(file *File)是什么呢?怎么来理解这个呢? 请各位高手指...阅读全文

Socket 网络隧道 qTunnel

qTunnel 是 getqujing.com 使用的安全套接字隧道,是 [Stunnel/stud](http://www.oschina.net/p/stud) 的替代品。qTunnel 使用 Go 编写,为了提高数据传输率,它去掉了认证设置和 SSL 握手。         使用:

$ ./bin/qtunnel -h
Usage of ./bin/qtunnel:
    -backend="127.0.0.1:6400": host:port of the backend
    -clientmode=false: if running at ...阅读全文

Go学习笔记:匿名成员

开始没搞明白啥是匿名成员,看了好几个文章,总算明白了,至少自认为是。 为啥需要匿名成员? 得从OO说起。OO要说是现代的计算机编程语言中必需的部分了。不过不同的语言对于如何实现OO中的各种概念做法并不一样。Go对OO提供了支持,但采用的是一种简洁并且直接的办法,没有类似于Java中的extends、implements关键字,而是直接用匿名成员,并通过“委派”来实现。比如下面这些代码: type E interface{ Start() Stop() Renewal(x int) } type W interface { Open() Close() Renewal() } type Car struct { E W } 有了这些,那么当创建了Car的实例以后,就可以使用: car.Star...阅读全文

Go基础学习五之接口interface、反射reflection

Go编程语言:支持并发、垃圾回收的编译型系统级编程语言!本文主要是按照无闻的《Go 编程基础》开源视频学习并记录笔记。 一、接口interface 1、基本概念 Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。 2、定义 /* 定义接口 */ type interface_name interface { method_name1 [return_type] method_name2 [return_type] method_name3 [return_type] ... method_namen [return_type] } /* 定义结构体 */ type struct_name struct { /* va...阅读全文

博文 2017-10-05 08:34:46 Corwien

[翻译]Go 数据结构

关于 Go 的内存结构在 Go 内存模型 中已经有介绍,但是内容相对简单,许多细节也一带而过。Ross Cox 的这篇文章 Go Data Structure 讲解得比较系统也很全面的一篇。翻译至此,希望能对大家有帮助。 2009 年的旧文,发现自己当时没有翻译完。所以再次做了增补和修改。如果我没记错,应该已经有人在 OSC 上发表过同一篇文章的翻译了。大家对照参考阅读吧。 ————翻译分隔线———— Go 数据结构 每当给新手介绍 Go 的时候,我发现为了建立起关于哪个操作成本更加高昂的正确观念,将 Go 如何为其值分配内存说明清楚会很有帮助。本文介绍了基础类型、结构体、数组和切片(slice)。 基本类型 先来看看几个简单的例子: 变量 i 的类型是 int,在内存中表现为一个 32 位...阅读全文

博文 2014-10-09 16:20:09 mikespook

敏捷测试的关键所在!

敏捷测试要求测试能够测试在“短的时间间隔内持续发生”且能够在“短时间内完成”。考虑到纯粹的依赖人工测试基本不可能达到“短的时间间隔内持续发生”和“短时间内完成”这两个目标,而自动化测试在执行效率方面具有天然的优势,在敏捷测试中使用自动化测试技术应该是自然而然的选择。 考察敏捷开发中的一个迭代周期,在迭代周期开始的时候,团队与客户一起定义本迭代周期内需要完成的功能;开发工程师开始实现新功能,使用持续集成尽可能保证每一次代码提交不引入新的缺陷;所有新功能被添加后,回归测试保证原有功能的正确性;针对新功能运行测试保证新功能的正确性。 如果依靠手工测试来进行这些项目,毫无疑问,测试会成为整个敏捷开发的瓶颈。而如果把这些项目中的测试建立在合适的自动化测试基础上的话,测试就可以和开发一起...阅读全文

一个极其简单的用golang net写的tcpip echoserver

一个极其简单的用golang net写的tcpip echoserver 关键字:linux golang tcpip echoserver 虽然然效率不是很理想,但是可以给初学者参考 package main import ( "fmt" "net" "os" "runtime" ) func doEcho(c net.Conn) { defer c.Close() for { buf := make([]byte, 4096) n, err := c.Read(buf[:]) if n == 0 || err != nil { return } c.Write(buf[0:n]) } } func doStart(host string) { if host == "" { fmt.Pr...阅读全文

博文 2016-01-05 18:00:01 guestcode

都是底层类型,为什么 map是关键字,而string不是呢?

都是底层类型,为什么 map是关键字,而string不是呢? 据说,GO的关键字有25个,仅比 英文26个字母少一个。 其中赫然便有 map在内。 但同样是 GO的内置的底层类型,为什么 string 不在其中呢? 原来,这个是 关键字,保留字,用户不能再使用的名字! 而string是可以作 函数名的...阅读全文

关于golang的defer的练习

golang的defer怎么说。大意就是在函数return后。函数关闭前。按照filo的顺序来执行的关键字 上代码: package main import ( "fmt" ) func main() { // a() fmt.Println(c()) // b() // fmt.Println(d()) } func c() (i int) { defer func() { i++ }() defer fmt.Println("this:", i) return 1 } func a() { i := 0 defer fmt.Println(i) i = i + 1 } func b() { var whatever [5]struct{} for i := range whatever ...阅读全文

博文 2015-11-13 03:00:00 guhao123

【Leetcode】:242. Valid Anagram问题 in Go语言

Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = "anagram", t = "nagaram", return true. s = "rat", t = "car", return false. Note: You may assume the string contains only lowercase alphabets. Follow up: What if the inputs contain unicode characters? How would you adapt your solution to such case? 这个问...阅读全文

博文 2016-05-23 00:00:03 u013564276

5.Go by Example: For

Go by Example: For for is Go’s only looping construct. Here are three basic types of for loops. The most basic type, with a single condition. A classic initial/condition/after for loop. for without a condition will loop repeatedly until you break out of the loop or return from the enclosing function. package main import "fmt" func main() { i := 1 f...阅读全文

博文 2014-11-27 20:00:01 u013487968

在线安装 IntelliJ IDEA的 golang 插件

http://my.oschina.net/whutzl/blog/528712?p={{page}} IntelliJ IDEA是非常受欢迎的开发工具,如果我们希望使用IntelliJ IDEA 进行Go语言的开发,需要安装Golang插件。 网上的资料几乎都是建议开发者编译源码进行安装,但这是不必要的。还有更简单快捷的在线安装方式,这里给出基本步骤(基于IntelliJ IDEA 14.1,不同版本界面会有细微差异,但步骤相似): 1. 在“Settings”菜单,点击“Plugins”,打开插件管理窗口: 2. 点击“ Browse repositories”,打开插件仓库管理窗口: 3. 点击“Manage repositories...”,打开自定义仓库窗口: 4. 在URL中输入...阅读全文

博文 2016-08-19 05:00:02 u011686226

[翻译]编译器(4)-语言设计

文在此。另外推荐阅读王大师的“设计和开发 Yin 语言”,你会看到另一个完全不同的语言设计思路。 ————翻译分隔线———— 编译器(4)-语言设计 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 在第一部分概述了这一系列文章将介绍的内容。在第二、三部分粗略的浏览了计算机语言编译的各个步骤。 在本文中,将会比上几篇概述介绍的内容略微详细一些。我将讨论语言的规格说明书。 语言设计概述 我刚刚是不是说我将不再进行太多的概述?一转身,我就变成了一个卑鄙无耻的骗子。 为了让我们更快的进入编码阶段,我已经尽量简明扼要的进行介绍。同时我也希望明确一点,这是一个非常不完善的语言设计。计算机语言设计是一个你可以为之奋斗一生的话题。我无法为你提供在 Calc 用到的支撑设计的理论。我不会...阅读全文

博文 2014-10-09 16:20:29 mikespook

Go 接口

// xuhh_go_interface project main.go /* interface : 是一系列(一个或者多个)方法的合集,任何类型的方法合集(拥有相同函数名称、参数列表(不含参数名)、返回值) 只要包含与之对应的方法,则它就实现了该接口(意思就是可以进行赋值),无需另外添加声明。 1. 接口只有函数声明,没有函数的实现。接口后面一般已er结束 2. 接口中没有数据字段,而且接口可以嵌套,一种类型可以包含多个接口。 */ package main import ( "fmt" ) type IAdditioner interface { Addition() int } type IMultiplicationer interface { Multiplication() i...阅读全文

博文 2015-12-22 05:00:01 xuheazx

go语言中间的循环

在Go语言中只有很少的几个控制结构,它没有while或者do-while循环。 但是它有for、switch、if。而且switch接受像for那样可选的初始化语句。下面来认识一下他们 一、if语句 Go语言中的if像下面这个样子: if x > 0 { return y } else { return x } 一般不需要加圆括号,不过,如果你写上,也是没有问题的(亲测,写上圆括号也可以的~~)。比如: if (3>2) { fmt.Println("test if") }else if true { fmt.Println("test else if") }else{ fmt.Println("test else") } //输出 test if 二、switch语句 Go的switch非...阅读全文

博文 2016-06-13 14:00:01 zhangym