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

go的语言特性总结

Go的语言特性总结 写在前面: 近来关于对Golang的讨论有很多,七牛的几个大牛们也断定Go语言在未来将会快速发展,并且很可能会取代Java成为互联网时代最受欢迎的编程语言。Go语言是google推出的编程语言,在已经成功的给世人创造了改变人们生活的操作系统之后,google似乎感觉有必要再为世人带来一款强大的编程语言,而Go语言依靠自己众多友好的特性也不负众望正在被开发者接触,我有幸在学习高性能并发编程的时候认识了Go语言,在了解了Go的一些特性之后决定系统的学习一番。我发现关于Go的学习资料并不多,以至于我需要自己写一些东西。这里的内容大多来自七牛团队的《Go语言编程》一书。这里也会按照书中组织的章节进行学习。当然如果一些知识点事互联网上已经有的,这里直接进行转载了。 -Written...阅读全文

博文 2016-03-13 22:00:02 qq_15437667

[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中如何模拟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 基础(5)函数的返回值

square-gopher.png 在 go 语言中函数支持多个返回值 func div(a, b int) (int, int){ return a /b , a %b } 我们也可以给函数返回值打上标签 q, r func div(a, b int) (q,r int){ return a /b , a %b } 我们可以用两个变量来接受函数返回值 a, b := div(17,3) 如果我们只想使用一个返回值,也就是 a 而不使用 b,向下面这样做会在编译时报错,go 语言是比较严格语言 strict-inspection.jpg a, b := div(17,3) fmt.Println(a) 应该修改为,通过 _ 占位符来忽略掉不使用的变量 a, _ := div(17,3) fm...阅读全文

golang 调用 c++ DLL 如何获取 dll 返回的 string 类型值

我用 golang 调用 c++ dll,调用成功,传值成功(代码省略其他无用的,仅细节代码): ``` inst := syscall.MustLoadDLL("test.dll"); some_func := inst.MustFindProc("test_function"); s1: = "aaa" // 传递参数给 c++ dll s2:= "bbb" // 传递参数给 c++ dll s3:="" // 我希望从这个参数得到返回值 some_func.Call( uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s1), uintptr(u...阅读全文

gossdb终于可以全速前进了

用了一周的时间才最终找到了一个会在大并发(并发1000,mbp普通本)下可能会发生的空指针问题,现在经过多次测试,终于可以关闭这个bug了。哈哈,高兴啊。 现在的gossdb已经相对成熟了,而且用的人也越来越多了,希望在这里介绍给大家,如果有人用ssdb,不妨尝试一下,会有惊喜的。 下面简单的介绍一下gossdb https://github.com/seefan/gossdb 功能列表 1. 继承官方连接方式。已支持超过40个官方命令。 2. 支持连接池。 3. 已支持 set 相关方法 4. 已支持 hashmap 相关方法 5. 已支持 queue 相关方法 6. 已支持返回值类型转换,可以方便的把从ssdb中取到的内容转化为指定类型。 连接池已支...阅读全文

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非常的像。比如这段代码: ``...阅读全文

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...阅读全文

Go语言接口开发——不确定JSON数据结构的解析

在公司主要做接口的开发,会经常遇到接口对接的情况。有的时候,同一个请求返回的JSON数据格式并不一样。如果是正常,则可能只返回一个status字段,说明正常;如果中间出错,除了在status字段里面说明错误类型,还会通过error_message附带错误详细信息。比如要给用户加积分,如果加分失败,还会附带用户id等信息。那么,请求一个接口可能的返回值就是不确定的。 我最初就是定义两个结构体,我处理的数据都共有一个字段status,如果能够解析并且status表示操作成功,那么用封装成功内容的结构体解析;否则,用封装失败的结构体解析。这就是传说中的DIRTY HACK。。。 后来,偶然发现封装正确的结构体也会解析错误的字符串,当然,只会解析共有字段。那么,这个问题就好解决多了。把两个结构体放到...阅读全文

fmt包的Println,Printf和Sprintf的区别

fmt包实现了格式化的I/O,其功能类似于C的printf和scanf。这是官网给出的解释。 **Println:** 1. 用默认的类型格式显示方式将传入的参数写入到标准输出里面(即在终端中有显示), 2. 多个传入参数之间使用空格分隔, 3. 在显示的最后追加换行符, 4. 返回值为 写入标准输出的字节数和写入过程中遇到的问题。 **Printf:** 1. 用传入的格式化规则符将传入的变量写入到标准输出里面(即在终端中有显示), 2. 返回值为 写入标准输出的字节数和写入过程中遇到的问题。 **Sprintf:** 1. 用传入的格式化规则符将传入的变量格式化,(终端中不会有显示) 2. 返回为 格式化后的字符串。 ``` go testStr := []byte("test str"...阅读全文

博文 2018-11-08 09:49:02 lijingtian

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

[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语言学习笔记(一)

每个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

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 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 吃一堑消化不良

系统调用在 Golang 中的实践-syscall.Mmap()

在看一些其它语言实现的基础工具时,时而发现其中有我们需要的某项特殊功能。究其源码,一般会看到两种底层实现:汇编、系统调用。这里的系统调用就是我们今天的主角了。 系统调用 image.png 系统调用在操作系统中占有重要的地位,是内核对外交互的门户,为我们提供了与底层资源交互的相对简单、安全的方式,给我们提供了一种在用户态、内核态切换的手段。 我们写的程序,通常是跑在用户态的,它对应 CPU 的 Ring 3 保护级别,而内核运行在 Ring 0 级别,拥有更高的权限。相应的,内核的代码可以运行一些用户态代码无法运行的 CPU 特权指令,实现一些用户态的代码做不到的事情,比如:控制进程的运行,使用驱动操作机器上的硬件。内核将部分自己实现的功能进行封装, 形成相对统一、方便的接口给我们进行调用,...阅读全文

博文 2018-08-07 01:34:52 豆瓣奶茶

Golang九大特性

强类型静态编译型语言。 更丰富的内置类型 函数多返回值 在C中如果想返回多个值,通常会在调用函数中分配返回值的空间,并将返回值的指针传给被调函数。Go的做法是在传入的参数之上留了两个空位,被调者直接将返回值放在这两空位。Go是使用栈空间来返回值的。而常见的C语言是通过寄存器来返回值的。 错误处理 defer、panic、recover 匿名函数和闭包 Go中的函数也可以作为参数进行传递,拥有函数名的函数只能在包级语法块中被声明,而闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量以及它们引用的对象没有被释放)为自由变量提供绑定的计算环境(作用域)。 类...阅读全文

博文 2018-08-21 16:35:18 Sequin小红九

Go 语言的错误处理

Go 语言的错误处理是基于明确的目的而设计的。你应该从函数中返回所有可能的错误,并且检查/处理这些返回值。和其他语言相比,这一点可能看起来有些繁琐和不人性化,其实并不是这样的。让我们来看看一些基本的例子,然后继续做一些较重要的事情。 ## Non 错误 实际上 Go 有个概念 non-error。这是一个语言特性,不能用在用户自定义函数中。最明显的例子就是从 map 中通过 key 获取值。 ```go if val, ok := data["key"]; ok { // key/value 在 map 中存在 } ``` 当尝试获取指定 key 的值的时候,会返回一个可选的第二个值,是一个 boolean 类型表示获取的值是否存在。 ```go func main() { a := map...阅读全文

博文 2018-02-23 17:10:38 polaris

golang 如何解析url中的多个参数

以下面的url为例,这个例子实际上是《go语言圣经》中7.7章节http.handler的一个例子。我们需要更新袜子socks的价钱为16,鞋子shoes的价格为100。我们把它们写到同一个url中。对于这种一个url有多个参数的情况该如何处理呢? http://localhost:8000/update?item=socks&price=16&item=shoes&price=100 使用如下的代码来查看请求参数。req.URL.Query()的返回值是Values类型,这个类型实际上是type Values map[string][]string,因此我们可以遍历这个map。 func (db database) update(w http.ResponseWriter, req *ht...阅读全文

博文 2020-04-21 17:36:02 yufeifly

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

Golang中的自定义函数

不管是面向过程的编程,还是面向对象的编程,都离不开函数的概念,分别是,参数,函数名,返回值。接下来我们看看Go语言在这三个方面是做怎么操作的吧。 参数 谈到参数,我们在写函数或者是类中的方法的时候都需要考虑我们应该传递怎样的参数,或者是是否需要参数。 参数首先分为无参函数有参。无参也就是没有参数,也就不用写了。 有参 func functionTest() { # 小括号内就是用来放参数的 # 函数体内 } Go语言是强数据类型的语言,参数是要指定类型的不然就报错。func 是函数的声明关键字。 func 函数名(参数列表) 返回值类型 {函数体内部} func addTwoNumber(a int, b int) int { return a + b } 我们这里写了一个很简单的函数,把两...阅读全文

博文 2018-10-06 19:34:39 _AlphaBaby_

如何利用golang 反射值来定义一个变量

之前写java的时候就已经知道了有反射这个概念,看过一遍文章专门介绍了一下java的反射机制,不过现在忘记了。 今天写一个通用函数的时候要对传入的参数经行类型判断,还要定义与其像同类型的变量经行取址运算,baidu, google,golang reflect包也看了好久,也没看到将返回值来定义个变量的办法。最后在一篇博客中得到灵感—–>点击可以看看。 这篇文章中没有告诉怎么将反射值去定义一个变量,但看完之后思考一下,既然要返回一个类型,但是类型又是不确定的,若存在这样一个返回变量的函数,则其返回类型必是Interface,在官网文档里找返回类型是Interface的函数,就是它了,它是Value类型的一个函数,所以就不能使用reflect.TypeOf(i interface{})来操作了...阅读全文

博文 2016-03-28 05:00:01 Tangs_

在Go包里添加C代码并且不使用CGO(不需要gcc)

如果go代码里使用了cgo,那么编译的时候电脑上必须按照gcc才能正确编译 这篇文章展示了如何用c写一个包让go调用并且不需要使用cgo A 需要注意的: 1. C代码天生的不安全 2. Go1的兼容性保证不包括C代码 3. C函数不能inline 4. 逃逸分析不能跟踪传递到C函数里的value (逃逸分析:http://kenwublog.com/jvm-optimization-escape-analysis) 5. C编译器(5c,6c,8c)没有对应的Go编译器优化做的好,因此生成的代码也许没有Go代码优化的那么好 6. C代码是plan9风格的,与C89较相似 B 返回的方式 第一个例子是一个简单的返回true的函数:True void ·True(bool res) { res...阅读全文

博文 2015-01-13 22:16:22 varding

Golang中Switch的使用

跟一般语言的Switch有点不一样,Golang在使用两个case的时候,是第一个是不生效的。 如下的代码 switch (type) { case 1: case 2: return "a"; case 3: return "b" default: return "c" } 在Java中,输入1,2都是返回a,输入3是返回b,其他是c。 但是在Go中,输入1竟然是返回c,被坑过几次。 如果想在Go中达到类似Java的效果,只能这么写: switch type { case 1: return "a" case 2: return "a"; case 3: return "b" default: return "c" } 一条条写明显太费劲了,所以还可以这么写: switch type { ...阅读全文

博文 2016-08-11 02:00:12 sydbfhwj

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

GoLang bufio.NewScanner 详解

上代码 func NewScanner(r io.Reader) *Scanner { return &Scanner{ r: r, split: ScanLines, maxTokenSize: MaxScanTokenSize, } } 函数NewScanner返回一个Scanner,这个返回值来自于函数参数r。他的类型是io.Reader。 type Scanner struct { r io.Reader // The reader provided by the client. split SplitFunc // The function to split the tokens. maxTokenSize int // Maximum size of a token; modif...阅读全文

博文 2019-06-15 15:02:38 我加入简书的路程

golang语言渐入佳境[16]-结构体拷贝

结构体拷贝12345678910111213141516171819202122232425262728type Dog struct { name string color string age int8 kind string}func main() {//1、struct是值类型,默认的复制就是深拷贝 d1 := Dog{"豆豆", "黑色", 2, "二哈"} fmt.Printf("d1: %T , %v , %p \n", d1, d1, &d1) d2 := d1 //值拷贝 fmt.Printf("d2: %T , %v , %p \n", d2, d2, &d2) d2.name = "毛毛" fmt.Println("d2修改后:", d2) fmt.Println("d...阅读全文

博文 2018-12-06 03:35:15 jonson_jackson

golang 内置函数new() 和struct{} 初始化的区别

golang 内置函数new() 和struct{} 初始化的区别happinessaflower·2015-06-17 20:03:41· 13036 次点击 ·预计阅读时间 1 分钟·大约1分钟之前开始浏览这是一个创建于2015-06-17 20:03:41的文章,其中的信息可能已经有所发展或是发生改变。new()这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针。在golang的代码定义如下:funcnew(tType) *Typestrut{}直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针两者是不一样的两者对比代码如下:typeStudentstruct{ idintn...阅读全文

博文 2018-06-20 20:34:40 ebayboy

Gin实践 连载五 搭建Blog API's(四)

API's - JSON Web Tokens (JWT) 在前面几节中,我们已经基本的完成了API's的编写 但是,还存在一些非常严重的问题,例如,我们现在的API是可以随意调用的,这显然还不够完美,是有问题的 那么我们采用 jwt-go (GoDoc)的方式来简单解决这个问题 下载依赖包 首先,我们下载jwt-go的依赖包 go get -u github.com/dgrijalva/jwt-go 编写jwt工具包 我们需要编写一个jwt的工具包,我们在pkg下的util目录新建jwt.go,写入文件内容: package util import ( "time" jwt "github.com/dgrijalva/jwt-go" "gin-blog/pkg/setting" ) var...阅读全文

博文 2018-02-17 11:34:38 EDDYCJY

golang中ServeMux解析

ServeMux解析 总览 ServeMux结构体 NewServeMux pathMatch * ServeMux.Handler * ServeMux.handler * ServeMux.Handle * ServeMux.ServeHTTP 总览 本来是想做一个UML出来让这篇解析更清晰一点的,但是markdown的UML语法我一直捣鼓不出来。试了几个软件感觉也没有 想象中的好用和方便,看来是时候自己开发一个了(笑). 口述一个流程,具体的函数大家可以页内跳转去看. 首先我们是通过ListenAndServe来监听本地端口的,之后ListenAndServe将收到的新建一个Response连同收到的Request 作为参数调用ServeMux结构体的ServeHTTP(省略了中间过程...阅读全文

博文 2016-07-10 14:00:02 xinglong

Go并发编程——channel

以前从未接触过并发编程,所以,且写且学吧 引入channel package main import ( "fmt" "sync" "runtime" ) var counter int = 0 func Count(lock *sync.Mutex){ lock.Lock() counter++ fmt.Println(counter) lock.Unlock() } func main(){ lock := &sync.Mutex{} for i:=0;i<100;i++{ go Count(lock) } for{ lock.Lock() c:=counter lock.Unlock() runtime.Gosched() if c>=100{ break } } } 将counter...阅读全文

博文 2014-10-11 16:00:02 luan_tianjiao

从例子中学习 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细节——range

range关键字是Go语言中一个非常有用的迭代array,slice,map, string, channel中元素的内置关键字。 range的使用 range的使用非常简单,对于遍历array,*array,string它返回两个值分别是数据的索引和值,遍历map时返回的两个值分别是key和value,遍历channel时,则只有一个返回数据。各种类型的返回值参考下表: range expression 1st Value 2nd Value(optional) notes array[n]E,*[n]E indexint value E[i] slice[]E indexint value E[i] string abcd indexint rune int 对于string,range...阅读全文

博文 2019-04-26 19:34:43 佛心看世界

[golang]用Go语言写的课表

package main import ( "fmt" "os" ) type tt struct { //定义数据结构 tt,用于存放每日的课程 One string //0 Two string //1 Three string //2 Four string //3 } type DAY struct { //定义数据结构 DAY ,用于存放一周的,英文简写 week string } func main() { //主函数 var weekday int //定义一个int 类型的值,weekday //fmt.Printf("Enter the weekday : ") //fmt.Scanf("%d",&weekday) weekday = getday() //从getday(...阅读全文

博文 2014-10-04 19:27:07 sndnvaps

Go基础系列:数据类型转换(strconv包)

Go不会对数据进行隐式的类型转换,只能手动去执行转换操作。 简单的转换操作 转换数据类型的方式很简单。 valueOfTypeB = typeB(valueOfTypeA) 例如: // 浮点数 a := 5.0 // 转换为int类型 b := int(a) Go允许在底层结构相同的两个类型之间互转。例如: // IT类型的底层是int类型 type IT int // a的类型为IT,底层是int var a IT = 5 // 将a(IT)转换为int,b现在是int类型 b := int(5) // 将b(int)转换为IT,c现在是IT类型 c := IT(b) 但注意: 不是所有数据类型都能转换的,例如字母格式的string类型"abcd"转换为int肯定会失败 低精度转换为高精...阅读全文

博文 2018-11-23 09:10:46 f-ck-need-u

用gomock进行mock测试

在开发过程中往往需要配合单元测试,但是很多时候,单元测试需要依赖一些比较复杂的准备工作,比如需要依赖数据库环境,需要依赖网络环境,单元测试就变成了一件非常麻烦的事情。举例来说,比如我们需要请求一个网页,并将请求回来的数据进行处理。在刚开始的时候,我通常都会先启动一个简单的http服务,然后再运行我的单元测试。可是这个单元测试测起来似乎非常笨重。甚至在持续集成过程中,我还为了能够自动化测试,特意写了一个脚本自动启动相应的服务。事情似乎需要进行一些改变。 mock对象就是为了解决上面的问题而诞生的,mock(模拟)对象能够模拟实际依赖对象的功能,同时又不需要非常复杂的准备工作,你需要做的,仅仅就是定义对象接口,然后实现它,再交给测试对象去使用。 go-mock是专门为go语言开发的mock库,该...阅读全文

博文 2017-06-22 17:05:38 terasum

怎么调用Service生命周期中 onStartCommand方法的返回值 ?

在Android开发中,调用Context的startService方法启动Service的生命周期时,如果Android面临内存匮乏,可能会销毁掉你当前运行的Service,然后待内存充足的时候可以重新创建Service,Service被Android系统强制销毁并再次重建的行为依赖于Service中onStartCommand方法的返回值。 而Service onStartCommand方法中,常用的返回值主要有:START_NOT_STICKY、START_STICKY和START_REDELIVER_INTENT三种,这三个值都是Service中的静态常量。下面小编就和大家分享下这三种返回值的具体的含义及使用情况。 START_NOT_STICKY ...阅读全文

基于Redis实现的延迟队列

delay-queue 延迟队列, 参考有赞延迟队列设计实现 项目地址 运行 ./delay-queue -c delay-queue.conf 默认监听0.0.0.0:9277 HTTP接口 请求方法 POST 请求Body及返回值均为json 返回值 { "code": 0, "message": "添加成功", "data": null } 参数名 类型 含义 备注 code int 状态码 0: 成功 非0: 失败 message string 状态描述信息 data object, null 附加信息 添加任务 URL地址 /push { "topic": "order", "id": "15702398321", "delay": 3600, "ttr": 120, "body"...阅读全文

博文 2017-07-04 16:04:57 order_c

GO语言中container/list使用详解

go中container中list的使用详解 1. func New() *List{} 初始化一个列表,返回类型为一个list对象 a := list.New() # 在函数内部 a = list.New() 输出: &{{0xc00006a300 0xc00006a300 } 0} 2. func (l List) Back() Element{} 返回链表的最后一个元素,返回类型元列表中的元素。 x := a.Back() fmt.Println(strings.Repeat("-----------", 10)) fmt.Println(x) &{0xc00006a300 0xc00006a330 0xc00006a300 b} 3. func (l List)...阅读全文

博文 2019-05-16 14:35:23 qq5c9c828bc8d4b

golang io.ReadFull

buf := make([]byte, 10, 10) file, _ := os.Open("./data.txt") n, err := io.ReadFull(file, buf) if err != nil { fmt.Println(n, err.Error()) } else { fmt.Println(n) } 1. 如果 data.txt 是空,则返回 EOF 错误。 2. 如果 data.txt 少于 10 个字节, 则返回 ErrUnexpectedEOF 错误。并返回读取的字节。 3. 其他情况,正常返回 10 个字节,错误是 nil ...阅读全文

博文 2017-10-25 16:00:05 onebook

goconfig使用解析

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

博文 2014-10-04 19:27:34 dandan.fs

七牛---关于GO SDK的各种Demo

具体可以参考七牛GO SDK的源码以及官网使用文档,以下Demo针对V7版本的SDK: https://github.com/qiniu/go http://developer.qiniu.com/code/v7/sdk/go.html 文件上传 简单上传 package main import ( "github.com/qiniu/api.v7/kodo" "qiniupkg.com/api.v7/conf" "qiniupkg.com/api.v7/kodocli" "fmt" ) var ( //设置上传到的空间 bucket = "yourbucket" ) //构造返回值字段 type PutRet struct { Hash string `json:"hash"` Key s...阅读全文

博文 2016-03-24 14:00:01 netdxy

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语言写的微信支付插件库看着不错哦

# 微信支付 这是用Golang封装了微信的所有API接口的SDK,并自动生成和解析XML数据,包括微信支付、公众号、小程序、移动端的工具函数。 * 支持境内普通商户和境内服务商(境外和银行服务商没有条件测试)。 * 支持全局配置应用ID、商家ID等信息。 * 全部参数和返回值均使用`struct`类型传递,而不是`map`类型。 ### 安装 ```shell go get -u gitee.com/cuckoopark/wechat ``` ### 初始化 ```go const ( isProd = true // 生产环境或沙盒环境 isMch = false // 是否是企业模式,仅当调用企业付款时为true serviceType = wechat.ServiceTypeNorm...阅读全文

博文 2020-02-25 09:51:14 lu569368

七牛上传小工具-Go语言版本

运行环境: Mac os X and Linux 现在当前目录下创建qiniu.json文件: { "AK":"XXX" , "SK":"XXX", "BN":"xx" } package main import ( "encoding/json" "fmt" "io/ioutil" "os" "path" "strings" ) import ( . "github.com/qiniu/api/conf" "github.com/qiniu/api/io" "github.com/qiniu/api/rs" "github.com/qiniu/log" ) import ( "etag" ) var uptoken string var buckName string var curren...阅读全文

博文 2015-02-01 08:00:01 itfanr

Go 异常处理机制——defer, error, panic, recover

一、前言 在实际的项目中,对于异常的最佳实践很多,在使用不同的语言开发不同类型的程序时,有不同的建议。Google C++ Style 中提到 Google 内部的 C++ 代码中不使用异常,社区也有很多关于异常的讨论。 作为一门相对来说很新的语言,Go语言中没有使用传统的 try...catch 类似的异常处理机制,而是提供了 panic 和 recover 函数来处理所谓的运行时异常,也就是 Google 所称的错误处理机制。配合 defer 语句和 error 接口开发者可以非常灵活地处理运行时的错误和异常。Google 肯定不希望开发者在代码中随便使用 panic,我们知道在风险控制中,有所谓 已知的未知 和 未知的未知,在 Go 程序设计中,对于前者,我们可以通过预先开发的代码分支...阅读全文

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

Java调用Golang生成的动态库(dll,so)

## 0x01. 环境准备 ## A. GCC 在控制台中输入 ```bash gcc -v ``` 如果提示命令未找到,那么说明你的计算机中还没有gcc,去安装一个吧,gcc官方网站:https://gcc.gnu.org/ 如果从来没有安装过gcc的朋友可以直接安装win-build,可以帮你快速的安装 官方网站:http://mingw-w64.org/doku.php/download/win-builds ## 0x02. 编写go程序 我们这里只是编写一个简单的计算加法的程序,接受两个证书,然后计算他们的和,并返回。 在这里,我们将文件命名为libhello.go ```go package main import "C" //export Sum func Sum(a int,...阅读全文

博文 2018-07-17 11:20:02 LemonITCN

深入理解golang中bufio.SplitFunc

前言 golang的bufio包里面定以的SplitFunc是一个比较重要也比较难以理解的东西,本文希望通过结合简单的实例介绍SplitFunc的工作原理以及如何实现一个自己的SplitFunc。 一个例子 在bufio包里面定义了一些常用的工具比如Scanner,你可能需要读取用户在标准输入里面输入的一些东西,比如我们做一个复读机,读取用户的每一行输入,然后打印出来: package main import ( "bufio" "fmt" "os" ) func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Split(bufio.ScanLines) for scanner.Scan() { fmt.Println(scan...阅读全文

博文 2018-10-14 00:34:40 goland