golang

【Go命令教程】3. go install

▼魔方 西西 提交于 2020-03-13 05:37:32
命令 go install 用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。与 go build 命令一样,传给 go install 命令的代码包参数应该以导入路径的形式提供。并且,go build 命令的绝大多数标记也都可以用于 go install 命令。实际上,go install 命令只比 go build 命令多做了一件事,即:安装编译后的结果文件到指定目录。 在对 go install 命令进行详细说明之前,让我们先回顾一下 goc2p 的目录结构。为了节省篇幅,我在这里隐藏了代码包中的源码文件。如下: $HOME/golang/goc2p: bin/ pkg/ src/ cnet/ logging/ helper/ ds/ pkgtool/ 我们看到,goc2p 项目中有三个子目录,分别是 bin 目录、pkg 目录和 src 目录。现在只有 src 目录中包含了一些目录,而其他两个目录都是空的。 现在,我们来看看安装代码包的规则。 安装 代码包 如果 go install 命令后跟的代码包中仅包含库源码文件,那么 go install 命令会把编译后的结果文件保存在源码文件所在工作区的 pkg 目录下。对于仅包含库源码文件的代码包来说,这个结果文件就是对应的代码包归档文件(也叫静态链接库文件,名称以

使用golang获取本机IP

纵然是瞬间 提交于 2020-03-12 19:00:54
如何获取本机网卡的IP地址 应用场景 需要知道用户的IP地址来分析问题,用户不知道怎么操作,这个时候把编译好的ip.exe发给对方运行截屏即可 golang可以编译全平台(win/mac/linux)程序 运行效果(win10操作系统) 代码 package main // 获取本机全部网卡的全部IP // 2020-03-12 16:52 import ( "fmt" "net" "fyne.io/fyne/app" "fyne.io/fyne/widget" ) //获取全部网卡的全部IP func Ips() (map[string]string, error) { ips := make(map[string]string) //返回 interface 结构体对象的列表,包含了全部网卡信息 interfaces, err := net.Interfaces() if err != nil { return nil, err } //遍历全部网卡 for _, i := range interfaces { // Addrs() 方法返回一个网卡上全部的IP列表 address, err := i.Addrs() if err != nil { return nil, err } //遍历一个网卡上全部的IP列表,组合为一个字符串,放入对应网卡名称的map中 for _,

golang与node.js的http对比测试

╄→尐↘猪︶ㄣ 提交于 2020-03-12 17:26:51
去年的时候,曾经简单对比了一下golang和nodejs的http模块的性能,见: golang与node.js的http对比测试 那时golang还没发布go1,http模块比nodejs差得很远。 go1出来已经有一段时间了,我知道go的http模块性能已经有比较大的提升,但是最近依然见到有人提起去年写的那篇文章,为避免产生对golang的误解,对于go1的最新测试结果如下。 测试是在Ubuntu 12.04 64位系统下进行的: qleelulu@nb:~$ uname -a Linux nb 3.2.0-25-generic #40-Ubuntu SMP Wed May 23 20:30:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux qleelulu@nb:~$ sudo dmidecode | grep CPU Socket Designation: CPU Version: Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz (注:双核4线程) go的版本: qleelulu@nb:~$ go version go version go1 nodejs的版本: qleelulu@nb:~$ node -v v0.8.6 单CPU测试 nodejs是单进程,只使用一个CPU

golang 按字符读取文件

感情迁移 提交于 2020-03-12 16:33:03
package main import ( "bufio" "fmt" "io/ioutil" "os" "strings" ) func main() { arguments := os.Args if len(arguments) == 1 { fmt.Println("Not enough arguments!") os.Exit(1) } input := arguments[1] buf, err := ioutil.ReadFile(input) if err != nil { fmt.Println(err) os.Exit(1) } in := string(buf) s := bufio.NewScanner(strings.NewReader(in)) s.Split(bufio.ScanRunes) for s.Scan() { fmt.Print(s.Text()) } } 来源: 51CTO 作者: 暮色伊人 链接: https://blog.51cto.com/xwandrew/2064835

golang的scan标准库(fmt.scan的使用)

社会主义新天地 提交于 2020-03-12 16:32:29
转载自 https://www.cnblogs.com/golove/p/5888441.html 标准库 - fmt/scan.go 解读 // Copyright 2010 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. // go/src/fmt/scan.go // version 1.7 // 格式化输入输出的用法请参考:http://www.cnblogs.com/golove/p/3284304.html package fmt import ( "errors" "io" "math" "os" "reflect" "strconv" "sync" "unicode/utf8" ) // ScanState 将扫描器的状态报告给自定义类型的 Scan 方法。 type ScanState interface { // ReadRune 从输入端读取一个字符,如果用在 Scanln 类的扫描器中, // 则该方法会在读到第一个换行符之后或读到指定宽度之后返回 EOF。 // r :读取的字符 // size:字符所占用的字节数 //

golang碎片整理之 fmt.Scan

只愿长相守 提交于 2020-03-12 16:32:12
本文介绍了从golang语言中fmt包从标准输入获取数据的Scan系列函数、从io.Reader中获取数据的Fscan系列函数以及从字符串中获取数据的Sscan系列函数的用法。 Scan系列 go语言fmt包下有fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,可以在程序运行过程中从标准输入获取用户的输入。 fmt.Scan 语法 func Scan(a ...interface{}) (n int, err error) Scan 从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。 本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。 代码示例 package main import "fmt" func main(){ var ( name string age int married bool ) fmt.Scan(&name,&age,&married) fmt.Printf("扫描结果 name:%s age:%d married:%t\t",name,age,married) } 将上述代码在终端运行,在终端依次输入 Alfred 、26、false使用空格分隔。 go run main.go alfred 26 false 扫描结果 name:alfred age

Golang:map的比较

假如想象 提交于 2020-03-12 08:45:37
在提交Leetcode 242. 有效的字母异位词 代码时碰到了如下编译错误: map can only be compared to nil 查看文档发现Golang中要比较两个map实例需要使用 reflect 包的 DeepEqual() 方法。如果相比较的两个map满足以下条件,方法返回true: Map values are deeply equal when all of the following are true: they are both nil or both non-nil, they have the same length, and either they are the same map object or their corresponding keys (matched using Go equality) map to deeply equal values. 1.两个map都为nil或者都不为nil,并且长度要相等 they are both nil or both non-nil, they have the same length 2.相同的map对象或者所有key要对应相同 either they are the same map object or their corresponding keys 3.map对应的value也要深度相等

docker+jenkins+github实现golang项目自动部署

时光怂恿深爱的人放手 提交于 2020-03-11 17:09:40
本文jenkins部署golang项目流程 jenkins服务拉取github上的项目 构建golang项目并生成docker镜像[ jenkins调用的是宿主机上的docker环境 ,如何调用的,后面会说明 ] 启动golang项目的docker镜像 docker的安装这里就不说了 docker安装jenkins Makefile run: docker run \ -u root \ -d \ -p 8088:8080 \ -p 50000:50000 \ -e TZ="Asia/Shanghai" \ -v /Users/chen/data/docker/jenkins:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/local/bin/docker:/usr/bin/docker \ --name jenkins \ jenkins/jenkins:lts 说明: -v /Users/chen/data/docker/jenkins:/var/jenkins_home 挂载jenkins的home目录,jenkins安装的插件,拉取的项目代码都在这个目录里 -v /var/run/docker.sock:/var/run/docker.sock 与 -v /usr

go开发以太坊智能合约-geth

旧街凉风 提交于 2020-03-11 11:51:37
go-ethereum客户端通常被称为geth,它是个命令行界面,执行在Go上实现的完整以太坊节点。通过安装和运行geth,可以参与到以太坊前台实时网络并进行以下操作: 挖掘真的以太币 在不同地址间转移资金 创建合约,发送交易 探索区块历史 及很多其他 链接: 网站: http://ethereum.github.io/go-ethereum/ Github: https://github.com/ethereum/go-ethereum 维基百科: https://github.com/ethereum/go-ethereum/wiki/geth Gitter: https://gitter.im/ethereum/go-ethereum 如果你希望 高效的 学习以太坊DApp开发,可以访问汇智网提供的 最热门 在线互动教程: 适合区块链新手的以太坊DApp实战入门教程 区块链+IPFS+Node.js+MongoDB+Express去中心化以太坊电商应用开发实战 其他更多内容也可以访问 这个以太坊博客 。 来源: oschina 链接: https://my.oschina.net/u/3837977/blog/1805453

golang语言示例

ε祈祈猫儿з 提交于 2020-03-10 11:06:44
package main import "fmt" /* my first programmer in go */ func fib(n int) int{ if n<2{ return n } return fib(n-1)+fib(n-2) } func max(x, y int) int{ if x>y{ return x } return y } func main(){ var i int fmt.Println("Hello, world!") for i=0;i<10;i++{ fmt.Printf("%d\t", fib(i)) } fmt.Println(max(12, 545)) }   生产者-消费者模式 package main import ( "fmt" "math/rand" "time" ) // 数据生产者 func producer(header string, channel chan<- string) { // 无限循环, 不停地生产数据 for { // 将随机数和字符串格式化为字符串发送给通道 channel <- fmt.Sprintf("%s: %v", header, rand.Int31()) // 等待1秒 time.Sleep(time.Second) } } // 数据消费者 func customer(channel <