• golang接口intetface高级详解golanginterface

    类型和接口因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍。go是一个静态性语言,每个变量都有静态的类型,因此每个变量在编译阶段中有明确的变量类型,比如像:int、float32、MyType。。。比如:type MyInt intvar i intvar j MyInt变量i的类型为int,变量j的类型为MyInt,变量i、j具有确定的类型,虽然i、j的潜在类型是一样的,但是在没有转换的情况下他们之间不能相互赋值。在类型中有重要的一类为接口类型(interface),接口类型为一系列方法的集合。一个接口型变量可以存储接口方法中声明的任何具体的值。像io.Reader和io.Writer是一个很好的例子,这两个接口在io包中定义。type Reader interface{ Read(p []byte)(n int, err error)}type Writer...

    风萧萧兮易水寒 发布于:2017年03月07 17:04:50
  • golang获取当前执行文件的路径golang路径

    golang获取当前可执行文件的路径package mainimport ( "os" "os/exec" "path/filepath")func main() { file, _ := exec.LookPath(os.Args[0]) path, _ := filepath.Abs(file) println(path)}

    cartking 发布于:2017年03月04 14:08:34
  • golang常用的tool参数golangtool

    关于Go tools的比较有用的flags$ go build -x-x 列出了go build触发的所有命令。如果你对Go的工具链、使用跨平台编译器比较好奇,或者对传入外部编译器的flags不清楚,或者怀疑链接器有bug,那么使用 -x 来查看所有的触发。$ go build -xWORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754mkdir -p $WORK/hello/perf/_obj/mkdir -p $WORK/hello/perf/_obj/exe/cd /Users/jbd/src/hello/perf/Users/jbd/go/pkg/tool/darwin_amd64/compile -o $WORK/hello/perf.a -trimpath $WORK -p main...

    伏草惟存 发布于:2017年03月03 15:52:31
  • golang编译出来的程序变小golang程序瘦身

    golang语言是使用静态编译,但是由golang编译出来的程序确实有点大,我们需要对它进行一次廋身。作为惯例:我们第一个程序就是经典的Hello world!// hello project main.go package main import ( "fmt" ) func main() { fmt.Println("Hello World!") }使用go build hello.go 生成可执行文件 hello使用命令查看大小ll -h-rwxrwxr-x 1 root root 2.4M May 28 19:54 hello居然高大2.4MB。Go语言是静态编译,但是这个也太大了吧。我们提供一个给程序廋身的方法。使用命令:go build -ldflags "...

    AlfredZhao 发布于:2017年03月03 14:55:10
  • golang静态编译可执行文件、glibc静态编译golang静态编译

    在写golang程序的时候,虽然golang的思想是最终生成的静态可执行文件。但是,仍然依赖的glibc、pthread等标准库仍然会编译至程序中。在这里记录下我是如何实现静态编译的。首先,这是默认的编译参数编译出来的程序添加编译参数:go build --ldflags '-linkmode external -extldflags "-static"' client这样的程序就不依赖各种库啦!但是前提是必须先安装glibc-static的c标准库的静态编译版本,才能通过的哦。

    伏草惟存 发布于:2017年03月03 14:52:37
  • golang正则表达式示例golang正则表达式

    // 示例func main() {text := `Hello 世界!123 Go.`// 查找连续的小写字母reg := regexp.MustCompile(`[a-z]+`)fmt.Printf("%q\n", reg.FindAllString(text, -1))// ["ello" "o"]// 查找连续的非小写字母reg = regexp.MustCompile(`[^a-z]+`)fmt.Printf("%q\n", reg.FindAllString(text, -1))// ["H" " 世界!123 G" "."]// 查找连续的单词字母reg = regexp.MustCompile(`[\w]+`)fmt.Printf("%q\n", reg.FindAllString(text, -1))// ["H...

    zzgzzg00 发布于:2017年03月01 14:49:43
  • 为什么golang适合高并发场景?golang高并发

    典型的两个现实案例:我们先看两个用Go做消息推送的案例实际处理能力。360消息推送的数据:16台机器,标配:24个硬件线程,64GB内存 Linux Kernel 2.6.32 x86_64 单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10%,内存占用20GB (res) 目前接入的产品约1280万在线用户 2分钟一次GC,停顿2秒 (1.0.3 的 GC 不给力,直接升级到 tip,再次吃螃蟹) 15亿个心跳包/天,占大多数。 京东云消息推送系统(团队人数:4) 单机并发tcp连接数峰值118w 内存占用23G(Res) Load 0.7左右 心跳包 4k/s gc时间2-3.x sC10K问题为什么可以支撑这么高并发的请求呢?我们先从C10K...

    风萧萧兮易水寒 发布于:2017年02月24 10:41:11
  • go语言中的IPC之管道通信golang

    熟悉Unix/C编程的应该对IPC也非常的熟悉,多进程之间的通信主要的手段有管道/信号量/共享内存/Socket等,而管道作为父子进程间进行少量数据传递的有效手段也得到了广泛的应用,在这篇文章中我们来看一下go语言中如何使用管道进行进程进行通信。管道的使用在linux下,管道被非常广泛地使用,一般在编程中我们实现了popen等的应用即可提供管道功能。而在命令行中使用地也非常多,|就是最为典型的管道的应用例子。shell会为|符号两侧的命令各创建一个脚本,将左侧的输出管道与右侧的输入管道进行连接,可以进行单向管道通信。 比如我们使用go env来确认go语言的环境变量,然后使用grep从中确认出GOROOT环境变量的值一般会如下这样做[root@liumiaocn goprj]# go env |grep GOROOTGOROOT="/usr/local/go"[root@li...

    风萧萧兮易水寒 发布于:2017年02月16 14:22:33
  • 我理解的golang语言的设计哲学golang

    世界是并行的----先不说宇宙,就整个地球来说,世界万物都是并行发生的;天生对并发支持良好的go语言更容易描述并行的世界;世界是由物质组合构成的---微观世界:由小的粒子组合成大的粒子;宏观世界:由小的物体组合成大的物体;继承只能描述现实世界的一小部分,使用继承是不全面的;go的设计选择的是组合,这个和现实世界比较吻合的设计,表现力更强;世界是标准化的---随着生产力的发展,社会分工越来与详细,越来越多行业有了国际标准,任何一个国家的、任何一个公司只要按照这个标准生产器件,就能装配到一台机器上;IBM/PC就是硬件模块化和接口化一个最成功的例证;软件也可如此,go的接口是duck模型,面向接口编程,而不需要显示的声明,将语言能做的事情交给语言做;正交性--几何上的正交指的是两个向量垂直关系,一个向量在另一个向量方向的投影是一个点;现实中的正交是指多个因素,一个发生变化,不会影响其他的因素;...

    风萧萧兮易水寒 发布于:2017年02月16 14:17:39
  • 使用golang进行并发编程golang并发编程

    golang普通方法:package main import ( "fmt" ) func rand_generator_1() int { return rand.Int() } func main() { fmt.Println(rand_generator_1()) } golang生成器:package main import ( "fmt" "math/rand" ) /** * 生成器 * 根据已知权限使用函数生成相应数据,异步调用节省了大量时间。 * @author: niuyufu */ func rand_generator_1() int { return rand.Int() } //直接...

    zzgzzg00 发布于:2017年02月06 09:39:02
  • Go语言的这些用法”奇怪“吗??golang技巧

    1 Go语言”奇怪用法“有哪些?1,go的变量声明顺序是:”先写变量名,再写类型名“2,go是通过package来组织的(与python类似),只有package名为main的包可以包含main函数,一个可执行程序有且仅有一个main包,通过import关键字来导入其他非main包。3,可见性规则。go语言中,使用大小写来决定该常量、变量、类型、接口、结构或函数是否可以被外部包含调用。根据约定,函数名首字母小写即为private,函数名首字母大写即为public。4,go内置关键字(25个均为小写)。5,函数不用先声明,即可使用。6,在函数内部可以通过 := 隐士定义变量。(函数外必须显示使用var定义变量)7,go程序使用UTF-8编码的纯Unicode文本编写。9,从技术层面讲,go语言的语句是以分号分隔的,但这些是由编译器自动添加的,不用手动输入,除非需要在同一行中写入多个语句。没有...

    禁心尽力 发布于:2017年01月15 17:25:07
  • 21个go语言实例,从简单到复杂入门资料golang入门资料

    21个实例只作为初学者快速了解golang语法,快速了解与其他语言不同之处。下面的示例都可以在本站进行在线运行测试在线运行地址: https://www.bytelang.com/online/run-code/golang1.hello,world:package main import "fmt" func main() { fmt.Println("hello,world") // 输出 hello,world}1). package 将程序打包;2). import 导入其他包,包名用双引号引住;fmt 包 —— 应该是 format 格式化输入/输出的包;3). func 声明函数,main 函数,不带参数,不返回值,函数体用 { } 括号括住;左大括号 { 与声明在同一行(必须!);4). fmt.Println 向控制台输出,包名小写...

    风萧萧兮易水寒 发布于:2017年01月13 16:35:23
  • golang浅析之interface(接口)go接口编程

    golang接口简介go语言不是传统的面向对象语言,因此没有类和继承的概念。go语言中的接口跟java中的接口有点类似,接口可以有多个实现。go语言的接口是go的一种类型,用来指定一组方法(方法集),go的接口归根结底就是一个方法集合。go语言实现接口的方式不像java一样用implements关键字来实现,而是只要实现了接口中的所有方法就认为是实现了接口,这是一种规范或者叫约定(隐式实现)。go语言中的接口往往都很短,不会存在太多方法,一般只有0到5个。golang接口声明(定义)type 接口名 interface { Method1(param_list) return_type Method2(param_list) return_type ...}golang接口使用在Java中我们通过implements可以实现接口,那么在golang中怎么实现接口...

    伏草惟存 发布于:2017年01月11 13:59:22
  • 谈谈golang网络库的入门认识golang

    Go语言的出现,让我见到了一门语言把网络编程这件事情给做“正确”了,当然,除了Go语言以外,还有很多语言也把这件事情做”正确”了。我一直坚持着这样的理念——要做"正确"的事情,而不是"高性能"的事情;很多时候,我们在做系统设计、技术选型的时候,都被“高性能”这三个字给绑架了,当然不是说性能不重要,你懂的。目前很多高性能的基础网络服务器都是采用的C语言开发的,比如:Nginx、Redis、memcached等,它们都是基于”事件驱动 + 事件回掉函数”的方式实现,也就是采用epoll等作为网络收发数据包的核心驱动。不少人(包括我自己)都认为“事件驱动 + 事件回掉函数”的编程方法是“反人类”的;因为大多数人都更习惯线性的处理一件事情,做完第一件事情再做第二件事情,并不习惯在N件事情之间频繁的切换干 活。为了解决程序员在开发服务器时需要自己的大脑不断的“上下文切换”的问题,Go语言引入了一种用...

    AlfredZhao 发布于:2017年01月10 10:52:10