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

Go与GUI——GO语言的图形界面Walk

GO没有原生的界面库,所以不能直接用来写GUI界面。但最近互联网上已经涌现出不少成熟、好用的第三方界面库。使用它们,就同样可以写出同C#、C++的界面。而且效率还更胜一筹。 关于Walk界面库(官方介绍): Walk是一个写给Golang的Window应用程序库套件,它主要用于桌面GUI的开发,但也有更多的东西。 Part One:安装Walk 在浏览这部分前,请确定已经配置安装完毕go语言的环境。如果没有,可以参考go官网的Install帮助。另外,注意:这个Walk库只能运行在Go 1.1.x及以上。 要安装Walk很简单,只要运行命令:go get github.com/lxn/walk 等待命令执行完毕,这时候检查GOPATH的src与pkg下,是否有符合自己计算机环境的walk目录...阅读全文

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 build和go install的区别

go build通过go build加上要编译的Go源文件名,我们即可得到一个可执行文件,默认情况下这个文件的名字为源文件名字去掉.go后缀。 $ go build hello.go $ lshello hello.go 当然我们也 可以通过-o选项来指定其他名字: $ go build -o mygo hello.go $ lsmygo hello.go 如果我们在go-examples目录下直接执行go build命令,后面不带文件名,我们将得到一个与目录名同名的可执行文件: $ go build $ lsgo-examples hello.go go install与build命令相比,install命令在编译源码后还会将可执行文件或库文件安装到约定的目录下。 go install编译...阅读全文

go语言:sync.Once的用法

sync.Once.Do(f func())是一个挺有趣的东西,能保证once只执行一次,无论你是否更换once.Do(xx)这里的方法,这个sync.Once块只会执行一次。 package main import ( "fmt" "sync" "time" ) var once sync.Once func main() { for i, v := range make([]string, 10) { once.Do(onces) fmt.Println("count:", v, "---", i) } for i := 0; i < 10; i++ { go func() { once.Do(onced) fmt.Println("213") }() } time.Sleep(4000...阅读全文

博文 2016-01-05 19:00:00 x369201170

go语言:flag的使用

go语言flag的使用 package main import ( "flag" "fmt" ) var music_file *string = flag.String("file", "musicfile", "Use -file ") func main() { flag.Parse() fmt.Println(*music_file) } 例如文件为flagTest.go go run flagTest.go -file "../music/sun.mp3" 即可指定file参数的值。 如果直接使用go run flagTest.go -file则会提示你-file的使用说明.-file="musicfile": Use -file 如...阅读全文

博文 2014-10-21 23:00:00 x369201170

golang log用法

21天精品区块链课程免费学习,深入实战行家带路,助力开发者轻松玩转区块链! >>> package main import ( "log" "os" ) var logger *log.Logger func main() { file, err := os.OpenFile("test.log", os.O_APPEND|os.O_CREATE, 666) if err != nil { log.Fatalln("fail to create test.log file!") } defer file.Close() logger = log.New(file, "", log.LstdFlags|log.Lshortfile) // 日志文件格式:log包含时间及文件行数 log.Pri...阅读全文

博文 2018-09-01 14:33:12 Robin3D

Go 解决"Connection reset by peer"或"EOF"问题

【问题】 我编写了一个http Client程序代码如下: // create a request req, err := http.NewRequest(method, url, body) if err != nil { return nil, err } // send JSON to firebase resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("Bad HTTP Response: %v", resp.Status) } defer resp.Body.Clo...阅读全文

博文 2016-12-19 14:00:02 吃一堑消化不良

Go 获取当前可执行文件的所在目录

代码如下: import ( "errors" "os" "os/exec" "path/filepath" "strings" ) func GetCurrentPath() (string, error) { file, err := exec.LookPath(os.Args[0]) if err != nil { return "", err } path, err := filepath.Abs(file) if err != nil { return "", err } i := strings.LastIndex(path, "/") if i < 0 { i = strings.LastIndex(path, "\\") } if i < 0 { return "", err...阅读全文

博文 2017-02-13 04:00:26 风华神使

golang 速度限制,time.Tick(time.Second*2) channel,隔2秒后继续执行

package main import ( "fmt" "time" ) func main() { requests := make(chan int, 5) for i := 1; i <= 2; i++ { requests <- i } close(requests) limiter := time.Tick(time.Millisecond * 200) for req := range requests { //会循环两次,前面往requests channel中发送了两个值 <-limiter //执行到这里,需要隔 200毫秒才继续往下执行,time.Tick(timer)上面已定义 fmt.Println("request", req, time.Now()) } burs...阅读全文

博文 2015-04-18 03:00:00 benlightning

聊聊GOPATH、GOROOT

在go语言中环境变量GOPATH和GOROOT需要设置好才可进行开发编译,学过JAVA的朋友理解起来就比较快,这里就这两个变量作个详细的说明,不足之处,请大家批评指正。1. GOROOT简而言之,GOROOT在GO语言中表示的是go语言编译、工具、标准库等的安装路径,在Linux系统中一般安装在/usr/go或者/usr/local/go,这样Linux系统中的PATH变量一般都包含了这两个目录,所以就可以直接运行go命令,而Windows系统中一般默认安装在C:\go中。如果自定义安装go的话,需要设置GOROOT的值,比如在Linux系统中用户如有root用户权限时,想安装go至自己的工作目录中,就要设置GOROOT为自己的HOME目录中,假设安装在/home/目录中的go目录,则需要这...阅读全文

博文 2017-07-02 03:12:12 jasonvfang

golang基础学习-MongoDB使用

1.系统环境 Golang:go version go1.10.3 darwin/amd64 OS:MacOS MongoBD: version: 3.4.4 2.Golang使用MongoDB 使用:gopkg.in/mgo.v2 获取包:go get gopkg.in/mgo.v2 引入:import "gopkg.in/mgo.v2" mgo简介 3.简单使用MongoDB 3.1 数据设计 3.1.1 数据库设计: 数据库名:mydb_tutorial 集合名: t_student 数据集合:t_student字段说明 字段 类型 说明 name string 姓名 age int 年龄 sid string 学号 status int 状态:1正常,9,删除 3.1.2结构体设计:...阅读全文

博文 2018-09-10 18:34:40 Mr雨易

Golang lint简易使用方法

根据作者的说法: Golint is a linter for Go source code. Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes. Golint differs from govet. Govet is concerned with correctness, whereas golint is concerned with coding style. Golint is in use at Google, and it seeks to match the accepted style of the open source Go...阅读全文

博文 2015-05-12 20:00:06 dandan.fs

介绍 golang执行系统命令

golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout。这点和python下的command、os.system等功能是一样的。这里列两个具体操作的代码。其可以调用类LINUX系统下的shell命令,也可以在windows下调用cmd下的命令。 代码一 package main import ( "bytes" "fmt" "log" "os/exec" ) const ShellToUse = "bash" func Shellout(command string) (error, string, string) { var stdout bytes.Buffer var stderr bytes.Buffer c...阅读全文

博文 2018-10-28 05:34:39 易霂

一个轻量级的分布式定时任务调度平台-Cloudtask

什么是Cloudtask? Cloudtask 是一个轻量级的分布式定时任务管理平台,它非常轻量小巧,使用简单,我们可以上传、暂停/启动任务,克隆一个任务,修改任务的执行命令,或者查看任务的调度状态、执行日志,开发人员可以采用自己最熟悉的编程语言来编写任务程序,可以是一个控制台程序,也可以是一段 shell 脚本,上传至平台后设置定时执行规则即可。 设计方案 Cloudtask 后端为无状态服务,通过 Zookeeper 实现集群各节点间的发现与协调,节点以心跳方式注册到注册中心,中心服务器统一管理着所有集群,任务调度以集群方式进行分配,具有良好的可扩展性,任务分配信息按集群划分并将分配数据存储到 Zookeeper 节点,保持分配数据的一致性。 更多文档 https://cloudtask...阅读全文

Ubuntu 14.04下安装Golang以及LiteIDE

安装配置Golang 可以从Golang中国这里下载,下载好后使用sudo tar -xvzf ~/Downloads/go*.linux-amd64.tar.gz -C /usr/local/命令将其解压到/usr/local/位置,然后配置环境变量。 使用命令vim ~/.bashrc打开.bashrc文件,然后在最后追加下面内容: export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin export GOPATH=~/Go 然后使用命令source ~/.bashrc使其生效,需要注意的是,GOPATH这个环境变量指的是之后需要存放源码的目录,我使用的是~/Go目录 使用go version以及go env等命令来查看是否正确...阅读全文

os.Args[0] 的获取的值的问题

默认情况下 os.Args[0]应该返回可执行文件的路径 ``` go package main import ( "fmt" "os" ) func main() { fmt.Println("test the os package") fmt.Println("Args len", len(os.Args)) for i, arg := range os.Args { fmt.Println("arg", i) fmt.Println("arg", arg) } fileInfo, err := os.Stat("E:\\go\\bin\\studygolang.exe") if err != nil { f...阅读全文

配置 VIM 的 Go 语言开发环境

本文是针对像我这样的 VIM 小白而写的,所使用的 VIM-GO 插件虽然步骤简单但不够详细,特写此文以做记录和分享。欢迎各位大神纠正补充! 特别说明 本博文不是 Go 语言环境搭建教程,只是 VIM 插件部分的配置教程。如果需要了解如何下载及安装 Go 语言,请移步 配置 Go 语言开发环境的前半部分。 VIM 插件地址:github.com/fatih/vim-go 为了方便墙内用户,本博文所有要下载的 ZIP 包已经直接打包好:下载地址 安装 Pathogen Pathogen 是 VIM 的一个插件管理器,很多插件都支持它,所以不要怕麻烦,因为安装它的步骤非常简单。 前往 Pathogen 首页,找到下方的最新版 Package ZIP 包下载链接。 下载解压后你会得到一个名称为 a...阅读全文

博文 2015-06-12 03:00:00 davygeek

对golang的Channel初始化的有缓存与无缓存解释

首先编程的时候遇到疑问,输出跟我所想预想不一样,后来查到了golang社区的帖子,其中一篇帖子 :健哥大人 做出了一些解释。 我摘抄重点过来: 无缓冲的与有缓冲channel有着重大差别,那就是一个是同步的 一个是非同步的。 比如 c1:=make(chan int) 无缓冲 c2:=make(chan int,1) 有缓冲 c1<-1 无缓冲: 不仅仅是向 c1 通道放 1,而是一直要等有别的携程 <-c1 接手了这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着。 有缓冲: c2<-1 则不会阻塞,因为缓冲大小是1(其实是缓冲大小为0),只有当放第二个值的时候,第一个还没被人拿走,这时候才会阻塞。 我对以上做一些解释,首先确实得承认channel有缓存与无缓存确实差别巨大,缓存为1...阅读全文

博文 2015-06-17 20:05:13 paladinosment

go语言Notepad++简易开发环境搭建(windows)

1.下载安装go语言:https://golang.org/dl/选择对应的平台,建议使用msi安装包,这个会帮你配置好环境变量(也许需要重启)对应的环境变量有: GOROOT - C:\Go\PATH - ;C:\Go\bin 2.安装Notepad++不多说了 3.notepad++安装插件:GOnpp 运行后右侧会显示运行结果 4.语法高亮(1)下载notepad++的go语言支持包(http://notepad-plus.sourceforge.net/commun/userDefinedLang/go.zip)(2)解压go.zip,得到:userDefineLang_Go.xml go.xml(3)打开userDefineLang_Go.xml文件,去掉文件 第一行和最后一行的注...阅读全文

博文 2015-02-12 03:00:00 solohac

Golang测试包小结

Golang测试包 golang自带了测试包(testing),直接可以进行单元测试、性能分析、输出结果验证等。简单看着官方文档试了试,总结一下: 目录结构和命令 使用golang的测试包,需要遵循简单的目录结构 测试代码放在待测试代码的目录下(一个包内),以_test.go结尾,例如如下目录结构,MyTest目录下有待测试的代码文件MyTest.go和测试代码MyTest_test.go . |-- bin | `-- main |-- pkg | `-- darwin_amd64 | `-- MyTest.a `-- src |-- MyTest | |-- MyTest.go | `-- MyTest_test.go `-- main `-- main.go 直接在MyTest目录下执...阅读全文

博文 2015-03-03 03:00:01 numbersix

GoLang中flag标签使用

正如其他语言一样,在 linux 系统上通过传入不同的参数来使得代码执行不同逻辑实现不同功能,这样的优点就是执行想要的既定逻辑而不需要修改代码重新编译与打包。在 Golang 语言中也为我们提供了相应的功能,直接上代码,在代码中会做详细的解释,当前运行环境为:Go-1.8.1 package main import ( "flag" "log" "os" ) func usage() { log.Fatalf("Usage: myProgram [-s server] [-t isShowTimeStamps] \n") } func printMsg(message string) { log.Printf("Received message is : %s \n", ...阅读全文

博文 2017-09-23 03:30:01 grimm

golang for android

go是一种简洁高效的语言,go 1.4版本支持在android上运行 go get golang.org/x/mobile go get golang.org/x/mobile/example 运行示例代码,路径为$GOPATH/src/golang.org/x/mobile/example/libhello 运行all.bash编译并打包安装 如果报错: go build runtime: android/arm must be bootstrapped using make.bash 则说明没有编译arm版本的go,需要进到$GOROOT/src下面编译android/arm版本 #拣出一套交叉编译工具 $NDK_ROOT/build/tools/make-standalone-tool...阅读全文

博文 2014-12-18 16:00:06 开开904

mac下使用brew安装并使用golang

突然想进go坑,然后就尝试在公司新发的mac上折腾下 安装 通过执行命令 brew search go 看到可用最新版是1.7,就他了 brew install go@1.7 安装好了,按网上的教程 直接在终端里执行 go,结果提示命令不存在 Orz。好吧,自己加个别名吧。 打开 .bash_profile,添加: alias go=’/usr/local/Cellar/go\@1.7/1.7.6/bin/go’ 执行 source .bash_profile,然后再执行 go。一切正常~ 按照教程,然后继续在 .bash_profile 中设置几个环境变量: export GOROOT=/usr/local/opt/go\@1.7/bin/ export GOPATH=~/code/gol...阅读全文

博文 2017-07-01 16:00:16 nicochen

golang init函数

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性, 有下面的特征: 1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等 2 每个包可以拥有多个init函数 3 包的每个源文件也可以拥有多个init函数 4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序 6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用 下面的两个go文件演示了: 1 一个package或者是go文件可以包含多个init函数, 2 init函数是在main函数之前执行的, 3 init函数被自动调用,不能在其他函数中调用,显式调用会报该函数未定义 g...阅读全文

博文 2018-12-05 12:34:42 stevenlife

[Go]Log记录

后端系统中的Log是相当重要的,做过高并发服务的同学都会认同这一点。相对而言,调试已经用处不大了,对于这样的项目,我现在也习惯了这种开发方式,有两个原因:1.debug只能在开发环境,到产线环境就不灵了。2.在并行计算下,debug可能无法发现潜在的问题。 有了以前做node.js的经验,放弃debug没有想象中那么可怕,只要我们程序设计合理,结构清晰,日志完整,看到异常信息后基本都可以快速定位问题所在。 做Java的时候有log4j,做.NET程序的时候有log4net, 做Node.js的时候有log4js....上述几个模块用了都不错,因此做Go项目自然选择了Log4go。 话说这个log4go并不完善,而且两年没维护了,白瞎了这么好的名字。比较严重的是程序退出可能有日志没有flush...阅读全文

博文 2014-11-11 17:00:01 abv123456789

golang 编译后文件过大问题处理

go1.9.2出来了,有一个用golang写的工具要编译,正好也测试一下。我是在windows10 64位下测的。编译和执行文件效率都差不多。但是1.9.2编译出来的文件6M。 个人觉得这个有点大了,关键是功能也不复杂。所以觉得这个体积简直太夸张了,试试能否减肥。 使用原始build编译的大小 6,167KB 通过去除部分连接和调试,build部分参数查看结果。 -a 强制编译所有依赖包。 -s 去掉符号信息 -w 去掉DWARF调试信息,得到的程序就不能用gdb调试了 不建议s和w同时使用。 go build -ldflags -w test.go 但是体积还是有点大 4,236KB 最后还只能是加壳压缩。工具地址如下: https://github.com/upx/upx/release...阅读全文

博文 2018-04-25 16:33:06 mickelfeng

golang轮询机制select的理解

func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i++ { fmt.Println(<-c) } quit <- 0 }() fibonacci(c, quit) } //select的轮询机制 func fibonacci(c chan int, quit chan int) { x, y := 0, 1 for { select { // select轮询机制 case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return } } } main中执行fibonacci函数时候,select有...阅读全文

博文 2015-07-24 16:00:01 webyh

关于golang里停止程序执行与变量打印

1)golang里有没有停止程序执行的语句,类似于php里的die和exit. 2)在beego里,如何直接打印变量输出到浏览器里,而不需要渲染到模板里,类似于php里的 echo $a; die; 如果使用fmt.Printf(),需要在后台进行查看了。 有没有更直接的方法,刚接触学习,需要进行各种调试,来了解它的执行过程和原理, ...阅读全文

GoLang基础数据类型--->数组详解

GoLang基础数据类型--->数组详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。换句话说,与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列。 在Go语言中数组是一个值类型(value type)。是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数...阅读全文

go-redis 发布/订阅

go-redis 发布/订阅 最近golang 的项目开始使用redis 对于redis 真的是接触少,而且是golang版本的 只能是看着文档一点一点的入手了 连接初始化 RedisClient = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB }) 发布 //参数1 频道名 字符串类型 //参数2 发送的内容 他是个 interface{} 类型 因为我要和前端对接 所以data是我转的json字符 err := RedisClient.Publish("message", data).Err() if er...阅读全文

博文 2019-03-07 16:34:50 ChunShan

GoLang基础数据类型--->字典(map)详解

GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是函数吗?学过python的小伙伴可能会想到map这个函数。其实它就是Golang中的字典。下面跟我一起看看它的特性吧。map 也就是 Python 中字典的概念,它的格式为“map[keyType]valueType”。 map 的读取和设置也类似 slice 一样,通过 key 来操作,只是 slice 的index 只能是`int`类型,而 map 多了很多类型,可以是 int ,可以是 string及所有完全定义了 == 与 != 操作的类型。 一.map的赋值方式 1.先的声明再初始化最后赋值 1...阅读全文

博文 2017-10-19 16:00:01 yinzhengjie

GoLang 字符串处理大全

GoLang基础数据类型--->字符串处理大全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 欢迎加入: 高级运维工程师之路 598432640 任何一门语言都有它的好处,Golang的长处就是在于它的高并发能力,所以现在练习好Golang的用法,有利于你找一份好的工作哟~在学习任何一本语言,它的基本数据类型我们应该都得熟记于心,今天我们处理的主角就是字符串。让我们一起看看Golang对字符串的用法吧。我们此处主要针对strings这个包的某些方法的用法做演示。 1.Contains 1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/ta...阅读全文

博文 2017-09-30 09:30:01 yinzhengjie

Go语言执行效率

今天我用Qt和Golang写了一段代码用来对比它们的执行效率,代码很简单,就是求1到1000000000000的和,如下: Qt代码: ```c QElapsedTimer et; et.start(); long sum = 0; for(long i = 0; i < 1000000000000; ++i) { sum += i; } qDebug() << Q_FUNC_INFO << "Elapsed:" << et.elapsed(); qDebug() << Q_FUNC_INFO << "sum =" << sum; ``` Golang代码: ```go...阅读全文

Kratos--安装及配置

安装GO环境 安装protoc以及相关的包和插件 https://www.jianshu.com/p/6942a361e455 安装Kratos Go version>=1.12 and GO111MODULE=on go get -u github.com/bilibili/kratos/tool/kratos 提示:安装过程中可能会出现部分包下载失败,可以手动下载包然后拷贝至相应文件目录。 快速开始 cd $GOPATH/src kratos new kratos-demo cd kratos-demo/cmd go build ./cmd -conf ../configs 打开浏览器访问:http://localhost:8000/kratos-demo/start,你会看到输出了Go...阅读全文

博文 2019-06-26 17:32:44 凉初透的风

go build 不同系统下的可执行文件

Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。 1、Mac下编译Linux, Windows平台的64位可执行程序: $ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go $ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 2、Linux下编译Mac, Windows平台的64位可执行程序: $ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go $ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 3、Windows下编...阅读全文

博文 2018-12-01 18:34:41 tt大眼仔

如何运行一个golang程序为守护进程

http://www.hiceon.com/topic/how-to-start-a-golang-program-as-a-daemon/ 安装daemonize 安装git环境 yum install git -y 获取daemonize git clone git://github.com/bmc/daemonize.git 安装daemonize cd daemonize./configuremake && make install 查看是否安装 daemonize -v 通过daemonize执行golang守护进程 你需要打包你的golang程序为可执行文件(go build),并通过daemonize来执行它来实现守护进程,如: daemonize -p /var/run/my...阅读全文

博文 2015-09-13 14:00:30 leonpengweicn

golang最小docker镜像制作

因为go语言编译好之后为可执行文件,不需要依赖go语言环境即可运行,所以可以在带go语言得docker镜像中编译,编译完成之后将二进制文件拷贝到一个不带go环境的较小的镜像即可,这里采用alpine镜像作为运行的镜像 FROM golang:alpine AS development WORKDIR $GOPATH/src COPY . . RUN go build -o app FROM alpine:latest AS production WORKDIR /root/ COPY --from=development /go/src/app . EXPOSE 8080 ENTRYPOINT ["./app"] 这样制作完成的镜像只有8.5M的大小,其中alpine基础包5.53...阅读全文

博文 2019-05-27 17:34:52 褪色的记忆1994

Golang的交互模式进阶-读取用户的输入

Golang的交互模式进阶-读取用户的输入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 读写数据除了 fmt 和 os 包,我们还需要用到 bufio 包来处理缓冲的输入和输出。 一.从控制台读取输入 我们如何读取用户的键盘(控制台)输入呢?从键盘和标准输入 os.Stdin 读取输入,最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。具体代码如下 1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9...阅读全文

博文 2017-11-08 06:00:01 yinzhengjie

Golang多平台交叉编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。 Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Wind...阅读全文

压缩go build打包的可执行文件

前言 最近在写一个cli程序,习惯性的go build之后发现简简单单的几行代码打包出来就3.0+MB了,为此被做Python的同学嘲笑了很久,于是就研究了一下go build产生的可执行文件的压缩 代码示例 代码如下: package main import ( "os" "gopkg.in/urfave/cli.v2" ) const ( APP_NAME = "etcd-cli" APP_VERSION = "0.1" APP_USAGE = "etcd-cli是一个简单实用的etcd命令行客户端,帮助你彻底解脱一次又一次的输入etcdctl" ) func main() { app := new(cli.App) app.Name = APP_NAME app.Version = A...阅读全文

博文 2017-08-17 17:05:04 gwpp

golang在当前执行目录创建日志文件

package main import ( "bufio" "log" "os" "os/exec" "path/filepath" "strings" "time" ) /*获取当前文件执行的路径*/ func GetCurrPath() string { file, _ := exec.LookPath(os.Args[0]) path, _ := filepath.Abs(file) splitstring := strings.Split(path, "\\") size := len(splitstring) splitstring = strings.Split(path, splitstring[size-1]) ret := strings.Replace(splitstri...阅读全文

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

VsCode配置Golang开发环境,基于Go Modules

本文参考 从零开始搭建Go语言开发环境 之前都是使用 LiteIDE 开发Go,在IDE里就能设置任意 GOPATH 目录,挺方便。后来看到 VsCode 这么强大,也打算折腾一下。折腾一两个小时发现其实不算太麻烦。 Go语言1.14版本之后推荐使用Go Modules管理,所以我们可以在任何目录里建立Go项目。 总共三步: 安装 Golang 配置代理 安装 VsCode 插件 1. 安装Golang 建议去官网下载安装,Homebrew 有时候很好用,不过有可能更新不及时,或者它自己无法更新,遇到问题还得再查,没必要。 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ Golang安装.png...阅读全文

博文 2020-04-04 14:32:50 看着我别说话

centos下安装UPX+压缩golang可执行程序

centos安装upx wget -c http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/ucl-1.03-2.el7.rf.x86_64.rpm rpm -Uvh ucl-1.03-2.el7.rf.x86_64.rpm yum install ucl wget -c http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/upx-3.91-1.el7.rf.x86_64.rpm rpm -Uvh upx-3.91-1.el7.rf.x86_64.rpm yum install upx #upx压缩...阅读全文

博文 2017-08-25 09:03:27 雨花