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

一个有关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

golang mysql 简单封装与使用

有时候真的没必要使用xorm, gorm这些重量级orm工具。 golang本来就有成熟的mysql库,相比node.js那些反人类又半吊子的mysql库,真的好太多了。 打开mysql import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) dbtemp, err := sql.Open("mysql", "root:password@/dbname?charset=utf8") db = dbtemp if err != nil { fmt.Println(err) } stmt, err := db.Prepare("create table if not exists dev(id int UNSIGNED AUTO_...阅读全文

博文 2015-08-13 09:00:02 dearplain

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

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

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

go-parser-语法分析

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

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

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

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

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

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 梦朝思夕

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的变量到底在堆还是栈中分配

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 - 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 中的 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中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基础] 局部变量初始化:=

一 基础用法 操作 := 只能用于方法内部, 声明并初始化新的变量 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

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 刘地

PHP 混合 Go 协程并发

想法很简单。通过设置 runtime.GOMAXPROCS(1) 让 golang 的进程变成单线程执行的。类似python用gevent的效果。然后通过调度多个协程实现异步I/O并发。php作为一个子函数跑在go的进程内,php需要yield到其他协程时,通过回调到golang函数来实现。从php里调用go提供的子函数时,go保证保存php的当前上下文。当协程执行权让渡回来的时候,把原来的php上下文恢复。关键的代码在: // 保存当前协程上的php上下文 oldServerCtx := engine.ServerContextGet() fmt.Println(oldServerCtx) defer engine.ServerContextSet(oldServerCtx) oldExe...阅读全文

博文 2016-10-28 17:00:01 jinpengxx8

从Maven,Gradle到Go

为什么要有依赖管理工具? 谈依赖管理之前,我们先谈谈为什么要有依赖管理工具这东西。 我们学了一种编程语言,然后写了个“Hello World”,然后宣称自己学了一门语言,这时候确实不需要关心依赖问题。 然而,当你要写一个稍微复杂点的应用,那怕就是留言板这样的,需要读写数据库,就需要依赖数据库驱动,就会遇到依赖管理的问题了。 再进一步,你写了一个库,想共享给别人使用,更需要了解依赖管理的问题。 当然,如果项目足够简单,你可以直接将依赖方的源码放置在自己的项目中,或者将依赖库的二进制文件(比如jar,dll)放置在项目的lib里。要提供给别人呢?把二进制包提供下载或者给别人传过去。依赖管理工具出现之前大多数都是这样搞的。 但如果再复杂些,依赖库本身也有依赖怎么弄呢?将依赖压缩打包,然后放个rea...阅读全文

使用 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 伯乐在线

可带癞子的通用麻将胡牌算法

笔者前段时间做过一款地方麻将游戏的后端,麻将游戏有个特点就是种类繁多,有的玩法木有癞子,有的玩法有4个癞子,有的甚至癞子数量更多,甚至有的有花牌(春夏秋冬等),有的红中可以代替宝牌,具体玩法笔者在此不介绍,做相关开发的自行研究玩法就好 查表法 笔者看过其它的算法思路,比如查表法,首先生成好麻将牌型的表存文件中,通过将牌型与文件中的牌型进行对比,此类算法,简单玩法效率也挺高 缺点: 是要提前生成好表文件,并且,由于麻将玩法种类繁多,对于复杂的玩法,表记录非常多,多达数百万条记录,虽然算法中有剪枝,但是效率仍然没有显著优势 表文件读入到内存中,长期占用大量内存 移植性弱,换一种玩法,就得重新生成表数据 在此笔者根据自己的经验总结出一种通用的麻将胡牌算法 思路 满足M x ABC + N x DD...阅读全文

博文 2017-09-05 14:34:48 tomorrowwu

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 中的标签

`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 Hook

简介 这篇文章主要是通过官方提供的 HTTP 追踪来学习使用 Hook 的编程思想。 在了解使用 Go 语言编写 Hook 之前,最好先掌握 Context 的用法, go 1.7 中 context 已经进入标准库 context,直接 import "context" 就可以使用。 在标准库 context.go 中, Context 定义为一个 interface{} 接口类型。 // A Context carries a deadline, a cancelation signal, and other values across // API boundaries. // // Context's methods may be called by multiple gorouti...阅读全文

博文 2017-09-22 13:05:12 juniway

Go语言 使用CGo进行优化

载自达达的博客 前阵子我利用cgo对游戏内存数据库的数据存储方式做了优化,减少了对象数量。但是程序放到线上环境后出现了段错误,直接导致进程退出,只好临时又把优化的部分去掉,去掉后程序又继续稳定运行了两周。 优化代码撤下来后,我重新整理了代码。整理下来,我觉得对含有字符串字段的表的优化逻辑太过复杂了,并且很难控制边界情况。 这里举个例子: type MyTable struct { Name string } func InsertMyTable(myTable MyTable) { nameLen := C.size_t(len(myTable.Name)) name := C.calloc(1, nameLen) C.memcpy(name, unsafe.Pointer((*reflec...阅读全文

博文 2014-10-27 10:00:01 abv123456789

Go1.6与JVM CMS的垃圾回收对比

自从Go1.5引入了真正的并发GC后, Go1.6进一步进行了优化,使得Go在上百G级的堆大小时依然能将STW时间控制在20ms以内: 而Java8的G1收集器,默认参数下在100G以上的heap下,会造成秒级的STW。虽然可以通过-XX:MaxGCPauseMillis调整,但是是以牺牲大量吞吐量为代价。这里浅析一下Go能做到比G1更短的STW的原因。 轮流挂起协程 JVM的CMS收集器在工作时,大致分为4个阶段: 初始标记 并发标记 重新标记 并发清除 其中1, 3 是需要STW的阶段,CMS的停顿也是由这2个阶段引发的。Go1.5中的CMS也分为这些阶段,其中1, 3同样需要STW。那为什么Go会停顿时间更少呢?原因是,Go的CMS在第3阶段并不是挂起所有goroutine,而是轮流挂...阅读全文

博文 2016-04-21 19:00:01 tracker_w

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

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语言流程控制,函数等

一、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 匹配后,不会再往后匹配,如果要向后匹配,添加语句...阅读全文

使用CGO进行GC优化的注意事项

前阵子我利用cgo对游戏内存数据库的数据存储方式做了优化,减少了对象数量。但是程序放到线上环境后出现了段错误,直接导致进程退出,只好临时又把优化的部分去掉,去掉后程序又继续稳定运行了两周。 优化代码撤下来后,我重新整理了代码。整理下来,我觉得对含有字符串字段的表的优化逻辑太过复杂了,并且很难控制边界情况。 这里举个例子: type MyTable struct { Name string } func InsertMyTable(myTable MyTable) { nameLen := C.size_t(len(myTable.Name)) name := C.calloc(1, nameLen) C.memcpy(name, unsafe.Pointer((*reflect.String...阅读全文

博文 2014-10-13 20:37:36 达达

Go 语言 与 C 语言 的比较学习

目录(?)[-] 关键字 操作符 变量 指针 函数 返回值 闭包 PO 编程规范 OO 并发 项目管理 对于MarkDown 编译器没有自动保存功能这件事情, 我表示严重的厌恶。 一个来小时的整理化为乌有,而且居然还不能导入到HTML编辑器, 真是无法忍受! 关键字 分类CGo 字符 char 无 字符串 无 string 浮点数 double , float float32 , float64 , complex64 , complex128 整数 int long short uint8 , uint16 , uint32 , uint64 , int8 , int16 , int32 , int64 , uint , int , uintptr , byte = uint8 , run...阅读全文

博文 2015-04-13 20:00:01 xuybin

google go 语言介绍(一)

翻译自golang.org 介绍 这是一篇为熟悉c或c++语言的开发人员提供的介绍go语言的基础教程。本文不是综合性的语言指南,而更接近于语言规范。在你阅读本教程后,你可以继续阅读“如何更有效率的编写Go程序”这篇文章,更深入的了解这门语言应该如何被使用。同时,这里还提供了一个Go语言的三天教程:第一天,第二天,第三天。 接下来将通过一系列适度的例子程序来展现这门语言的关键特性。所有的程序都存放在/doc/progs/目录中。 程序片断都标注了该片断在原始文件中的行号。为了代码的清晰,空白行将被保留。 Hello,World 让我们以一种常用的方式开始我们的教程: 05 package main 07 import fmt "fmt" // Package implementing form...阅读全文

博文 2014-10-04 19:26:20 fffvvvzz

Golang 包单例模式小记

学习golang也有一段时间了,但是对包的概念不是很清楚,这里模拟一个单例的实现 加深了对包的理解,包中变量作用域的使用 对包全局变量作用域有了理解 目录结构 mian方法 main.go package main import ( "log" "p/p1" _ "t" ) func main() { log.Print("-------下面是main-------") p1.Say() } 包 t t.go package t import ( "p/p1" ) func init() { a := p1.NewPeople() a.SetName("tttttttt") a.SetAge(188) p1.Say() } 包p/p1 p1.go package p1 import ( "l...阅读全文

博文 2016-05-14 10:00:00 soulsu

一:Go编程语言规范--块、声明、作用域

1.块 块为一对大括号括住的声明和语句。块 = "{" { 语句 ";" } "}" . 除显式源码块外,还有隐式块: 全域块 包含所有的Go源码文本。 每个包都有包含其所有Go源码文本的 包块。 每个文件都有包含其所有Go源码文本的 文件块。 每个 if、for 和switch 语句都被视为处于其自身的隐式块中。 每个 switch 或 select 语句中的子句其行为如同隐式块。 块可嵌套并会影响作用域。 2.标识符 标识符被用来命名程序实体,例如变量和类型。一个标识符由一个或多个字母和数字组成。 标识符的第一个字符必须是字母。 给定一个标识符集,若其中一个标识符不同于该集中的任一标识符,那么它就是唯一的。 若两个标识符拼写不同,或它们出现在不同的包中且未 导出,那么它们就是不同的。否则...阅读全文

博文 2015-09-28 03:00:06 cyzsoho

Google Guice

Guice (读作"juice")是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器。简介Java企业应用开发社区在连接对象方面花了很大功夫。你的Web应用如何访问中间层服务?你的服务如何连接到登录用户和事务管理器?关于这个问题你会发现很多通用的和特定的解决方案。有一些方案依赖于模式,另一些则使用框架。所有这些方案都会不同程度地引入一些难于测试或者程式化代码重复的问题。你马上就会看到,Guice 在这方面是全世界做得最好的:非常容易进行单元测试,最大程度的灵活性和可维护性,以及最少的代码重复。我们使用一个假想的、简单的例子来展示 Guice 优于其他一些你可能已经熟悉的经典方法的地方。下面的例子过于简单,尽管它展示了许多显而易见的优点,但其实它还远没有发挥出 Guice 的全...阅读全文

博文 2015-10-20 09:00:01 douxn

内部排序算法(Golang版本)

package main import ( "fmt" ) func main() { //保存需要排序的Slice arr := []int{9, 3, 4, 7, 2, 1, 0, 11, 12, 11, 13, 4, 7, 2, 1, 0, 11, 12, 11} //实际用于排序的Slice list := make([]int, len(arr)) copy(list, arr) BubbleSortX(list) fmt.Println("冒泡排序:\t", list) copy(list, arr) QuickSort(list, 0, len(arr)-1) fmt.Println("快速排序:\t", list) copy(list, arr) //将arr的数据覆盖到li...阅读全文

博文 2015-11-23 03:00:00 achst

Go:操作注册表

package main import ( "fmt" "log" "golang.org/x/sys/windows/registry" ) func main() { key, exists, err := registry.CreateKey(registry.CURRENT_USER, "SOFTWARE\\Hello Go", registry.ALL_ACCESS) if err != nil { log.Fatal(err) } defer key.Close() if exists { fmt.Println("键已存在") } else { fmt.Println("新建注册表键") } // 写入32位整形值 key.SetDWordValue("DWORD", 0xFF...阅读全文

博文 2016-09-21 01:00:00 aqtata

用 Go 语言理解 Tensorflow

文地址:Understanding Tensorflow using Go 原文作者:Paolo Galeone 译文出自:掘金翻译计划 译者:lsvih 校对者:whatbeg,yifili09 用 Go 语言理解 Tensorflow Tensorflow 并不是一个严格意义上的机器学习库,它是一个使用图来表示计算的通用计算库。它的核心功能由 C++ 实现,通过封装,能在各种不同的语言下运行。它的 Golang 版和 Python 版不同,Golang 版 Tensorflow 不仅能让你通过 Go 语言使用 Tensorflow,还能让你理解 Tensorflow 的底层实现。 封装 根据官方说明,Tensorflow 开发者发布了以下内容: C++ 源码:底层和高层的具体功能由 C ...阅读全文

博文 2017-12-09 04:01:13 掘金

Golang 中 defer 的五个坑 - 第二部分

本文承接[第一部分](https://studygolang.com/articles/12061)的内容继续讲解 defer 的一些常见陷阱 ## 1——Z 到 A(译注:倒序) 当你第一次学习 Go 的时候可能会中招。 例子 ```go func main() { for i := 0; i < 4; i++ { defer fmt.Print(i) } } ``` 输出 Go 的运行时会将延迟执行的函数保存至一个栈中(译注:意味着它们会按照入栈的顺序倒序执行)。想了解更多,请阅读这篇 [文章](https://blog.learngoprogramming.com/golang-defer-simplified-77d3b2b817ff#702e) [GCTT 出品的译文:图解 Go ...阅读全文

博文 2018-01-10 12:59:48 polaris

Golang算法实战之斗地主<一>

逢年过节,回到老家,玩的最多的就是打麻将、斗地主。今天要说的,就是这个经典游戏——斗地主。 一、斗地主牌面分析 斗地主需要多少张牌?大部分人都知道需要一副完整的牌即可,也就是54张牌。 2-10 黑桃、红桃、梅花、方片各4张。 J、Q、K、A 黑桃、红桃、梅花、方片各4张。 大小王各1张。 在斗地主中,牌的花色不影响。所以,在牌面比对时,不需要单独比对花色。而单张牌面值的大小顺序为: 大王>小王>2>A>K>Q>J>10……3 鉴于此,牌面的表达可以用以下方式来规定: A:黑桃 B:红桃 C:梅花 D:方片 扑克原始值 映射值 3-10 3-10数字 J 11 Q 12 K 13 A 14 2 15 小王 Q88 大王 K99 例如: A14----->黑桃A C9----->梅花9 二、如...阅读全文

博文 2018-11-07 06:34:34 皮卡丘pikaqiu

Less变量详解

  普通的变量   Css默认不支持变量,当我们使用less之后就可以使用。   其定义方式是 @变量名:值 ,如下,我们定义一个变量green,设置一个颜色green,然后将网页背景设置为绿色:   @green: #801f77;   header {   background: @green;   }   注意:由于变量只能定义一次,实际上他们就是“常量”   作为选择器和属性名   使用时将变量以@{变量名}的方式使用,使用例子如下:   作为选择器和属性名的变量   @kuandu:width;   .@{kuandu}{   @{kuandu}:150px   }   注意:这里的变量即使选...阅读全文

Go:操作注册表

package main import ( "fmt" "log" "golang.org/x/sys/windows/registry" ) func main() { key, exists, err := registry.CreateKey(registry.CURRENT_USER, "SOFTWARE\\Hello Go", registry.ALL_ACCESS) if err != nil { log.Fatal(err) } defer key.Close() if exists { fmt.Println("键已存在") } else { fmt.Println("新建注册表键") } // 写入32位整形值 key.SetDWordValue("DWORD", 0xFF...阅读全文

博文 2016-08-23 13:00:03 aqtata

Go 语言变量作用域

Go 语言变量作用域作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。Go 语言中变量可以在三个地方声明:函数内定义的变量称为局部变量函数外定义的变量称为全局变量函数定义中的变量称为形式参数接下来让我们具体了解局部变量、全局变量和形式参数。局部变量在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。以下实例中 main() 函数使用了局部变量 a, b, c:package main import "fmt" func main() { /* 声明局部变量 */ var a, b, c int /* 初始化参数 */ a = 10 b = 20 c = a + b fmt.Printf ("结果: a = %d, b = %d...阅读全文

博文 2016-03-05 06:00:00 u011225629

golang比较方便的地方

golang比较方便的地方 GO在自定义类型,数组,变量覆盖,函数变量等方面比较方便。 IsXXX GO中很方便在基本类型上定义新的类型,这个虽然是个小东西,但是有时候非常好用。 经常需要定义这样的函数,譬如RTMP的消息IsAudio,IsVideo等等。如果是C++就需要定义个结构体,然后加函数: class SrsCommonMessage { public: SrsMessageHeader header; }; class SrsMessageHeader { public: int8_t message_type; public: bool is_audio(); bool is_video(); }; #define RTMP_MSG_AudioMessage 8 // 0x0...阅读全文

博文 2015-11-27 17:00:01 winlinvip

译:go’s block and identifiers scope

go 代码块和标识符作用域 (go’s block and identifiersscope) 一、 Blocks A block is a possibly empty sequence of declarations andstatements within matching brace brackets. 语句块(blocks)由闭合的大括号包裹,里面可能包含空的声明或者语句;block与作用域密切相关,见下章节。 Block = "{" StatementList "}" . StatementList = { Statement ";" }. In addition to explicit blocks in the source code, thereare implicit b...阅读全文

博文 2014-10-16 09:00:00 hittata

学习Golang语言(5)

1、for Go 只有一种循环结构——`for` 循环。 基本的 for 循环除了没有了 `( )` 之外(甚至强制不能使用它们),看起来跟 C 或者 Java 中做的一样,而 `{ }` 是必须的。 2、for(续) 跟 C 或者 Java 中一样,可以让前置、后置语句为空。 3、for 是 Go 的 “while” 基于此可以省略分号:C 的 while 在 Go 中叫做 `for`。 4、死循环 如果省略了循环条件,循环就不会结束,因此可以用更简洁地形式表达死循环。 5、if if 语句除了没有了 `( )` 之外(甚至强制不能使用它们),看起来跟 C 或者 Java 中的一样,而 `{ }` 是必须的。 (耳熟吗?) 6、if 的便捷语句 跟 for 一样,`if` 语句可以在条件之...阅读全文

博文 2015-01-22 20:00:04 lz0426001

go - 流程控制

流程控制 条件: if else else if switch循环: for跳转: goto 关键字: break continue fallthrough range 1. 条件 1.1 if else 1.1.1语法: if [声明变量;] condition1 { //... [} else if condition2 {] //... [} else {] //... } 1.1.2 注意: a. []中的内容为可选,if 条件判断中可以声明变量 := b. {}是必须的, condition 不需要用()括起来, {必须与else/if在同一行代码中 c. 在有返回值函数中,不允许把“最终的” return 语句放到if else 结构中,否则编译出错 1.2 switch 就是多...阅读全文

博文 2014-10-17 15:00:00 chuangrain

基于 MySQL 的新一代分布式关系型数据库RadonDB

RadonDB 是青云(QingCloud)基于 MySQL 研发的新一代分布式关系型数据库,于 5 月 10 日开源。 RadonDB 不仅支持分布式事务,全面兼容 MySQL,还能够实现容量与性能无限水平扩展,具备金融级数据强一致性,满足企业级核心数据库对大容量、高并发、高可靠及高可用的苛刻要求。此外,还支持智能化自动分表、自动扩容及自动运维,大幅减轻数据库运维压力。 此次开源的 RadonDB 包括 Radon 和 Xenon 两个子项目,其中: Radon 即 RadonDB 的 SQL 层实现,具有分布式事务与无限可扩展的功能; Xenon 是存储层的高可用工具,使用 Raft 选举算法与 MySQL Binlog 并行复制技术,实现后端 MySQL 集群的金融...阅读全文