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

一个有关Golang变量作用域的坑

一个有关Golang变量作用域的坑 一 13 bigwhite技术志 Go, Golang, scope, 作用域, 函数, 变量作用域, 坑 4 Comments 临近下班前编写和调试一段Golang代码,但运行结果始终与期望不符,怪异的很,下班前依旧无果。代码Demo如下: //testpointer.go package main import ( "fmt" ) var p *int func foo() (*int, error) { var i int = 5 return &i, nil } func bar() { //use p fmt.Println(*p) } func main() { p, err := foo() if err != nil { fmt.Print...阅读全文

博文 2015-01-20 09:24:46 bigwhite

一个有关Golang变量作用域的坑

自:http://tonybai.com/2015/01/13/a-hole-about-variable-scope-in-golang/ 临近下班前编写和调试一段Golang代码,但运行结果始终与期望不符,怪异的很,下班前依旧无果。代码Demo如下: //testpointer.go package main import ( "fmt" ) var p *int func foo() (*int, error) { var i int = 5 return &i, nil } func bar() { //use p fmt.Println(*p) } func main() { p, err := foo() if err != nil { fmt.Println(err) retu...阅读全文

博文 2015-06-02 04:00:05 sevenyuan

golang变量作用域问题-避免使用全局变量

最近遇到了一个变量作用域的问题,一个比较低级的问题,可能作为一个熟手不应该犯这样的低级错误,但是golang的语法特点可能让你稍微不注意就踩坑,嘿嘿。 变量作用域 全局变量的作用域是整个包,局部变量的作用域是该变量所在的花括号内,这是一个很基础的问题。我们通常会使用golang的一个语法糖:=来给变量赋值,这种方式可以节省掉我们定义变量的代码,让代码变的更加简洁,但是如果你定义了一个全局变量,又不小心用:=来给它赋值,就会出现一些问题。 问题 看下面的代码,定义了一个全局变量t,我想在init()中给他赋值为2,然后在main中使用它。 var t int func init() { t, err := strconv.Atoi("2") if err != nil { log.Fatall...阅读全文

博文 2018-02-03 15:34:37 andyidea

03-Golang局部变量和全局变量

局部变量 在C语言中写在{}中或者函数中或者函数的形参, 就是局部变量 Go语言中的局部变量和C语言一样 全局变量 在C语言中写在函数外面的就是全局变量 Go语言中的全局变量和C语言一样 局部变量和全局变量的作用域 在C语言中局部变量的作用域是从定义的那一行开始, 直到遇到 } 结束或者遇到return为止 Go语言中局部变量的作用域和C语言一样 在C语言中全局变量的作用域是从定义的那一行开始, 直到文件末尾为止 Go语言中的全局变量, 只要定义了, 在定义之前和定义之后都可以使用 局部变量和全局变量的生命周期 在C语言中局部变量, 只有执行了才会分配存储空间, 只要离开作用域就会自动释放, C语言的局部变量存储在栈区 Go语言局部变量的生命周期和C语言一样 在C语言中全局变量, 只要程序一...阅读全文

博文 2018-10-07 16:34:39 箩篼

golang 接口interface{}、断言、switch type

interface{} 可以接受任何类型的对象值 获取interface{}队形的数据类型,可以使用断言,或者 switch type 来实现 // Assertion project main.go package main import ( "fmt" ) type Bag struct { Key string } type Bag2 struct { Key int } func main() { var b1 interface{} var b2 interface{} b1 = Bag{Key: "1"} b2 = Bag2{Key: 0} //获取interface{}中存放的数据类型 //方法一: { //判断是否是Bag类型 若不是则置0 b, ok := b1.(Bag)...阅读全文

博文 2016-03-03 16:00:01 xia_xing

Go 语言中你应该知道的关于 Package 的所有

*一个 Go 编程语言的包管理及应用的全面概述* 如果你对像 **Java** 或者 **NodeJS** 这样的语言熟悉,那么你可能对**包**(译者注:原文中 **packages** ,后文中将其全部译为中文出现在文章表述中)相当熟悉了。包不是什么其他的,而是一个有着许多代码文件的目录,它从单个引用点显示不同的变量(特征)。让我来解释一下,这是什么意思。 设想在某个项目上工作,你需要不断的修改超过一千个函数。这之中的一些函数有相同的行为。比如,`toUpperCase` 和 `toLowerCase` 函数转变 `字符串` 的大小写,因此你把它们写在了一个单独的文件(*可能*是 **case.go**)里。也有一些其他的函数对 `字符串` 数据类型做一些其他操作,因此你也把它们写在了独...阅读全文

博文 2018-12-08 10:00:08 yixiaoer

go语言初始化内部结构体3中方式

1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 type User struct { 8 Id int 9 Name string 10 Age int 11 } 12 13 type Manger struct { 14 User 15 title string 16 } 17 18 func main() { 19 m := Manger{User:User{1, "ok", 12}, title:"123"} //可以 20 m2 := Manger{User{1, "ok", 12}, "123"} //可以 21 m3 := Manger{User:User{Id:1, Name:"ok", Age:12}, title:"123"} //可...阅读全文

博文 2015-05-14 03:00:00 or2-

go-parser-语法分析

每一种语言都会有一个定义良好的语法结构.函数是由申明和语句构成的,而语句又是由表达式构成的.经常用来描述语法的是BNF[1].Go使用的是相应的变种,在Go的官方文档中有很详细的spec描述[2].一门语言的设计其实就在这份描述当中,这是一门语言的语法和规则的定义,是表面程序员可以接触到的部分,而运行时却可以改变,这相当于和程序员约定的接口,只要按照这个接口编写源代码,就能产生正常可以编译的二进制文件,但是最后的二进制文件如何运行,对于每条语法转换成了什么,有什么优化都是编译器优化和运行时的工作.所以一门语言必须有一个详尽的描述,这和一个网络协议一样,是非常重要的部分. 语法分析器也是有工具可以自动生成的,比如yacc[3].我在之前提到过使用工具的利弊,就不赘述了. 本文主要看一下Go的语...阅读全文

博文 2016-04-12 10:32:40 yueyue.gao

Golang面试题解析(二)

12.是否可以编译通过?如果通过,输出什么? func main() { i := GetValue() switch i.(type) { case int: println("int") case string: println("string") case interface{}: println("interface") default: println("unknown") } } func GetValue() int { return 1 } 解析 考点:type 编译失败,因为type只能使用在interface 13.下面函数有什么问题? func funcMui(x,y int)(sum int,error){ return x+y,nil } 解析 考点:函数返回值命名...阅读全文

博文 2017-08-24 12:33:17 梦朝思夕

Go语言流程控制语句if、goto、for、switch

最近在看go语言,虽然网上大多数的评论都是在吐槽go语言,但是我喜欢简单的东西,我不拿它和任何语言去比,去用每一种语言完全是自己兴趣问题。 还没开始就跑题了 ~~!回到标题上来,golang的流程控制,刚开始学go,记性一直都不怎么好,做个笔记 流程控制包含三大类:条件判断、循环控制和无条件跳转。 if go语言的if package main import ( "fmt" ) func main() { if a := 8; a > 2 { fmt.Println("a 比 10 大") } else { fmt.Println("a 比 10 小") } } 输出 a 比 2 大 if语句允许在if里面声明变量,但是这个变量的作用域只在该条件逻辑块内。 goto package main...阅读全文

博文 2014-10-06 06:16:32 guhao022

AI人才市场两重天:推荐算法涨到3万,算法工程师降薪9%

作者 | 机器之能 来源 | 机器之心 1024刚落幕,码农们得以欢度属于自己的节日,备受瞩目。作为互联网公司中最为核心与主流的群体,程序员的地位不容忽视。 尤其在最近两年,随着 “互联网+”、“云计算”“人工智能”等产业的迅速发展,程序员成为一线城市和各大巨头公司“抢人大战”的发力人群。 最近,《2019前三季度新一线城市技术人才洞察》报告出炉,围绕技术人才招聘薪资、人才需求和城市喜好等方面,详细解读了技术人才流动趋势。 2019年三季度人才需求同比增长19.9%,环比增长28.8%。 国家统计局10月18日最新数据显示,2019年前三季度,全国城镇新增就业1097万个,其中三季度城镇新增就业360万个,环比下降12.8%。 人才需求结构调整,一年以内工作经验的新增需求骤降,三年以上经验⼈...阅读全文

博文 2019-10-29 14:32:52 aside section._1OhGeD

Go语言for```range方法遍历map,遍历打印值与map实际存储值不同

> 今天编写了map结构数据存储程序,map的key总数:22046个,通过for```range方法遍历map发现,遍历打印的结果与实际存储内容不符,主要是存储结果数量和值正确,打印出来的值少了。 - 以下是打印结果 ```go keys:0xE7A0 values:0x942E keys:0xE9E6 values:0x6B92 keys:0xF5F2 values:0x8E9C keys:0xF7F0 values:0x9EDF ======================= 以上使用range遍历结果 ==================== 获取0xFE4E值:0xFA28 总数:22046 ``` - 以下是存储数据结构示意 ...阅读全文

Go的变量到底在堆还是栈中分配

Go的变量到底在堆还是栈中分配 2015-10-22 最近试着优化掉一些小对象分配,发现一个很诡异的问题:这段代码会在堆上分配对象! package main import ( "fmt" ) func main() { var a [1]int c := a[:] fmt.Println(c) } 看汇编代码 go tool compile -S test.golang "".main t=1 size=336 value=0 args=0x0 locals=0x98 0x0000 00000 (test.go:7) TEXT "".main(SB), $152-0 0x0000 00000 (test.go:7) MOVQ (TLS), CX 0x0009 00009 (test.go:...阅读全文

博文 2016-07-20 13:27:37 zenlife

《Go语言编程入门》视频课程开课了

作为拥有多年工作经验的运维老鸟,我没有选择运维常用的Python作为我今后的主要使用语言。Python编写运维程序的开发效率虽然很高,但随着代码量的增大,以及Python的缩进式语法结构,可读性和维护性并不很高。加之Python本身的设计,并不原生支持多线程多核,我考虑到当程序代码达到一定规模时,必然会考虑它的执行效率和维护成本。最终放弃了Python,选择语言的过程中被Google新出的Go语言吸引了。Go本身脱胎于C,语法和C比较像,我本身就一直学习和编写C和PHP程序,习惯了大括号的语法结构。同时Go吸收了其它各种语言的优秀特性,在各种特性之间做了折衷。加之原生支持多核多线程,执行效率几近于C。加之Go的标准库,以及市面主流的应用软件方面,比如MySQL、Redis等等函数库都已稳定,...阅读全文

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

golang中struct关于反射tag

package main import ( "fmt" "reflect" ) type User struct { name string `json:name-field` age int } func main() { user := &User{"John Doe The Fourth", 20} field, ok := reflect.TypeOf(user).Elem().FieldByName("name") if !ok { panic("Field not found") } fmt.Println(getStructTag(field)) } func getStructTag(f reflect.StructField) string { return string(...阅读全文

博文 2015-06-17 20:03:06 paladinosment

Golang: 条件和循环

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chao2016/article/details/81530195 条件、循环要点 for, if后面的条件没有括号 if条件里也可以定义变量 没有while switch不需要break,也可以直接switch多个条件 1. branch.go: package main import ( "io/ioutil" "fmt" ) // switch会自动break,除非使用fallthrough;可以swich多条件;panic()报错让程序终止 func grade(score int) string { g := "" switch { case score < 0 || score > ...阅读全文

博文 2019-01-16 18:31:35 chao2016

Go 中的 import 声明

Go 中的程序由各种包组成。通常,包依赖于其它包,这些包内置于标准库或者第三方。包首先需要被导入才能使用包中的导出标识符。这是通过结构体调用 *import 声明* 来实现的: ```go package main import ( "fmt" "math" ) func main() { fmt.Println(math.Exp2(10)) // 1024 } ``` 上面我们有一个 import 导入的例子,其中包含了两行导入声明。每行声明定义了单个包的导入。 > 命名为 **main** 的包,是用来创建可执行的二进制文件。程序的执行是从包 **main** 开始,通过调用包中也叫做 **main** 的函数开始。 但是,还有其它一些鲜为人知的导入用法,这些用法在各种场景下都很实用: ...阅读全文

博文 2018-09-27 23:10:35 polaris

Golang-btree包的主要方法和总结

B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称 本篇介绍google的btree使用, 地址:http://github.com/google/btree 树的结构必须实现排序的规则 import ( "github.com/google/btree" ) type MyTree struct { Age int Name string } func (m *MyTree) Less(item btree.Item) bool { return m.Age < (item.(*MyTree)).Age } 创建树 btree.New(degree int)...阅读全文

博文 2020-03-03 15:33:21 八叉树

Golang实现红黑树

盼望已久的五一终于到来了!我一直在考虑要不要利用这几天时间好好睡上一觉,习惯成自然,宅也是如此。睡觉都觉得无聊的时候,就有了写点什么的念头。也借此机会提高一下写作能力,看看什么时候能写一部长篇小说。 用Golang实现红黑树算是一次尝试,毕竟工作环境没用到,不知道以后会不会用。自己也是看着玩,开阔一下思路。从我开始看Golang的doc到写这篇文章利用的是大概2周中的业余时间,所以Golang的语法掌握的还有欠缺;很多特性,例如高并发等都还没有测试,如文中出现错误或不合理的地方,请指正。 本文应用的基本逻辑参考自wiki的红黑树,依据golang的语言特性部分结构可能稍有改动。同时这篇文章里也加入了我在实现过程中的想法和实现时可能会遇到的问题。wiki上的红黑树中文版本,不过建议直接看英文版...阅读全文

博文 2016-05-03 14:00:03 happywjh666

go的变量作用域

go的变量作用域是花括号确定的,任一变量的作用域只在自身所处的花括号范围内 if, for等可以有初始化表达式的,其作用域还要高于其后的花括号一层 package main func main() { x:=1 println(x) for x:=3;;{ print(x," ") break } println(x) if x:=5; true { print(x," ") } println(x) for { x:=7 print(x," ") break } println(x) if true { x:=9 print(x," ") } println(x) if x:=2; true { print(x," ") x:="abc" print(x," ") } println(x)...阅读全文

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

Trie树

Trie树,又称字典树,前缀树,是一种很常用的树结构,它被广泛用于各个方面,比如字符串检索、中文分词、求字符串最长公共前缀和字典排序等等。 字典树设计的核心思想是空间换时间,所以数据结构本身比较消耗空间。但它利用了字符串的共同前缀(Common Prefix)作为存储依据,以此来节省存储空间,并加速搜索时间。Trie 的字符串搜索时间复杂度为 O(m),m 为最长的字符串的长度,其查询性能与集合中的字符串的数量无关。其在搜索字符串时表现出的高效,使得特别适用于构建文本搜索和词频统计等应用 字典树的性质 根节点(Root)不包含字符,除根节点外的每一个节点都仅包含一个字符; 从根节点到某一节点路径上所经过的字符连接起来,即为该节点对应的字符串; 任意节点的所有子节点所包含的字符都不相同; 下图...阅读全文

博文 2019-05-22 17:34:48 helloGlobal

Go - http.Client源码分析

1. 起因 分析http.Client源码实现的起因, 是因为在使用如下步骤模拟网站登录时, 出现了问题, 参考知乎 - go net/http.Client 处理redirect: POST账号密码等参数进行登录 下发token, 此token通过cookie下发 重定向到主页/ 在通过http.Post进行请求, 预期不进行重定向, 能够直接获取到cookie值, 但实际上go帮我们处理了重定向, 丢失了cookie值 分析源码后, 可以很轻易地解决这个问题: // 请求http.calabash.top将被301重定向到https myClient := http.Client{ CheckRedirect: func(req *http.Request, via []*http.Re...阅读全文

博文 2019-08-23 16:34:38 hsabalaaaC

使用 Go 语言来理解 Tensorflow

文出处: P. Galeone 译文出处:雁惊寒 译者注:本文通过一个简单的Go绑定实例,让读者一步一步地学习到Tensorflow有关ID、作用域、类型等方面的知识。以下是译文。 Tensorflow并不是机器学习方面专用的库,而是一个使用图来表示计算的通用计算库。它的核心是用C++实现的,并且还有不同语言的绑定。Go语言绑定是一个非常有用的工具,它与Python绑定不同,用户不仅可以通过Go语言使用Tensorflow,还可以了解Tensorflow的底层实现。 绑定 Tensorflow的开发者正式发布了: C++源代码:真正的Tensorflow核心,实现了具体的高级和低级操作。 Python绑定和Python库:这个绑定是由C++实现自动生成的,这样我们可以使用Python来调用C...阅读全文

博文 2017-07-22 06:02:53 伯乐在线

Go 中的标签

`Label` 在 `break` 和 `continue` 语句中是可选参数,而在 `goto` 语句中是必传的参数。`Label` 只在声明它的函数中有效。只要函数中声明了 `Label` ,那它在该函数的整个作用域都有效。 ```go func main() { fmt.Println(1) goto End fmt.Println(2) End: fmt.Println(3) } ``` (注意!我们是在 goto 语句之后定义的 `Label`) ```shell > ./bin/sandbox 1 3 ``` 这里所指的作用域不包括嵌套函数的作用域: ```go func() { fmt.Println(“Nested function”) goto End }() End: `...阅读全文

博文 2018-05-06 22:11:44 saberuster

[golang基础] 局部变量初始化:=

一 基础用法 操作 := 只能用于方法内部, 声明并初始化新的变量 v := 3 但是不能用于已声明变量赋值, 下面的做法编译器会报错误"no new variables on left side of :=" var v int = 0 v := 1 通过错误可以了解到, := 操作左边必须要有新变量, 那么多个变量初始化只需要满足左边至少有一个新变量即可 err := errors.New("error1") ret, err := test_fun() 这种做法是合法的, 因为ret是新变量, 这样就很方便了, 因为go方法经常会返回错误err, 那么在同一个方法内 只需要声明一个err变量即可 二 :=陷阱 由于:=只能用于局部变量, 那么下面的代码会发生什么情况呢? var out...阅读全文

博文 2015-03-01 03:00:01 thinear

【腾讯云】招Golang!30K-60K!

高级后台开发工程师(golang)工作职责: 1.本科及以上学历,计算机相关专业; 2.负责云小程序云开发产品的后台开发; 3.负责开发平台业务的开发和维护; 负责部门相关业务的后台开发及维护。工作要求: 1.Unix/Linux下 Golang的开发经验; 2.熟悉Unix/Linux操作系统原理、常用工具; 3.全面并且扎实的软件知识结构(操作系统、软件工程、设计模式、数据结构、数据库系统、网络安全); 4.具备良好的分析解决问题能力,能独立承担任务和有系统进度把控能力; 5.好学、责任心强、思维缜密敏捷、良好的对外沟通和团队协作能力; 6.有海量系统开发经验优先考虑。团队:小程序云开发(给小程序开发者提供一套云的开发者语言)具体请戳: Wechat:13723737494Email:S...阅读全文

Go 语言的 CMS 工具库 Qor

Qor 是基于 Golang 开发的的CMS 一系列工具库,基于 Qor可以快速搭建网站的后台管理系统。 Qor 的工作库包含: 1,后台管理:可以对数据库进去 CURD 管理,支持一对一,一对多,多对多关联关系维护等等 2,支持上传图片到云以及 filesystem,resize、crop 图片等等 3,Publish 发布系统,可以修改数据,并且经过检查后,再发布到正式环境中 4,状态机,可以用于开发工作流的系统 5,I18n,翻译,可以通过在 WEB 界面翻译,并将翻译保存到数据库中 6,L10n,本地化,不同于翻译,他可以针对某个地区来对内容,或者数据结构进行本地化。 7,Roles,权限管理 8,Exchange,通过 Excel,CSV 导入导出数据 9,Wo...阅读全文

开源游戏服务器框架汇总(2019-11-20)

有哪些开源游戏服务器框架,值得学习呢。基于node.js 、java、C#、golang 、c++、python 等技术栈有各种各样的游戏框架。 本文收集一些比较常用的 github上star和fork有一定数量的较为完整的框架 skynet 云风大神的框架这个基本上使用很多的, c+lua的框架。 skynet只能算是网络层的轮子但是因为其众多的用户还是很不错的 https://github.com/cloudwu/skynet A lightweight online game framework 使用此引擎开发的游戏众多,很多棋牌小企业在用,简悦的陌陌争霸、食物战争等等很多产品 pomelo 网易开源的框架,支持分布式, 周边完善 一个用于Node.js的快速,可扩展的分布式游戏服务器...阅读全文

Go 解析XML

今天看了看XML的解析,挺别致的和C++,Java之类的解析很是不同。 GO中将XMl的结构解析成一个数据结构,类似于一个结构体。 package main import ( "encoding/xml" "fmt" "os" ) type Address struct { City, State string } type Person struct { XMLName xml.Name `xml:"person"` Id int `xml:"id,attr"` FirstName string `xml:"name>first"` LastName string `xml:"name>last"` Age int `xml:"age"` Height float32 `xml:"heig...阅读全文

博文 2016-01-15 17:00:03 king1076

GO函数的使用

熟悉Go函数的语法结构 因为GO没有类的概念,所以使用结构体来模拟。代码中的函数分别计算两个整数的平方根和取数值的绝对值。 package main import ( "fmt" "math" ) type MyFloat float64 type Vertex struct { X, Y float64 } //Vertex指针对应的Abs方法 func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } //MyFloat结构体对应的Abs方法 func (f MyFloat) Abs() float64 { if f < 0 { return float64(-f) } return float64(f) ...阅读全文

博文 2016-04-17 00:00:01 genispan

go的Type switch是一个switch语句么?

相信这样的语句在go中大家见的很多 switch t := arg.(type) { default: fmt.Printf("unexpected type %T\n", t) // %T prints whatever type t has case bool: fmt.Printf("boolean %t\n", t) // t has type bool case int: fmt.Printf("integer %d\n", t) // t has type int case *bool: fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool case *int: fmt.Printf("pointer to i...阅读全文

博文 2015-12-15 21:00:07 baizx

GO語言基礎教程:流程控制

在開始一個新的章節之前先來回顧上一篇文章的部份,首先我們來看這段代碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "fmt" ) func main(){ var x,y int=1,2 { var x int=2 { var x int=3 fmt.Println(x,y) //首先輸出3,2 如果我把這行輸出語句注解掉,大家猜猜會如何? } fmt.Println(x,y) //其次輸出2,2 } fmt.Println(x,y) //最後輸出1,2 } 執行結果我已經加到註釋內了,其實沒必要好奇,GO語言就是如此,這種突然出現的大括號構成了複合語句,大括號內的變量作用範圍只能在變量內部,這就涉及到變量的作用...阅读全文

go语言流程控制,函数等

一、if语句 if 语句没有圆括号,而必需要有花括号跟条件和 else在同一行 例: if myVar > 1 { myVar = 1 myVar1++ return } else { myVar = 3 myVar1-- return } if的条件中可以添加一句初始化语句,用”;” 分隔 if c:=1;myVar > 1 { myVar = 1 } 此变量c的作用域是在后面的{}内的。外面是不可见,同时如果不在后面使用也是会编译错误的。 [it招聘][1] 二、switch语句 跟一般语言不一样 case 匹配后,不会再往后匹配,如果要向后匹配,添加语句...阅读全文

go语言的hashmap

go语言中map的数据结构,以下只摘取了关键的几个属性: struct Bucket { uint8 tophash[BUCKETSIZE]; // top 8 bits of hash of each entry (0 = empty) Bucket *overflow; // overflow bucket, if any byte data[1]; // BUCKETSIZE keys followed by BUCKETSIZE values }; struct Hmap { uint8 B; // log_2 of # of buckets (can hold up to LOAD * 2^B items) byte *buckets; // array of 2^B Bucket...阅读全文

博文 2015-05-18 03:00:01 richmonkey

Go 实现常见数据结构

1. [二叉搜索树](https://flaviocopes.com/golang-data-structure-binary-search-tree) 2. [字典](https://flaviocopes.com/golang-data-structure-dictionary) 3. [图](https://flaviocopes.com/golang-data-structure-graph) 4. [哈希表](https://flaviocopes.com/golang-data-structure-hashtable) 5. [链表](https://flaviocopes.com/golang-data-structure-linked-list) 6. [队列](h...阅读全文

Go 多返回值

Go语言革命性地在静态开发语言阵营中率先提供了多返回值功能。这个特性让开发者可以从原来用各种比较别扭的方式返回多个值的痛苦中解脱出来,既不用再区分参数列表中哪几个用于输入,哪几个用于输出,也不用再只为了返回多个值而专门定义一个数据结构。 package main import "fmt" func vals() (int, int) { return 3, 7 } func main() { a, b := vals() fmt.Println(a) fmt.Println(b) _, c := vals() fmt.Println(c) } 123456789101112131415 package mainimport "fmt" func vals() (int, int) { ret...阅读全文

《Go语言编程入门》视频课程打折优惠了

作为拥有多年工作经验的运维老鸟,我没有选择运维常用的Python作为我今后的主要使用语言。Python编写运维程序的开发效率虽然很高,但随着代码量的增大,以及Python的缩进式语法结构,可读性和维护性并不很高。加之Python本身的设计,并不原生支持多线程多核,我考虑到当程序代码达到一定规模时,必然会考虑它的执行效率和维护成本。最终放弃了Python,选择语言的过程中被Google新出的Go语言吸引了。Go本身脱胎于C,语法和C比较像,我本身就一直学习和编写C和PHP程序,习惯了大括号的语法结构。同时Go吸收了其它各种语言的优秀特性,在各种特性之间做了折衷。加之原生支持多核多线程,执行效率几近于C。加之Go的标准库,以及市面主流的应用软件方面,比如MySQL、Redis等等函数库都已稳定,...阅读全文

golang的反射机制

go反射 什么是反射?使用反射可以实现什么功能? 反射提供了一种可以操作任意类型数据结构的能力。通过反射你可以实现对任意类型的深度复制,可以对任意类型执行自定义的操作。另外由于golang可以给结构体定义tag熟悉,结合反射,于是就可以实现结构体与数据库表、结构体与json对象之间的相互转换。 使用反射需要注意什么事情? 使用反射时需要先确定要操作的值是否是期望的类型,是否是可以进行“赋值”操作的,否则reflect包将会毫不留情的产生一个panic。 struct initializer示例 go-struct-initializer 是我在学习golang反射过程中实现的一个可以根据struct tag初始化结构体的go library,这里对其中用到的反射技术做一下说明 package...阅读全文

博文 2016-10-04 05:00:03 ylwh8679

Go语言5大基本数据类型解析

/*码农网底部横幅*/ var cpro_id = "u1635067"; Go语言目前也比较热门,本文主要来讨论一下Go语言的5大基本数据类型以及其使用方法。Go语言的基本数据类型包括注释、标识符、常量、变量以及布尔值,下面我们逐一来对这些数据类型进行分析。 1、注释(与C++一样) 行注释://块注释:/* …*/ 2、标识符 可以这么说,除了数字开头的不允许,符号开头的不允许,关键字不允许,其他的Unicode字符组合都可以。“_33”也可以是标识符、“我们”也可以是标识符。标识符也区分大小写。 (1)、以大写字母开头的标识符是公开的。(这个很有意思) (2)、其他任何标识符都是私有的。 (3)、空标识符“_”是一个占位符,用于赋值操作的时候,丢弃、忽略某个值。通常这样用: go的方法...阅读全文

博文 2015-03-11 14:12:24 codeceo

golang数据结构之List

golang数据结构之List,实际中用得很少,这里只做研究。 package main import ( "container/list" "github.com/sanity-io/litter" ) type Thing struct { Id int Info string } // golang 双向链表结构 func main() { doubleList := list.New() doubleList.PushBack(&Thing{Id:1, Info:"hello"}) doubleList.PushBack(&Thing{Id:2, Info:"list"}) doubleList.PushBack(&Thing{Id:3, Info:"!"}) //for e := ...阅读全文

博文 2018-08-10 12:30:02 LittleLee

[golang]自己动手实现ini文件读取

最近迷恋go语言,但我是个编程菜鸟,这个读取参考了beego的config,只是半成品,不过能够正常运行。 接口的设计 type Parser interface { Parse() error } type Config interface { GetString(string)string Parser } 目前只支持最小操作,解析和获取。在读取之前,要让config实例化一个对象: var config Config func RegisterConfig(mode,path string){ switch mode{ case "ini": config=ini.NewIniConfig(path) case "json": case "xml": default: panic("D...阅读全文

博文 2015-06-19 23:00:29 cb741044015

go语言 golang defer 关注点

大家都了解C++有构造函数和析构函数,加之每一个栈对象都有其严格的作用或,离开则自动调用其析构函数,以此来保证释放其掌控的资源,如:内存,文件,socket,数据库链接等, 其它一些语言提供类似的机制,如: init, deinit等, 那么对于追求大道至简的golang, 她没有提供构造函数和析构函数的概念, 但是她也不可避免要处理资源的自动释放问题, 所以其提供了defer, 如: defer f() 用于延迟调用f(), 当此语句所在函数执行完(return执行完)后,开始以“后进先出”的顺序执行defer语句。但是defer不是一定会被执行的,我简单归总了一下,怕我以后忘记, 见测试代码: package main import ( "fmt" //"log" //"os" ) fu...阅读全文

博文 2016-03-06 14:00:00 htyu_0203_39

go中接口与继承的选择

Go语言中没有继承,但是可以用结构体嵌入实现继承,还有接口这个东西。现在问题来了:什么场景下应该用继承,什么场景下应该用接口。 问题描述 这里从一个实际的案例出发。网游服务器中的一个例子。假设每个实体都有一个ObjectID,packet中都有使用到这个ObjectID,客户端与服务端之间通过这个ObjectID知道是一个什么实体。用面向对象的观点,就是有一个Object对象,里面有getObjectID()方法,所有对象都是继承自Object对象。 Creature继承Object,表示游戏中的生物。然后像Monster,NPC,都继承自Creature的。玩家分为三个种族,Slayer/Vampire/Ouster三个不同的类实现,继承自Creature。 Item也继承自Object,...阅读全文

博文 2017-06-01 02:03:26 徐学良