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

go语言选择语句 switch case

根据传入条件的不同,选择语句会执行不同的语句。下面的例子根据传入的整型变量i的不同而打印不同的内容: switch i { case 0: fmt.Printf("0") case 1: fmt.Printf("1") case 2: fallthrough case 3: fmt.Printf("3") case 4, 5, 6: fmt.Printf("4, 5, 6") default: fmt.Printf("Default") } 运行上面的案例,将会得到如下结果:  i = 0时,输出0;  i = 1时,输出1;  i = 2时,输出3;  i = 3时,输出3;  i = 4时,输出4, 5, 6;  i = 5时,输出4, 5, 6;  i = 6时,输出4,...阅读全文

博文 2015-07-29 03:00:01 osfipin

Go语言圣经中文版

在C语言发明之后约5年的时间之后(1978年),Brian W. Kernighan和Dennis M. Ritchie合作编写出版了C语言方面的经典教材《The C Programming Language》,该书被誉为C语言程序员的圣经,作者也被大家亲切地称为K&R。 同样在Go语言正式发布(2009年)约5年之后(2014年开始写作,2015年出版),由Go语言核心团队成员Alan A. A. Donovan和K&R中的Brian W. Kernighan合作编写了Go语言方面的经典教材《The Go Programming Language》。Go语言被誉为21世纪的C语言,如果说K&R所著的是圣经的旧约,那么D&K所著的必将成为圣经的新约。 镜像: http://books.stu...阅读全文

博文 2016-03-29 07:00:05 smallmaple

golang学习笔记:go 语法篇(一)

学习一门新的语言肯定是要从他的基本语法开始,语法构成了整个程序设计的基础,从语法中我们也可以看到这门语言的一些特性,但是话说回来,语法这东西,不同的语言大同小异,所以这也对语法的记忆造成了一定的难度,其实最好的方法应该是旁边有本书,随时可以拿过来查阅或者纠正。当然golang的语法也是这样,下面的一些是我学习七牛云存储团队许式伟等出的《Go语言编程》: http://baike.baidu.com/link?url=vFrjnVJwITN0LaRbL7TmWYpq5V8JLWzL_NycAQy6w0e7JXP6a4bGm61ge0gGMU6jNFQO_RnuDGEQPh7YK9w4S_ 语法部分的时候整理的一些,这本书对于新手入门还是挺有帮助的。为了日后可以及时回顾,所以记录下来了。为了避免...阅读全文

博文 2015-06-12 09:00:06 u011321908

GO语言基础入门--类型

类型 本Go语言基础入门内容均来自于《Go语言编程》,个人记录,加深理解。 Go语言内置以下这些基础类型:  布尔类型: bool。  整型: int8、 byte、 int16、 int、 uint、 uintptr等。  浮点类型: float32 、 float64。  复数类型: complex64、 complex128。  字符串: string。  字符类型: rune。  错误类型: error。 此外, Go语言也支持以下这些复合类型:  指针( pointer)  数组( array)  切片( slice)  字典( map)  通道( chan)  结构体( struct)  接口( interface) 在这些基础类型之上Go还封装了下面...阅读全文

博文 2015-04-22 13:00:05 chenqijing2

Go程序如何安全退出(CTRL+C)

http://m.oschina.net/blog/125853 如果是命令行程序需要退出, CTRL+C是最直接的方法. C语言如何处理CTRL+C CTRL+C会向命令行进程发送中断信号, 在C语言的中的signal函数可以注册信号的处理函数. signal函数的签名如下: void (*signal(int sig, void (*func)(int)))(int); 比如, 我们要处理CTRL+C对应的SIGINT信号: #include #include #include void sigHandle(int sig) { switch(sig) { case SIGINT: printf("sig...阅读全文

博文 2014-10-20 16:00:00 leonpengweicn

Go程序设计语言(一)

Go程序设计语言(一) 八 23 bigwhite技术志 Blog, Blogger, C, Cpp, Go, Golang, Google, Opensource, Programmer, 博客, 开源, 程序员, 编程,语言, 编译器 No Comments 本文译自Rob Pike的Go语言PPT教程 – "The Go Programming Language Part 1(updated June 2011)"。由于该教程的最新更新时间早于Go 1版本发布,因此该PPT中的一些内容与Go 1语言规范略有差异,到时我会在相应的地方做上注解。 谁发明了Go Go语言的设计和实现工作是由Google的一个研发小组以及来自世界各地的大量贡献者共同完成的。 联系方式: http://gola...阅读全文

博文 2014-11-07 14:51:54 bigwhite

go类型断言

go里面的类型断言写法: x.(T) 其中x为interface{}类型 T是要断言的类型。 类型断言有个非常好的使用场景:当某个类型为interface{}的变量,真实类型为A时,才做某件事时,这时可以使用类型断言 下面有个例子。只有当某个interface{}的类型 存储的是int时才打印出来。 package main import ( "fmt" "math/rand" "time" ) func main() { var v interface{} r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < 10; i++{ v = i if (r.Intn(100) % 2) == 0 { v = "h...阅读全文

博文 2015-05-19 23:00:02 guonaihong

golang编程之时间编程

golang编程之时间编程 编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。 golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。 第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s manu@manu-hacks:~/code/go/self$ date +%s 1385131172 熟悉Linux下C编程的就是time函数的返回值: #include 阅读全文

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

Go语言/golang/位操作/取反/异或/左移/右移

Go语言位操作实例 package main import ( "fmt" ) // 获取0-n之间的所有偶数 func even(a int) (array []int) { for i := 0; i < a; i++ { if i&1 == 0 { // 位操作符&与C语言中使用方式一样 array = append(array, i) } } return array } // 互换两个变量的值 // 不需要使用第三个变量做中间变量 func swap(a, b int) (int, int) { a ^= b // 异或等于运算 b ^= a a ^= b return a, b } // 左移、右移运算 func shifting(a int) int { a = a << 1 ...阅读全文

博文 2014-10-04 19:27:13 viney

golang的select典型用法

golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。 示例: ch1 := make (chan int, 1) ch2 := make (chan int, 1) ... select { case <-ch1: fmt.Println("ch1 pop one element") case <-ch2: fmt.Println("ch2 pop one element") } 注意到 select 的代码形式和 switch 非常相似, 不过 select 的 case 里的操作语句只能是【IO 操作】 。 此示例里面 select 会一直等待等到某个 case 语句完成, 也就是等到成功从...阅读全文

博文 2015-02-15 18:23:33 YanyiWu

[Go语言]cgo用法演示

经历了数十年发展的C语言,各种各样的现成的库已经非常丰富。通过cgo,可以在Go语言中使用C语言代码,充分利用好现有的“轮子”。 本文所有代码,在下述环境中调试通过: Windows 8.1 64-bitGo 1.3.3 64-bitGCC 4.8.1 64-bit 要想使用cgo,要导入C“包”: import "C"这行代码的上方要紧挨着连续的若干行的注释,在这些注释中编写C代码。例如: /* int PlusOne(int n) { return n + 1; } */ import "C" 我们知道,如果要引用一个包中的符号,需要用“包名.符号名”的方式,C“包”也是这样,例如:C.int、C.GetWindowLongPtr。 下面介绍使用C语言变量、函数、结构体、联合体、回调函数...阅读全文

博文 2014-10-15 11:00:00 jthmath

golang指针与C指针的异同

总结一下golang中的指针与C语言的指针的用法。 总体一致: C的代码: ? 1 2 3 4 int *number; number = (int *) malloc(sizeof(int)); *number = 3; printf("%d\n", *number); golang的代码: ? 1 2 3 4 var pointer *int; pointer = new(int); *pointer = 3; fmt.Println(*pointer); 多重指针情况: C的代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 int **outer; int *inter; inter = (int *) malloc(sizeof(int)); *inter = ...阅读全文

博文 2014-10-25 10:00:01 zhjih123

GoLang之对象

GoLang之面向对象 Go语言没有沿袭传统面向对象编程中的诸多概念,比如继承、虚函数、构造函数和析构函数、隐藏的this指针等。 类方法 在Go语言中,可以给任意类型(包括内置类型,但不包括指针类型)添加相应的方法。 如下面的这个例子,定义了一个新类型Integer,它和int一样,只是为它内置的int类型增加了个新方法Less() type Integer int func (a Integer) Less(b Integer) bool { return a < b } func main() { var a Integer = 1 if a.Less(2) { fmt.Println("less then 2") } } 可以看出,Go语言在自定义类型的对象中没有C++/Java那种...阅读全文

博文 2015-05-13 03:00:05 chenny7

golang之flag.String

无论是c语言还是golang语言或是其他语言,启动应用程序时都可以带一些参数,然后系统根据传入的参数进行特点的工作。如:./main -b /home/backupdir -d true 那么如何更好的解析这些参数呢?前两周自己做项目时是通过 range os.Args 来解析这些参数。今天看到了 flag.String 这个方法,感觉之前做的好傻,觉得更应该用golang自带的flag.String来解析参数。 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 ) 7 8 func main() { 9 backup_dir := flag.String("b", "/home/default_dir", "backup path") 10 de...阅读全文

博文 2015-07-20 03:00:00 hezhixiong

一个java和golang(go语言)通信的例子。

go语言是一个系统级语言,好处非常多。虽然是一个静态编译型语言,但可以像动态语言一样写程序,语言本身可以提供编写应用程序所需的基本组件,而不用引入第三方的包。如果了解c++、java、python等,会对其简洁和强大有更深的认识,c++实在过于繁琐,java也没有想象的简单,python的效率和go不是一个数量级的。那么多的特性,印象最深的就是其对并发的支持,优雅而高效。一般情况下并发通过进程、线程、基于异步IO的回调来实现,进程和线程不能大量的创建,如超过1万个系统资源就不堪重负了,回调可以尽可能少的创建线程,但用法不太符合自然习惯,比如boost 的asio就是一个很好的处理并发的框架,使用得当可以写出高效优雅的服务器程序。而go则在语言级别支持协程,协程是一种轻量级线程,可以创建百万个...阅读全文

博文 2014-10-04 19:26:09 qfsun

go语言数组的拷贝

go语言的数组与c语言的数据有一点不太一样的地方,go语言的赋值是值拷贝 package main import "fmt" func main() { var ages [4]int = [4]int{1, 2, 3, 5} var b = ages b[0]++ fmt.Println(ages) fmt.Println(b) } 输出的结果是: [1 2 3 5] 
[2 2 3 5] 要想使ages改变时,b也跟着改变可以使用指针 package main import "fmt" func main() { var ages [4]int = [4]int{1, 2, 3, 5} var b = &ages b[0]++ fmt.Println(ages) fmt.Println(...阅读全文

博文 2016-03-17 11:00:12 u010087712

Golang中字符串的一个坑

在C语言中,字符串的内存模型定义为以NUL(\x0)结尾的字节数组。这是为大家所熟知的。 但是在Golang中并不是如此,Golang中的字符串abc和abc\x0\x0并不相当,所以说Golang明确规定了字符串的长度,而不是以\x0为结尾来判断的。 下面看示例代码: package main import ( "fmt" "os" ) func main() { var a[5]byte = [5]byte{'a','b','c'} var b[]byte = []byte{'a','b','c'} fmt.Printf("len(a): %d, %q\n", len(a), a) fmt.Printf("len(b): %d, %q\n", len(b), b) slice_a := ...阅读全文

博文 2015-04-24 12:09:59 华子

golang build 编译规则

注意点一、 go build 的时候会选择性地编译以系统名结尾的文件(linux、darwin、windows、freebsd)。例如Linux(Unix)系统下编译只会选择array_linux.go文件,其它系统命名后缀文件全部忽略。 注意点二、 在xxx.go文件的文件头上添加 // + build !windows (tags),可以选择在windows系统下面不编译 // +build !windows package main 总结:golang跨平台没有java好用,但是跟c语言差不多,都得针对不同平台不同特性迭轮...阅读全文

博文 2015-10-20 12:00:06 webyh

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

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

Go语言学习(四)常用类型介绍

1.布尔类型 var v1 bool v1 = true; v2 := (1==2) // v2也会被推导为bool类型 2.整型 类 型 长度(字节) 值 范 围 int8 1  128 ~ 127 uint8(即byte)1 0 ~ 255 int16 2  32 768 ~ 32 767 uint16 2 0 ~ 65 535 int32 4  2 147 483 648 ~ 2 147 483 647 uint32 4 0 ~ 4 294 967 295 int64 8  9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 uint64 8 0 ~ 18 446 744 073 709 551 615 int 平台相关 ...阅读全文

博文 2016-04-02 14:00:00 mChenys

Go中error类型的nil值和nil

先看C语言中的类似问题:空字符串。 1 const char* empty_str0 = ""; 2 const char* empty_str1 = "\0empty"; 3 const char* empty_str2 = NULL; 以上3个字符串并不相等,但是从某种角度看,它们都是对应空的字符串。 empty_str0 指向一个空的字符串,但是empty_str0本身的值是有效的。empty_str1 指向一个非空的字符串,但是字符串的第一个字符是'\0'。empty_str2 本身是一个空的指针。 Go的error是一个interface类型,error的nil问题和C语言的字符串类似。 参考官方的error文档说明: http://golang.org/doc/go_faq.ht...阅读全文

博文 2014-11-05 13:00:01 kjfcpua

Go语言调用C语言函数的坑

最近在看人民邮电出版社 许式伟 吕桂华编著的《Go语言编程》,看到【1.2.9 语言交互性】小节的cprint.go。未按照书中源代码格式编写,而是把 import "C" 和 import "unsafe" 合并放入小括号中并和注释结束符 */ 间隔了一行,这也是大多数Go语言学习和开发者经常使用的代码风格,我修改后的代码如下: package main/*#include #include */import ( "C" "unsafe")func main() { cstr := C.CString("Hello, world") C.puts(cstr) C.free(unsafe.Pointer(cstr))} 结果在我的Windows 7 64...阅读全文

博文 2014-12-09 16:00:02 董松

go与c互相调用

此例子来自于go源码中,借此来和大家分享一下两者如何调用,网上很多文章语言不详,也没有一个完整的测试例子 目录结构 首先src 目录下有 testcgowin目录下: 这里的_obj目录是cgo生成的 这里需要展示的是go中如何调用c语言导出函数,以及在c语言中如何调用go的导出函数. 关键是cthread.go和cthread_windows.c两个文件 go文件 cthread.go内容: package ctestcgowin// extern void doAdd(int, int);import "C"import ( "sync" "fmt")var sum struct { sync.Mutex i int}//export Addfunc Add(x int) { defer...阅读全文

博文 2016-04-19 09:00:01 baizx

给终端来点彩色(c语言和Golang版)

如果用过AIX或Linux下的nmon工具的应当会注意到,它可以把文字显示成多种颜色,并巧妙的利用颜色和字符组合出各种图形 来显示系统的运行情况。看看它官网附的这张图: 如果你看过它的源码,你会发现它用的是 Ncurses 库来实现彩色显示的。Ncurses很强大,可以在任何遵循ANSI/POSIX标准的UNIX系统上运行, 包含了一系列强大的功能。 但在这里,它并不是我要研究的对象,它太重量级了。 我想在这说明的是一种简单的可以让终端显示彩色文本的方法。利用16进制的颜色控制符就足以在终端打印出各种颜色了。这种方法不必调用 API,使用方式也很简单,我用c语言演示下: #include int main(void) { printf("\x1b[0;%dmhello w...阅读全文

博文 2014-12-09 17:00:03 xcltapestry

Azul3D_Go开发的3D游戏引擎简介

Azul3D 是一个用 Go 语言开发的 3D 游戏引擎。支持 Windows 和 Linux,基于 OpenGL 2.x 的渲染器,基于 OpenAL 的 3D 音频。 官网:http://azul3d.org/ 中国有团队开发没有,能开发成为类似cocos游戏引擎的就好了。再加上go的并发服务器,双赢啊。 —————————————————————————————————————— SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。 用途广泛。 SDL内置了调用OpenGL的函数。 通过使用SDL_image、SDL_ttf、SDL_mixer、S...阅读全文

Golang和nodejs小比拼

​ Golang和nodejs小比拼这期呢,我们来比较一下,golang和nodejs。这两个都是后端比较热门的开发技术。发展的都非常快。 [golang简介]我们先来看一下golang, 这门技术是免费的,可编译的,开源的,面向通用开发的编程语言。这门语言有两位来自谷歌的专家Ken Thompson和Rob Pike所开发, 开发时间是2007年。这门语言跟c语言非常接近, 支持结构定义, 同时又支持垃圾回收处理。内存使用上也更加方便,安全。因为跟c语言很接近,所以golang屏蔽掉了一些现代编程语言中的特征, 比如说类继承是不存在的。[nodejs简介]再来看一下nodejs。这门技术也是开源的。JavaScript作为核心语言, 跨平台。用于创建服务器端实时处理的应用系统。创作者为Ry...阅读全文

博文 2019-08-01 08:32:38 丁哥开讲

LiteIDE设置

我在windows下使用LiteIDE写go程序 go安装在c:\go path里添加了c:\go\bin LiteIDE安装在e盘 gopath也设置正确 能编译运行 但我的go源文件都放在e盘的一个文件夹里 当这个文件夹只有一个源文件时,编译运行正常,生成的可执行文件名为当前文件夹名 当有多个源文件时,就无法编译运行了 这是什么原因,要怎么设置? ...阅读全文

go语言-使用swig转化C++代码为go所用

服务端的某个项目,要考虑到性能问题,之前使用基于公司框架的php,性能有瓶颈,经过调研,决定使用go。因为之前有一个关键模块已经使用c++实现,所以计划使用go做HTTP容器,让go和c++模块结合起来。 在网上调研结合方案,go自带的cgo只支持c语言,swig工具可以支持多种语言结合c++,所以决定使用swig,这里简要叙述下swig的使用和一些发现的要点。 1. 我们解压了swig后,首先要根目录运行configure和make,这样会生成各个子目录的makefile,并在当前目录生成preinst-swig.in和swig可执行文件,这些在后续会拥有。 2. 我们进入Example的go里面,这里有一些值得参考的例子 3. 研究那个class例子,有这几个文件: class.cxx和...阅读全文

博文 2015-06-17 23:01:50 linux4fun

golang 位操作

package main import ( "fmt" ) // 获取0-n之间的所有偶数 func even(a int) (array []int) { for i := 0; i < a; i++ { if i&1 == 0 { // 位操作符&与C语言中使用方式一样 array = append(array, i) } } return array } // 互换两个变量的值 // 不需要使用第三个变量做中间变量 func swap(a, b int) (int, int) { a ^= b // 异或等于运算 b ^= a a ^= b return a, b } // 左移、右移运算 func shifting(a int) int { a = a << 1 a = a >> 1...阅读全文

博文 2014-12-20 19:00:01 moodlxs

Golang从入门到精通(一):Golang介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangxianghehe/article/details/78778910 介绍 Go语言是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为Golang。 Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。 2012年,Go语言的创造者们发布了它的1.0版本。Go语言的创造者们包括Unix操作系统和B语言(C语言的前身)的创造者、UTF-8编码的发明者Ken Thompson,Unix项目的参与者、UTF-8编码的联合创始人和Li...阅读全文

博文 2019-01-28 11:31:40 xiangxianghehe

比较Erlang和Golang

雨天的周末,适合码字的时节。。。 一年前我开始学习go语言的时候,如获至宝,既有python的编码效率,又带来性能的15倍提升。尤其是在异步编程方面,可以使用channel同步线程,不必加锁可以充分利用cpu多核计算,真是没有弱点。 后来慢慢了解到,这种无锁异步编程的思想,源自一门叫做erlang的语言,Erlang更加了不起。除了异步编程之外,这门语言天生支持分布式,单机上开发的软件,可以不加修改地运行在集群上,另外还支持软件版本的热升级,自带的OTP框架支持进程间的监督和重启,提供了坚如磐石的运行环境。Erlang是如此完美,我认为是最适合开发互联网应用的语言,一时间有种“终于找到真理”的喜悦。 不过那个时候,心里总觉得有什么地方不对,那就是,七牛CEO许式伟本身是Erlang高手,他却...阅读全文

博文 2015-01-27 11:00:01 天下杰论

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

使用Go语言开发iOS应用(Swift版)

使用Go语言开发iOS应用(Swift版) 本文假设读者对Go语言和Swift语言都有一定了解, 但是对二者混合使用不了解的同学. 本教程是基于一个真实上架的iOS应用做的简单的总结。 我们先看看运行效果: 扫码安装: 背景 Go语言是Google公司于2010年开源的一个面向网络服务和多并发环境的编程语言,特点是简单。 但是因为简单,也就只能实现90%的性能,这是Go语言的最大优点,因为 少即是多 的道理不是每个人都能领悟的。 Swift是Apple公司于2014年发布的用来替代ObjectiveC的语言,主要面向iOS和OS X上的界面程序开发。 当然用swift来开发服务器也是大家关注的一个领域,作者比较看好在不远的将来Swift将逐步替代C++和Rust语言。 Go语言和Swift语...阅读全文

博文 2016-05-24 17:46:13 chai2010

cgo讲义及练习

前提条件: 了解Go语言和C语言的基本知识和基本用法。 一、什么是cgo 简单地说,cgo是在Go语言中使用C语言代码的一种方式。 二、为什么要有cgo C语言经过数十年发展,经久不衰,各个方面的开源代码、闭源库已经非常丰富。这无疑是一块巨大的宝藏,对于一门现代编程语言而言,如何用好现成的C代码就显得极为重要。 三、如何使用 3.1 系统配置 要想使用cgo,你的计算机上必须有GCC,并且将gcc编译器的可执行文件所在的目录添加到PATH这个环境变量中。例如,我的gcc.exe在C:\mingw64\bin下,所以,要把C:\mingw64\bin这个目录添加到PATH。 3.2 C假包 我们知道,Go语言以包为代码的逻辑单元。如果要在Go代码中使用C代码,也要为C代码单独设立一个“包”并将...阅读全文

博文 2015-03-19 22:00:06 独立风华

人工智能时代,编程语言的学习方向该如何选择?

姓名:刘彦斌 学号:17021210946转载自:https://mp.weixin.qq.com/s/PJmtEwYjNQCuTsAGjxnDDA,有删节【嵌牛导读】:在科技领域飞速发展的今天,从WEB到移动互联网,从AI到大数据挖掘,你方还未唱罢我方就已登台。面对应接不暇的变化,很多非资深及潜在从业者难免感到迷茫:行业发展太快,技术更新频繁,面对如此多的编程技术,应该如何选择方向,本文将对一些实用的编程语言进行介绍【嵌牛鼻子】:编程语言、Python、Java、C语言、C++、C#、R语言、JavaScript、PHP、Go、Swift【嵌牛提问】:现在比较常见的编程语言有哪些?它们都用来做什么?【嵌牛正文】: 结合IEEE发布的2017年编程语言排名,小编做了一个编程语言盘点,希望能给...阅读全文

Go语言 时间处理详解

编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。 golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。 第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s manu@manu-hacks:~/code/go/self$ date +%s 1385131172 熟悉Linux下C编程的就是time函数的返回值: #include time_t n...阅读全文

博文 2015-06-17 20:05:17 abv123456789

Go语言中不同类型切片之间的相互转换

将 []T 切片转换为 []byte 类似C语言中将其他类型的数组转换为char数组: func ByteSlice(slice interface{}) (data []byte) { sv := reflect.ValueOf(slice) if sv.Kind() != reflect.Slice { panic(fmt.Sprintf("ByteSlice called with non-slice value of type %T", slice)) } h := (*reflect.SliceHeader)((unsafe.Pointer(&data))) h.Cap = sv.Cap() * int(sv.Type().Elem().Size()) h.Len = sv.Len...阅读全文

博文 2015-05-12 21:00:03 chai2010

Go语言之父谈Go:大道至简

自:http://www.csdn.net/article/2012-07-05/2807113-less-is-exponentially-more 导读:这篇文章是Google首席工程师、Go语言之父Rob Pike自己整理的6月21日在旧金山给Go SF的演讲稿。Rob提到:Go语言本是以C为原型,以C++为目标设计,但最终却大相径庭。值得一提的是,这3门语言都曾当选TIOBE年度语言。 几个礼拜之前我被问到:“对于Go语言,最令你惊讶的是什么?”当时我就明确地给出了答案:“虽然我希望C++程序员能够使用Go作为替代拼,但实际上大部分Go程序员都是从Python和Ruby转过来的,其中却少有C++程序员。” 我、Ken以及Robert都曾是C++程序员,在我们编写软件时觉得应该设计一门...阅读全文

博文 2015-06-17 23:01:51 gaopeiliang

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

sqlite3安装问题

我按照[http://my.oschina.net/Obahua/blog/129689][1] [1]: http://my.oschina.net/Obahua/blog/129689 上的说明下载sqlite-dll-win32-x86-3080200.zip解压到system32文件夹中,然后安装TMD 版的 GCC 编译器tdm-gcc-4.8.1-3.exe在c盘根目录,路径也设置好,最后go get github.com/mattn/go-sqlite3,这是出现错误cc1.exe: error: unrecognized command line option "-fno-stack-protector",运行下实例也是出现这个错误,这是怎么回事啊?请大神帮忙...阅读全文

Golang横空出世的背景(为什么选择Go)

起源及演进 最近十年来,C/C++在计算领域没有很好得到发展,并没有新的系统编程语言出现。对开发程度和系统效率在很多情况下不能兼得。要么执行效率高,但低效的开发和编译,如C++;要么执行低效,但拥有有效的编译,如.NET、Java;所以需要一种拥有较高效的执行速度、编译速度和开发速度的编程语言,Go就横空出世了。 go是一个Google公司推出的一个开源项目(系统开发语言),它是基于编译、垃圾收集和并发的编程语言。并将其开源并在BSD许可证下发行。 Go最初的设计由Robert Griesemer,Rob Pike 和Ken Thompson在2007年9月开始的,官方的发布是在2009年11月。2010年5月由Rob Pike公开的将其运用于google内部的一个后台系统。目前在googl...阅读全文

博文 2014-11-29 04:00:01 aaron_ye

golang逐行处理文件

golang 提供了package bufio。bufio.NewReader()创建一个默认大小的readbuf,当然,也可以bufio.NewReaderSize。 func NewReader(rd io.Reader) *Reader NewReader returns a new Reader whose buffer has the default size(4096). func NewReaderSize(rd io.Reader, size int) *Reader NewReaderSize returns a new Reader whose buffer has at least the specified size. If the argument io.Reade...阅读全文

博文 2015-08-25 22:00:01 冷絮

Go RPC Inside (server)

说到rpc让我想起了刚毕业面试的时候,被问到是否了解rpc?我记得当时我的回答是“课本上学过rpc,只知道是远程过程调用,但没有用过,具体也不知道是什么”。的确,大学中间件这门课程里有讲到rpc,里面还引入了一个非常难理解的概念——“桩”,英文应该叫”stub”。现在的rpc实现里,stub这个概念好像都没见到了,应该都是叫”method”。 实现一个rpc服务器很难吗?rpc服务器也就是在tcp服务器的基础上加上自定义的rpc协议而已。一个rpc协议里,主要有个3个非常重要的信息。 调用的远程method名字,一般就是一个函数名 call参数,也就是发送给服务器的数据 客户端生成的调用请求seq 除了最后一点,其他两点显然就是组成一个普通的函数调用而已,这也就是远程过程调用了。最后一点的s...阅读全文

博文 2014-11-08 12:49:15 skoo

Go语言资源自动回收技术

Go语言作为一个现代化的编程语言以及支持垃圾内存的自动回收特性(GC). 我们现在关注的是非内存资源的自动回收技术. 局部资源的管理 在讨论Go语言解决方案之前, 我们先看看C++是怎么管理资源的. C++中可以可以自动执行的代码主要是构造函数和析构函数. 因此, 很多资源的管理技术都是基于构造函数和析构函数实现. 比较常见的是C++的RAII(Resource Acquisition Is Initialization)技术, 即初始化中获取资源. 比如在多线程编程中用到的MutexLocker: struct MutexLock { Mutex *const mu_; MutexLock(Mutex *mu): mu_(mu) { mu_->Lock(); } ~MutexLock() ...阅读全文

博文 2015-05-18 12:37:14 chai2010

cgo的一些经验

cgo可以在go语言中夹杂着C函数或数据,在使用cgo时,有一些需要注意的: 1、go中的int/int32/int64/uint32/uint64和C语言中的int/int32等是不同的,因此,C语言的函数的参数不能是go语言的int,需要转换,同理,go函数的int也不能使用C的int,需要转换。 go int转换为C int的方法: C.int(n) 还有一点,C的函数调用中,有很多参数是size_t类型,其实就是一个整型,但如果使用C.int()作为C函数的参数,就会编译出错: cannot use _Ctype_int(100) (type C.int) as type C.size_t in function argument go编译器严格限制参数类型必须一致,因此必须是siz...阅读全文

博文 2015-10-14 15:04:09 铁哥

系统级编程语言性能大PK的笑话-Go语言

喜欢和不喜欢Go语言的都喜欢拿性能PK说事. 流传比较广的是benchmarksgame的PK数据: http://benchmarksgame.alioth.debian.org/u64q/go.php 在 benchmarksgame 测试中, Go语言的性能已经由之前的很烂到现在和C语言持平或2倍差距之内, 当然还有 3个测试性能差距比较大. 具体的原因我就不细说了, 可以参考我另一个文章: Go1.1性能测试报告(和C差距在10%以内) . 当然, 很多Go语言黑是从来不相信Go语言的性能的, 特别是不相信和C差距在10%以内的说法. 不过在这个老外的最新测试结果中, Go的性能又超出了GCC的性能(GCC比clang有一些差距). 最近, 有另一个外国的博客评测了各种系统级编程语言...阅读全文

博文 2015-05-08 11:34:34 chai2010

Go语言基础入门--if,for,range,switch

流程控制 这节主要记录的是编程语言中处理逻辑结构的流程控制 基本上流程控制语句启3个作用: 选择,根据条件跳转到不同执行序列 循环,反复执行某个序列 跳转,根据条件返回到某执行序列 Go语言支持如下的几种流程控制语句:  条件语句,对应的关键字为if、 else和else if;  选择语句,对应的关键字为switch、 case和select(将在介绍channel的时候细说);  循环语句,对应的关键字为for和range;  跳转语句,对应的关键字为goto。 Go语言还添加了关键字:break, continue, fallthrough。我们在实际开发中要灵活运用这些关键字以增加代码的健壮性 if...else if...else if a < 5 { return 0 }...阅读全文

博文 2015-04-22 15:00:24 chenqijing2

go web 编程

最近,在网上出现了一本名为《Go Web编程》的书籍,里面详细地讲述了使用Go语言进行Web编程的各个方面。很特别的是,这本书是在GitHub上以开源的方式撰写的。日前,InfoQ采访了这本书的作者谢孟军先生,请他来和大家谈谈Go语言以及他撰写的开源书籍。 InfoQ:请您先简单和大家介绍一下自己。 谢孟军:大家好,我叫谢孟军,可以叫我Asta,目前就职于盛大云,负责盛大云分发产品的研发。云分发就是我们平常所谓的CDN系统。 InfoQ:是什么原因促使您撰写《Go Web编程》这本书呢? 谢孟军:我以前主要从事PHP、Python等Web方面的开发,后来到了盛大云之后接触比较多C++等底层的东西,就想学习一下这些底层的技术。再后来看到许式伟的博客,了解到Go语言。Go出自B语言的作者和Uni...阅读全文

博文 2014-10-04 19:26:48 descusr