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

golang 读写文件

1.读文件 package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) //读取文件需要经常进行错误检查,这个帮助方法可以精简下面的错误检查过程。 func check(e error) { if e != nil { panic(e) } } func main() { //也许大部分基本的文件读取任务是将文件内容读取到内存中。 dat, err := ioutil.ReadFile("/tmp/dat") check(err) fmt.Print(string(dat)) //你经常会想对于一个文件是怎么读并且读取到哪一部分进行更多的控制。对于这个任务,从使用 os.Open打开一个文件获取一个 os.File 值开始。 f, ...阅读全文

博文 2015-04-21 03:00:01 benlightning

【GoLang笔记】遍历map时的key随机化问题及解决方法

之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的。由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的。熟悉hashmap的同学对这个情况应该非常清楚。 所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明。 1. 通过range遍历map时,key的顺序被随机化 在golang 1.4版本中,借助关键字range对Go语言的map做遍历访问时,前后两轮遍历访问到的key的顺序居然是被随机化的! 这个现象在其它语言中是很少见的,比如C语言实现hashmap时,通常会用数组(即一段连续的内存空间)来存key,虽然key的...阅读全文

博文 2015-04-02 19:00:01 slvher

如何为Linux安装Go语言

导读 Go 语言又称为 golang, 是由 Google 最初开发的一种开源编程语言,其在设计时就遵循了简单、安全和速度的 3 大原则。Go 语言具有多种调试、测试、分析和代码审查工具,如今 Go 语言和工具已在大多数 Linux 发行版本的源库中进行提供,本文我就来说明如何为 Linux 安装 Go 语言。 Ubuntu、Debian或Linux Mint安装Go语言 基于 Debian的 Linux 发行版本都可以使用 apt-get 命令来进行安装: sudo apt-get install golang 要查看当前系统安装的 Go 语言版本可以使用如下命令: go version 由于 Go 代码必需保存在 workspace(工作区)中,所以我们必需在 Home 目录(例如 ~/...阅读全文

博文 2016-07-08 08:00:00 linux130

go语言exec包调用shell命令

工程中需要用到ffmpeg,想直接用exec包调用shell命令。本来以为很简单,结果折腾了一下午,最后查到了解决方案。 假如之前执行报错的语句为: cmd := exec.Command("echo", "'helloworld!'") out, err := cmd.Output() 那么改为: c := "echo hello world" cmd := exec.Command("sh", "-c", c) out, err := cmd.Output() 即可! 感谢万能的stack overflow reference: https://stackoverflow.com/questions/20437336/how-to-execute-system-command-in-go...阅读全文

博文 2016-08-18 17:00:03 yypnathan

Go项目的目录结构

项目目录结构如何组织,一般语言都是没有规定。但Go语言这方面做了规定,这样可以保持一致性,做到统一、规则化比较明确。 1、一般的,一个Go项目在GOPATH下,会有如下三个目录: |--bin |--pkg |--src 其中,bin存放编译后的可执行文件;pkg存放编译后的包文件;src存放项目源文件。 一般,bin和pkg目录可以不创建,go命令会自动创建(如 go install),只需要创建src目录即可。 对于pkg目录,曾经有人问:我把Go中的包放入pkg下面,怎么不行啊?他直接把Go包的源文件放入了pkg中。 这显然是不对的。pkg中的文件是Go编译生成的,而不是手动放进去的。(一般文件后缀.a) 对于src目录,存放源文件,Go中源文件以包(package)的形式组织。通常,...阅读全文

博文 2016-03-11 10:00:02 zsy

新手问题 go build 找不到 go source files

mac环境,在项目目录下 go build ,显示“can't load package: package .: no buildable Go source files in /Users/xxxx/Documents/goworkspace/test/calcproj” 项目目录:/Users/xxxx/Documents/goworkspace/test/calcproj 目录下有 bin /pkg/src目录 ,src下有calc.go (包含main函数) $ echo $GOPATH /Users/xxxx/Documents/goworkspace/test/calcproj/ go install 也是同样的问题,找不到 Go s...阅读全文

设置GOPATH

使用go语言开发, 环境变量GOPATH的设置是第一步, 我们可以指定一个自己常用的目录, 我个人喜欢使用 /usr/local/src/go_path 全局设置 vi /etc/profile 在文件的结尾加上 export GOPATH=/usr/local/src/go_path 使配置马上生效 source /etc/profile 用户级别设置 vi ~/.bash_profile 在文件的结尾加上 export GOPATH=/usr/local/src/go_path 使配置马上生效 source /etc/profile 临时生效 直接在命令行添加 export GOPATH=/usr/local/src/go_path 这种方式, 在关闭shell或重启机器会失效 配置好之...阅读全文

博文 2017-02-10 14:44:11 yin32167

在 Linux 中使用 Go 作为脚本语言

在 `Cloudflare` 的人们都非常喜欢 Go 语言。我们在许多[内部软件项目](https://blog.cloudflare.com/what-weve-been-doing-with-go/)以及更大的[管道系统](https://blog.cloudflare.com/meet-gatebot-a-bot-that-allows-us-to-sleep/)中使用它。但是,我们能否进入下一个层次并将其用作我们最喜欢的操作系统 Linux 的脚本语言呢? ![image here](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-script/gopher-tux-1.png) ## 为什么考虑...阅读全文

博文 2018-02-27 15:59:22 shniu

统计redis中某类key的数量,代替keys指令

redis使用过程中会存在查询某类key的数量问题,较简单的办法为通过redis-cli结合keys进行操作,由于keys的工作机制导致线上一般禁用该指令,以下shell脚本通过scan实现统计功能。#!/bin/bashA=$0B=${A##*/}C=${B%.*}running_file_name=$Crunning_flag="run.$running_file_name"REDIS_CLIENT='redis-cli -h 0.0.0.0 -p 6379 -x'function process { echo $0 index=-1 count=0 step=100000 while ((index!=0)) do if [ $index -le 0 ];then index=0 fi...阅读全文

博文 2018-08-17 10:52:54 hansegod

golang执行linux命令

golang exec 执行系统命令 golang 2014-09-25 13:17:44 2779 0 0 exec.Command() 最简单的方法: cmd := exec.Command("/bin/sh/", "-c", "linux命令") 或复杂的, 各个参数都要单独写 cmd := exec.Command("ls", "-l", "-a") package main import ( "bytes" "fmt" "os/exec" ) func main() { in := bytes.NewBuffer(nil) cmd := exec.Command("sh") cmd.Stdin = in go func() { in.WriteString("echo hello ...阅读全文

博文 2016-08-31 17:00:02 zhangym

go imports添加

go imports包的引入可以让代码书写变得更加快捷 ### 一、如果有VPN,直接使用命令 `go get -g -v golang.org/x/tools/cmd/goimports` ### 二、网络不通的情况可以使用一下操作 打开一个terminal,到达goroot下(echo $GOROOT),运行 `go get github.com/gpmgo/gopm` (原理是从镜像里获得) 下载结束后用git命令进行安装 然后再进入到GOPATH中找到github.com/gpmgo包,运行gopm即可: `go gopm get -g -v golang.org/x/tools/cmd/goimports` (参数-g是下载包到本地GOPATH中,-v是显示下载情况) 再次回到GO...阅读全文

博文 2018-10-03 16:29:41 ace_kylin

如何在 Linux 上使用 x2go 设置远程桌面

本文系转载文章,原文链接:https://linux.cn/article-5708-1.html 由于一切都迁移到了云上,作为提高职员生产力的一种方式,虚拟远程桌面在工业中越来越流行。尤其对于那些需要在多个地方和设备之间不停漫游的人,远程桌面可以让他们和工作环境保持无缝连接。远程桌面对于雇主同样有吸引力,可以在工作环境中提高敏捷性和灵活性,由于硬件整合、桌面安全加固等原因降低 IT 花费。 在 Linux 世界中,理所当然设置远程桌面有很多选择,支持许多协议(例如 RDP、RFB、NX) 和服务器/客户端实现(例如TigerVNC、RealVNC、FreeNX、x2go、X11vnc、TeamViewer 等等)。 这当中有个出色的产品叫做 X2Go,它是一个基于 NX(译者注:通过计算机...阅读全文

博文 2016-01-30 08:00:00 yangkuanqaz85988

Golang实现简单tcp服务器02 -- 实现echo服务器/客户端

用Golang实现 echo服务器/客户端 本节我们就从实现一个简单的echo的服务端/客户端来入手, 了解golang的实现tcp长连接服务器的具体细节. 首先, 我们先列一下**服务端的实现思路及步骤**:1. 创建一个套接字对象, 指定其IP以及端口.2. 开始监听套接字指定的端口.3. 如有新的客户端连接请求, 则建立一个goroutine, 在goroutine中, 读取客户端消息, 并转发回去, 直到客户端断开连接4. 主进程继续监听端口. 我们可以在实验环境的主文件夹中, 建立一个名为server.go的文件, 在其中编写服务器端程序代码服务端程序清单如下: server.go package main import ( "bufio" "fmt" "net" "time" )...阅读全文

博文 2015-06-02 23:00:16 victoriest

supervisor运行golang守护进程

最近在鼓捣golang守护进程的实现,无意发现了supervisor这个有意思的东西。supervisor是一个unix的系统进程管理软件,可以用它来管理apache、nginx等服务,若服务挂了可以让它们自动重启。当然也可以用来实现golang的守护进程,下面描述下具体实现。 安装supervisor 基于centos 6.4。 supervisor使用python编写的,可以用easy_install安装。centos上默认有python的运行环境,安装起来就非常简单了。 $ sudo yum install python-setuptools $ sudo easy_install supervisor 如果没有看到什么报错,那么就安装成功了,可以使用echo_supervisord_...阅读全文

博文 2015-07-17 03:00:00 cnsanshao

go语言web框架比较:gin vs iris vs echo

前言 由于golang提供了完善的net/http标准库,基于该标准库实现一个web框架的难度相比其他语言低了不少,所以go web框架简直就是百花齐放。从老牌的revel和beego,到新出的gin,和iris等,而且还有一些类似于chi这种router。个人一般小项目,尤其是中间件需要暴露一些http接口的,基本就使用chi即可。本次测试主要是gin iris echo 这三个框架。侧重在于高性能,从并发和json序列化和反序列化两个方面来测评,毕竟后台项目侧重的也就是这两个方面。 测试 测试环境说明 为了选择符合重IO的框架,现设定如下场景的demo,demo的具体要求如下: 打开日志功能(模拟正常业务时也会记录日志),在请求开始和结束时分别记录一条日志 接口中用sleep暂停1秒,假...阅读全文

博文 2018-02-26 17:34:40 iyacontrol

go post 上传文件的例子

go post 上传文件 package main import ( "bytes" "fmt" "io" "mime/multipart" "net/http" "os" ) func postFile(filename string, target_url string) (*http.Response, error) { body_buf := bytes.NewBufferString("") body_writer := multipart.NewWriter(body_buf) // use the body_writer to write the Part headers to the buffer _, err := body_writer.CreateFormFile("u...阅读全文

博文 2017-11-01 16:00:06 276815076

golang实现tcp接入服务器

接入服务器和后端业务服务其维持tcp连接,多个前端请求通过接入服务器访问后端业务服务器,接入服务器可以方便增加路由功能,维护多个业务服务器,根据消息ID路由到具体的业务服务器。 项目目录如下 simplelotus src lotus main.go lotuslib tcplotus.go test tcpclient.go tcpserver.go install install源码如下: #!/usr/bin/env bash if [ ! -f install ]; then echo 'install must be run within its container folder' 1>&2 exit 1 fi CURDIR=`pwd` OLDGOPATH="$GOPATH" ex...阅读全文

博文 2014-10-04 19:26:13 ciaos

Golang 获取用户 home 目录路径

os/user改进参考 os/user 一般情况下我们可以使用 os/user 包提供的 Current() 函数来获取用户信息: user, err := user.Current() if nil == err { return user.HomeDir, nil } 但这个方式交叉编译后不能完全跨平台,在 darwin 下需要 cgo 才能正常工作。 改进 为了解决这个问题,我们需要进行一点增强,在通过 os/user 获取失败时再通过环境变量、命令来获取: // Home returns the home directory for the executing user. // // This uses an OS-specific method for discovering th...阅读全文

博文 2015-04-05 11:21:30 88250

Centos 搭建golang环境,vim高亮go关键字设置

Centos 搭建golang环境,vim高亮go关键字设置 1:下载 https://golang.org/dl/ 下载 go1.4.1.linux-amd64.tar.gz ArchiveLinux64-bit 2:切换sudo权限解压到/usr/local/目录下 tar xzvf go1.3.linux-amd64.tar.gz -C /usr/local/ 3:返回普通用户权限 4:设置PATH vi ~/.bash_profile export GOROOT=/usr/local/go export GOBIN=$GOROOT/bin export GOPATH=$HOME/golang_git 这个设置为git go的库时的下载路径 PATH=$PATH:$GOBIN expo...阅读全文

博文 2015-01-22 23:00:01 ppppppppp2009

5分钟学习基于Go,go-microservice-template,Minke的微服务

【编者的话】本篇文章介绍了Go语言下构建微服务的例子,作者利用一个helloword讲解了如何使用他的微服务框架,该框架不仅包含了构建服务,还包括路由、请求验证、日志记录、测试、动态配置变更,最后将提供了将服务整合到Docker容器并持续集成。本文干货满满,虽然需要一些对Go语言的基础,但是这构建微服务的思路是通用的。 @Container容器技术大会将于6月4日在上海光大会展中心国际大酒店举办,来自携程、PPTV、蚂蚁金服、京东、浙江移动、海尔电器、唯品会、eBay、道富银行、麻袋理财、土豆网、阿里百川、点融网等公司的技术负责人将带来实践经验分享,3月21日之前购票只需238元,欢迎感兴趣的同学抢购。 介绍几周前我去参加一个零售环境下的技术会议,直到午饭时间都没人提及'Docker'或者'...阅读全文

博文 2016-03-25 11:19:45 Sonyfe25cp

golang实现异步并发sokect

搜索golang + epoll的例子,得到下面这段代码,感觉golang的编程思维真正做到了并行编程: package main import ( "fmt" "net" "os" "time" ) const ( MAX_CONN_NUM = 5 ) //echo server Goroutine func EchoFunc(conn net.Conn) { defer conn.Close() buf := make([]byte, 1024) for { _, err := conn.Read(buf) if err != nil { //println("Error reading:", err.Error()) return } //send reply _, err = con...阅读全文

博文 2014-10-04 19:26:38 yunfound

golang中的检验hash

1.对字符串进行hash 大家可以看一下, SHA1 Hashes Go by Example写道: The pattern for generating a hash is sha1.New(), sha1.Write(bytes), then sha1.Sum([]byte{}). 附上golang代码 package main import ( "crypto/sha1" "fmt" ) func main() { s := "sha1 this string" h := sha1.New() h.Write([]byte(s)) bs := h.Sum(nil) fmt.Println(s) fmt.Printf("%x\n", bs) } 结果输出为: sha1 this stri...阅读全文

博文 2014-10-04 19:26:00 getong

etcd v3 服务注册与发现 Go代码

本文整理一下思路,编写示例(golang),以便加深etcd的理解 大致如下,监听程序为master,服务为service 1 service 启动时向etcd注册自己的信息,即注册到services/ 这个目录 2 service 可能异常推出,需要维护一个TTL(V3 使用 lease实现),类似于心跳,挂掉了,master可以监听到 3 master监听 services/ 目录下的所有服务,根据不同action(V3有put/delete),进行处理 service注册 提供 key(service name), value(serviceInfo)进行registered start 启动后,执行keeplive(), 维护心跳,挂掉时revoke() 同时监听 stop chan...阅读全文

博文 2018-01-13 00:30:00 sevenPP

go-bindata 安装

go get -u github.com/jteeuwen/go-bindata/... 执行后仍然没有找到go-bindata命令 echo $GOPATH /root/devhome/golang/go_demo cd /root/devhome/golang/go_demo/bin 可以看到下载的go-bindata在这里 cp 它到 环境变量下/root/bin/go/bin $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

博文 2016-01-27 18:00:03 lampqiu

golang的ssh包

git clone https://github.com/golang/crypto.git,复制到 golang.org/x/ 目录下。 常常用来建立ssh连接发送一条命令,但有时需要模拟ssh客户端功能,即直接连接上远程主机一直操作:(http://www.zhihu.com/question/30368538/answer/47835043) package main import ( "golang.org/x/crypto/ssh" "log" "os" ) func main() { ce := func(err error, msg string) { if err != nil { log.Fatalf("%s error: %v", msg, err) } } client...阅读全文

博文 2016-04-06 10:00:46 tianyajuanke

Ubuntu升级go版本

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nick_666/article/details/80193801 sudo apt install golang-go sudo apt-get install golang-1.9 sudo apt-get remove golang-1.9 sudo apt autoremove 先卸载旧版本 curl -O https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz $ tar -C /usr/local -zxvf go1.9.linux-amd64.tar.gz $ mkdir -p ~/go/src $ echo "...阅读全文

博文 2019-03-20 21:31:34 Nick_666

使用golang监控目录文件变化

想写个程序,监控目录和文件变化,原先目录非常大,所以感觉要用goroutine对每个目录派生一个goroutine进程,但程序在运行的时候发现,打开的目录非常多,以致系统出错,我们先来看看这个失败的程序,目录小是没有问题的。 // main.go package main import ( // "fmt" "io/ioutil" "log" "os" "path/filepath" // "regexp" "runtime" "strings" "github.com/fsnotify/fsnotify" ) type Fm struct { Basedir string Watcher *fsnotify.Watcher Wdone chan bool Dirchan chan stri...阅读全文

博文 2017-09-10 07:43:10 YiYou.Org

用golang编写简单的Echo Server

用golang编写简单的Echo Server 这段时间在看golang的网络编程方面的内容,网络知识很浅薄啊,很多东西还要不断的学习,很多也看不懂,今天先来一个简单的内容,用golang写一个简单的echo server。 TCP/IP协议 大家都知道TCP/IP协议簇是当今网络世界的事实标准协议,与其对应的是OSI的七层模型,对于这七层模型这里就不再赘述了,这里只是简单介绍一下TCP/IP的四层模型。 TCP/IP的四层模型最下面是一个物理层,上面是网络层,再往上就是传输层,最后是应用层了,分层的概念相信大家都之的,这样在不同层之间变化就是打包或者解包,简单来说就是加上头信息或者去掉头信息。 golang API golang的net包里面有很方便的API供我们使用,这个API主要可以划...阅读全文

博文 2014-10-04 19:26:06 wowzai

一个好的 Go 语言 Makefile 是怎样的

精简的 Makefile,用于简化构建和管理用 Go 编写的 Web 服务器。 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/a-good-makefile-for-go/makefile-process.gif) 我偶然调整我的 Makefiles 来加快我的开发过程,一天早上有点时间,我决定与大家分享其中诀窍。 总而言之,我使用 Go 构建 Web 服务器,我对 Makefile 的期望如下: - 高级,简单的命令。比如:`compile` `start` `stop` `watch` 等等 - 管理具体项目环境的变量,它应该包含 `.env` 文件 - 开发模式,修改时自动编译 - 开发模式,修...阅读全文

博文 2018-09-19 11:05:13 lightfish-zhang

Shadowsocks-go一键安装脚本

Shadowsocks-go一键安装脚本 本脚本适用环境: 系统支持:CentOS,Debian,Ubuntu 内存要求:≥128M 关于本脚本: 一键安装 Go 版的 shadowsocks 最新版本 1.1.5。据说 go 版本有 buff 。与 Python 版不同的是,其客户端程序能使用多个服务端配置,本脚本安装的是服务端程序。作者默认推荐 aes-128-cfb 加密,基于一致性,脚本使用了 aes-256-cfb 加密方式。 默认配置: 服务器端口:自己设定(如不设定,默认为 8989) 客户端端口:1080 密码:自己设定(如不设定,默认为teddysun.com) 客户端下载: https://github.com/shadowsocks/shadowsocks-window...阅读全文

博文 2016-12-24 05:00:02 PengTdy

go语言之Cmd.start, Cmd.Wait

package main import ( "fmt" "log" "os/exec" "encoding/json" ) func main() { cmd := exec.Command("echo", "-n", `{"Name": "Bob", "Age": 32}`) stdout, err := cmd.StdoutPipe() if err != nil { log.Fatal(err) } if err := cmd.Start(); err != nil { log.Fatal(err) } var person struct { Name string Age int } if err := json.NewDecoder(stdout).Decode(&person);...阅读全文

博文 2015-06-17 23:07:38 zistxym

Golang实现ping

ICMP部分的结构 报头 ICMP报头从IP报头的第160位开始,即第20个字节开始(除非使用了IP报头的可选部分)。 Bits 160-167 168-175 176-183 184-191 160 Type Code 校验码(checksum) 192 ID 序号(sequence) Type - ICMP的类型,标识生成的错误报文;Code - 进一步划分ICMP的类型,该字段用来查找产生错误的原因.;例如,ICMP的目标不可达类型可以把这个位设为1至15等来表示不同的意思。Checksum - 校验码部分,这个字段包含有从ICMP报头和数据部分计算得来的,用于检查错误的数据,其中此校验码字段的值视为0。ID - 这个字段包含了ID值,在Echo Reply类型的消息中要返回这个字段。...阅读全文

博文 2016-04-13 22:00:06 simplelovecs

用go来做嵌入式开发-程序瘦身

# 用go来做嵌入式开发-程序瘦身 在嵌入式设备中一般存储控件都比较小,go编译后的程序包含运行时,体积一般比较大,所以我们需要对程序做一个瘦身,瘦身的方法很简单,编译的时候去除调试信息,然后使用upx来做压缩,upx支持各种cpu架构的压缩 ## 编译脚本 我使用的mtk7688的芯片,mips架构,因此对应的编译脚本如下 ``` ::高通方案althon方案的cpu ::set GOARCH=mips ::mtk方案的cpu @echo off set GOARCH=mipsle set GOOS=linux set GOMIPS=softfloat set CGO_ENABLED=0 set dd=%date:~8,2% set mm=%date:~5,2% set yy=%date:...阅读全文

博文 2019-06-30 10:27:25 byteman

[go]ipv6 ping测试

其实很简单.就是对照go源码的ipraw_test.go和之前的ping.go 改造一个ping6.go.变化很小 // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // taken from http://golang.org/src/pkg/net/ipraw_test.go //20131204,尝试改造支持ipv6 package ping6 import ( "bytes" "errors" "net" "os" "t...阅读全文

博文 2014-10-04 19:25:56 laputa73

golang简单实现Websocket

首先获取websocket包, 在获取的时候好像需要下载什么什么hg的一个软件之后可以成功执行 go get code.google.com/p/go.net/websocket 步入正题 服务端: import ( "code.google.com/p/go.net/websocket" "fmt" "log" "net/http" ) func main() { fmt.Println("Start app") http.Handle("/", websocket.Handler(Echo)) if err := http.ListenAndServe(":4001", nil); err != nil { log.Fatal("ListenAndServe:", err) } } fu...阅读全文

博文 2016-03-04 03:00:06 u013701108

除了写代码,还有诗和远方

**除了写代码,还有诗和远方** --- ![1.jpg-80.9kB][1] **“生活不止眼前的苟且** **还有诗和远方的田野** **你赤手空拳来到人世间** **为找到那片海不顾一切”** 许巍联袂高晓松的这首“生活不止眼前的苟且”最近已经红遍各大朋友圈。这首歌虽然不是许巍歌曲中最具有代表性的一曲,只因为这四句直戳人心也已足够。 苟且生活的人,最后也将被生活抛弃。 --- 程序员,在我心中一直不是一个苟且的工作。 朝九晚五的工作,对于程序员基本是不现实的。 我们,早上上班看得见朝阳升起,晚上下班看不见北京堵车。 虽然各家咨询机构都提到过程序员的薪资在随着入行时间的增长,而不断提升。但是面对北上广深飞速攀升的房价...阅读全文

Go 编译过程分析(一) -- 编译脚本

http://blog.csdn.net/free2o/article/details/38417293 go 语言最近很火,与时俱进,我也看了看go 的语法。 看起来 go 还是不错的,有很多新的feature。 就下载了代码研究了一下。 go 的 src 目录下面存在三套编译文件: window 平台, 所有 bat 文件plan9 平台,所有 rc 文件unix 类平台,所有bash 文件 以 unix 编译文件为例, go 的编译入口时在 src/all.bash , 这是一个bash 脚步, 这个脚步只是简单的调用了 make.bash 在脚步结束之后,调用 dist banner 输出编译的信息。 [plain] view plaincopy set -e if [ ! -f m...阅读全文

博文 2015-04-30 15:00:26 working_brain

阿里云上Ubuntu14.04-64位安装Gogs

sudo apt-get update sudo apt-get upgrade sudo adduser gogs //创建用户 密码 ******* su gogs//切换到gogs用户 cd ~ //进入用户gogs根目录 sudo apt-get install git //安装git git --version //检查git是否安装成功 sudo apt-get install mysql-server //安装mysql数据库 账户:root 密码:******** mysql --version //检查mysql版本判断是否安装成功 //创建数据gogs mysql -u root -pmysql> SET GLOBAL storage_engine = 'InnoDB';...阅读全文

博文 2015-02-05 14:00:02 路峰

Golang websocket

环境:Win10 + Go1.9.2 1.先下载并引用golang的websocket库 ①golang的官方库都在https://github.com/golang下,而websocket库在/net下。 ②如果没有安装Git,需要先安装Git。 ③使用go get -u github.com/golang/net/websocket下载代码,将安装在环境变量GOPATH配置的路径中。 代码中使用路径为 "golang.org/x/net/websocket",在对应路径下没有代码的话则引用出错,可将对应代码放在GOPAHT/golang.org/x/net下。 2.服务端Go代码 package main import ( "fmt" "golang.org/x/net/websocke...阅读全文

博文 2018-03-29 17:33:11 mickelfeng

go RPC服务过程

标准库的RPC RPC是远程调用的简称, 简单的说就是要像调用本地函数一样调用服务器的函数. Go语言的标准库已经提供了RPC框架和不同的RPC实现. 下面是一个服务器的例子: type Echo int func (t *Echo) Hi(args string, reply *string) error { *reply = "echo:" + args return nil } func main() { rpc.Register(new(Echo)) rpc.HandleHTTP() l, e := net.Listen("tcp", ":1234") if e != nil { log.Fatal("listen error:", e) } http.Serve(l, nil) }...阅读全文

博文 2016-10-16 11:00:01 tyq101010

新手环境报错,找不到包

sublime3下执行go run main.go报如下错误: main.go:9:5: cannot find package "server/rest" in any of: /usr/local/go/src/server/rest (from $GOROOT) /Users/runc/code/golang/src/server/rest (from $GOPATH) exit status 1 本机环境: runc:rest > echo $GOROOT /usr/local/go runc:rest > echo $GOPATH /Users/runc/code/golang 项目当前目录: runc:rest...阅读全文

PHP和Golang使用Thrift1和Thrift2访问Hbase0.96.2(ubuntu12.04)

目录: 一、Thrift1和Thrift2的简要介绍 1) 写在前面 2) Thrift1和Thrift2的区别 二、Thrift0.9.2的安装 1) 安装依赖插件 2) Thrift0.9.2的编译 3) Thrift0.9.2编译后,配置成可执行文件 三、Hbase0.96.2的安装 1) Hbase的介绍 2) Hbase的安装 3) Hbase基于源码的Thrift生成接口文件 四、PHP和Golang使用Thrift1和Thrift2访问Hbase 1) PHP基于Thrift1访问Hbase 2) Golang基于Thrift2访问Hbase 五、常见问题 六、扩展阅读 目录: 一、Thrift1和Thrift2的简要介绍 1) 写在前面 从Hbase0.94.11开始有两套t...阅读全文

博文 2014-10-07 22:38:36 lion.net

Echo框架Go 语言 Web 开发,新手快来学

地址: github.com/labstack/echo 官网: http://labstack.com/echo/ Echo 是个快速的 HTTP 路由器(零动态内存分配),也是 Go 的微型 Web 框架。 特性: 快速 HTTP 路由器,智能优先可扩展中间件,支持: echo.MiddlewareFunc func(echo.HandlerFunc) echo.HandlerFunc echo.HandlerFunc func(*echo.Context) error func(http.Handler) http.Handler http.Handler http.HandlerFunc func(http.ResponseWr...阅读全文

服务器网络库cellnet

# cellnet [![Build Status][3]][4] [![Go Report Card][5]][6] [![MIT licensed][11]][12] [![GoDoc][1]][2] [1]: https://godoc.org/github.com/davyxu/cellnet?status.svg [2]: https://godoc.org/github.com/davyxu/cellnet [3]: https://travis-ci.org/davyxu/cellnet.svg?branch=v3 [4]: https://travis-ci.org/davyxu/cellnet [5]: https://goreportcard.com/b...阅读全文

开源项目 2017-07-31 08:33:49 Davy xu

golang web程序开机自动启动,并隐藏cmd窗口

注意:本文中设计的方法,虽然能够隐藏控制台窗口,但并不是真正意义的"后台运行",此时,如果注销服务器,那么所有运行的golang网站服务程序都会终止,解决办法: 点击使用.net完美解决服务器注销后go的web服务停止的问题 如果一个服务器有10个golang的web,每一个都显示一个cmd窗口的话,会很难看,解决如下: 1)go build 你的web 生成一个exe文件 例如 我的项目叫 "myweb",那么我需要在我的项目根目录上面打开cmd,执行一条命令就可以了: go build myweb .就会生成一个myweb.exe文件 2)制作bat文件 通过bat文件启动该exe文件: 新建一个空bat文件,把上一步生成的myweb.exe的绝对路径添加到bat文件中,这样双击bat文...阅读全文

博文 2015-06-17 20:02:34 zhifeiya

在golang中使用leveldb

leveldb是一个很强悍的kv数据库,自然,我也希望能在go中使用。 如果有官方的go leveldb实现,那我会优先考虑,譬如这个,但是该库文档完全没有,并且在网上没发现有人用于实战环境,对其能否在生产环境中使用打上问号,保险起见,我还是决定不使用。 因为leveldb有c的接口,所以通过cgo能很方便的进行集成,所以我决定采用该种方式,幸运的是,已经有人做了cgo的版本,也就是levigo。 使用levigo,需要编译安装leveldb,如果需要压缩支持还需要编译snappy,为了简单,我写了一个构件脚本,如下: #!/bin/bash #refer https://github.com/norton/lets/blob/master/c_src/build_deps.sh #你必须在...阅读全文

博文 2014-10-04 19:27:02 siddontang

在 Golang 中用名字调用函数

上个星期,我写了篇《Function call by name in Golang》。由于是英文的,所以被人诟病(说谁,谁知道!)。好吧,现在用中文重新写一遍。 Golang 中的函数跟 C 的一样,是个代码块,不过它可以像其他类型那样赋值给一个变量。 如果你对函数不熟悉,《Codewalk: First-Class Functions in Go》应该是个不错的起点。已经有所了解?那么继续吧! 首先,来看看这段 PHP 代码: function foobar() { echo "Hello Golang\n"; } $funcs = array( "foobar" => "foobar", "hello" => "foobar", ); $funcs["foobar"](); $funcs...阅读全文

博文 2014-10-09 16:17:11 mikespook

Golang安装和环境配置

安装golang: 下载安装包,国内地址:https://golang.google.cn/dl/ $ sudo tar -C /usr/local -xzf go1.12.5.linux-amd64.tar.gz //解压 添加环境变量,修改/etc/profile 或$HOME/.profile或/etc/profile.d/目录的文件 $ sudo vi /etc/profile.d/brianconfig.sh //添加以下内容 export GOROOT=/usr/local/go //定义GOROOT export PATH=$PATH:/usr/local/go/bin // 添加go/bin到系统环境变量PATH中 export GOPATH=/work/wks_golang...阅读全文

博文 2019-06-02 19:34:39 布谷李

go 1.5.1性能提升巨大

之前有说过,我们的momo_worker项目是使用go编写的,当时是基于1.4.2这个版本,今天(2015年9月9日)google发布了go 1.5.1,之前因为go 1.5 bug太多就没有升级,这次升级了一下,试试看效果。1.4.2和1.5.1的具体对比就不贴了,大家有兴趣自行google吧,下面主要展示下go1.5.1的在我们生产环境下的性能提升。 momo_worker 通过上面3张图能看出,3点后cgo calls大幅下降,这应该是得益于go去掉了大量的c代码。gc、threads、file descriptor、memory都有大幅下降。 这里还体现不出go 1.5.1的性能有多少提升,不过已经能看出来,在系统资源的消耗上,1.5.1有了巨量的下降。 echo test 这里通过...阅读全文

博文 2015-09-09 19:56:58 LYY