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

gocommand:一个跨平台的golang命令行执行package

最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command. 但是如果直接使用原生exec.Command会造成大量的重复代码,网上搜了一圈又没有找到对exec.Command相应的封装包,索性自己封装了一个,取名为gocommand.目前支持Linux和Windows,欢迎各位大神在github上提交代码补充其他平台的实现. 下面介绍一下gocommand库的实现思路: package gocommand // 命令行接口 type Commander interface { // 执行命令行并返回结果 // args: 命令行参数 // return: 进程的pid, 命令...阅读全文

博文 2018-07-27 14:30:01 lizongshen

Go -- 中开启gctrace

godebug是一个跨平台的Go程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符号。使用起来很麻烦而且很难移植。 godebug使用不同的方法,直接把源码作为目标程序,在每一行插入调试代码,然后编译并运行。结果就是一个全功能的调试器,完全可以移植到不同平台。事实上,由于有了gopherjs ,你也可以在浏览器上进行调试: 点击此处尝试原文调试窗口。通过原文的“DEBUG IT”按钮,你可以编辑程序并重新调试它。 工作原理 下面这张是描述上面例子的矢量图: 从中可以看出原始代码转换了两次:第一次godebug插入调试instrumentation,然后gopherjs将结果编译成JavaScript。 让我们看一下instrumentation步骤,以下是go...阅读全文

博文 2019-04-19 16:31:04 weixin_34378969

Golang的WaitGroup陷阱

sync.WaitGroup是并发环境中,一个相当常用的数据结构,用来等待所有协程的结束,在写代码的时候都是按着例子的样子写的,也没用深究过它的使用。前几日想着能不能在协程中执行Add()函数,答案是不能,这里介绍下。 陷阱在WaitGroup的3个函数的调用顺序上。先回顾下3个函数的功能: Add(delta int):给计数器增加delta,比如启动1个协程就增加1。 Done():协程退出前执行,把计数器减1。 Wait():阻塞等待计数器为0。 考一考 下面的程序是创建了协程father,然后father协程创建了10个子协程,main函数等待所有协程结束后退出,看看下面代码有没有什么问题? package main import ( "fmt" "sync" ) func fath...阅读全文

golang 學習之等待goroutine执行完成

package mainimport ("fmt""sync""time""sync/atomic")func main() {wg := sync.WaitGroup{}var i int32for i =0; i <20; i++ {wg.Add(1)tmp := atomic.LoadInt32(&i)go func() {defer wg.Done()fmt.Println("i :", tmp)}()}wg.Wait()var wg1 sync.WaitGroupfor i :=0; i <5; i++ {wg1.Add(1)go func(n int) {defer wg1.Done()EchoNumber(n)}(i)}wg1.Wait()}func EchoNumber(i ...阅读全文

博文 2019-05-18 21:34:57 运维之美Bially

go 错误处理panic recover

当程序遇到致命错误时,就是停止运行Go 通过panic函数来报告致命错误 func testError1() { panic(errors.New("this is a error")) } 代码执行中出现错误比如数组越界 index := 4 arr := []int{1,2,3} _ = arr[index] 那如何“拦截”运行时发生的错误?recover函数会返回一个interface{} 类型的结果,如果程序发生错误,就会返回非nil和defer函数结合使用,就会将错误捕捉到进行处理 func testError() { defer func() { if e := recover(); e != nil { fmt.Printf("panic : %s\n", e) } }() i...阅读全文

博文 2018-11-08 14:35:56 juggles

云服务器使用docker搭建服务

前提:亚马逊云已经配置好启动。 安全组入站策略如下: 出站策略如下: 登陆EC2后,默认只能用ec2-user用户登陆,然后切换到root: sudo su 用yum执行安装docker提示No package docker avaible yum install docker -y 解决方法:在/etc/yum.repos.d/下加CentOS7-Base-163.repo文件: vi CentOS7-Base-163.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick...阅读全文

从nginx热更新聊一聊Golang中的服务器热更新(上)

静态语言在服务器编程时都会遇到这样的问题:如何保证已有的连接服务不中断同时又升级版本?最近花了点时间看了下nginx热更新代码流程,想了下结合之前的经验一并总结下热更新1. 热更新是什么?简单翻译成人类可读的实例是如下这个样子:举个例子,你现在在坐卡车,卡车开到了150KM/H然后,有个轮胎,爆了然后,司机说,你就直接换吧,我不停车。你小心点换嗯。就这个意思2.网关中的热更新服务程序热更新这个问题在层7网关中尤其严重,网关中承载着大量的请求,包括HTTP/HTTPS短连接、HTTP/HTTPS长连接、甚至是websocket这种超长连接(websocket通常连接时间会很长,十几分钟到几天不等)。这样的话我们势必不能讲服务程序停止再启动的冷更新,服务进程热更新是非常有必要的。网关作为一个基础...阅读全文

博文 2019-03-18 14:09:39 Lateautunm​

CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告

摘要: 一. 漏洞概述 2017年9月5日,Apache Struts 2官方发布一个严重级别的安全漏洞公告,该漏洞由国外安全研究组织lgtm.com的安全研究人员发现,漏洞编号为CVE-2017-9805(S2-052),在一定条件下,攻击者可以利用该漏洞远程发送精心构造的恶意数据包,获取业务数据或服务器权限,存在高安全风险。 19 一. 漏洞概述 2017年9月5日,Apache Struts 2官方发布一个严重级别的安全漏洞公告,该漏洞由国外安全研究组织lgtm.com的安全研究人员发现,漏洞编号为CVE-2017-9805(S2-052),在一定条件下,攻击者可以利用该漏洞远程发送精心构造的恶意数据包,获取业务数据或服务器权限,存在高安全风险。 二. 漏洞基本信息...阅读全文

php-fpm在nginx特定环境下的任意代码执行漏洞(CVE-2019-11043)

目录 0x01 漏洞介绍 0x02 漏洞影响 0x03 漏洞复现 0x01 漏洞介绍 在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送%0a符号时,服务返回异常,疑似存在漏洞。 在nginx上,fastcgi_split_path_info处理带有%0a的请求时,会因为遇到换行符\n,导致PATH_INFO为空,而在php-fpm对PATH_INFO进行处理时,对其值为空时的处理存在逻辑问题,从而导致远程代码执行漏洞 在fpm_main.c文件的第1150行代码可以很明显的看出来,问题的所在 https://github.com/php/php-src/blob/master/sapi/f...阅读全文

博文 2019-10-27 00:02:43 aside section._1OhGeD

ldd与otool

ldd ldd命令用于打印程序或者库文件所依赖的共享库列表 ldd不是一个可执行程序,而只是一个shell脚本 golang go install -buildmode=shared std go build -linkshared hi.go Linux ldd /usr/local/bin/openssl linux-vdso.so.1 => (0x00007fffa4913000) libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007fc0de4b5000) libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007fc0ddfc5000) libpthread.so....阅读全文

Go程序编译简介

Go语言安装包自带的编译器是gc。针对不同的硬件平台,Go分别提供了一组编译工具包:比如,6a,6c,6g和6l就是针对X86-64平台(5*是ARM,8*是X86)。此外gcc还有一个支持Go语言的前端:gccgo。因此如果gc不支持你当前的平台,可以尝试用gcc。 go build命令默认会使用gc编译器。假设当前目录为goEx,在这个目录下创建hello.go: package main import "fmt" func main() { fmt.Println("Hello, world!") } 在当前目录下执行go build命令: [root@Fedora goEx]# ls hello.go [root@Fedora goEx]# go build [root@Fedora...阅读全文

第六天:golang学习笔记之time

★time | time包提供了时间的显示和测量用的函数. time time包提供了时间的显示和测量用的函数. time包提供了最基本的时间计量结构Time,Duration,Location 时间打印格式如下: 2019-12-18 21:45:32.987483681 +0800 CST m=+0.000048086 年-月-日 小时:分钟:秒.纳秒 时区 m=+xxx.xxxxxxx UTC:协调世界时(Universal Time Coordinated),UTC相当于本初子午线(即经度0度)上的平均太阳时,北京时间比UTC时间早8小时 CST:CST可能就是北京时间?China Standard Time m=+xxx.xxxxxxx:这里的xxxxxxx为与程序执行开始时间的时...阅读全文

博文 2019-12-19 00:32:42 Macmillan_

Golang 编译Mac、Linux、Windows多平台可执行程序

Golang 支持在一个平台下生成多个平台运行包 编译之后直接可执行,使用起来非常方便 1.MacMac下编译Linux, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 2.LinuxLinux下编译Mac, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 3.Win...阅读全文

Golang 交叉编译可执行程序

可以通过 go env 查看当前系统对应的配置,默认编译出的是对应的系统的可执行文件,所以需要编译别的平台的文件的时候,只要将 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 Mac 下编译 LInux 和 Windows 64 位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=w...阅读全文

博文 2020-04-12 06:32:41 一位路过的假面骑士丶

golang基础--Gocurrency并发

goroutine只是由官方实现的超级"线程池"而已,每个实例4-5kb的栈内存占用和用于实现机制而大幅减少的创建和销毁开销。 并发不是并行(多CPU): Concurrency Is Not Parallelism 并发主要由切换时间片来实现"同时"运行,并行则是直接利用多核实现多线程的运行,但Go可以设置使用核数,以发挥多核计算机的能力。 通过go关键字实现多线程 package main import ( "fmt" "time" ) func Go() { fmt.Println("1234...") } func main() { go Go() //go关键字构成多线程 time.Sleep(2 * time.Second) //主程序睡眠2s } Goroutine 奉行通过通...阅读全文

博文 2018-07-19 03:30:00 failymao

我要在栈上。不,你应该在堆上

ixyP3XP.jpg 原文地址:我要在栈上。不,你应该在堆上 前言 我们在写代码的时候,有时候会想这个变量到底分配到哪里了?这时候可能会有人说,在栈上,在堆上。信我准没错... 但从结果上来讲你还是一知半解,这可不行,万一被人懵了呢。今天我们一起来深挖下 Go 在这块的奥妙,自己动手丰衣足食 问题 type User struct { ID int64 Name string Avatar string } func GetUserInfo() *User { return &User{ID: 13746731, Name: "EDDYCJY", Avatar: "https://avatars0.githubusercontent.com/u/13746731"} } func main...阅读全文

博文 2019-05-21 00:34:41 EDDYCJY

(golang学习)3. go线程、协程理解

1.进程、线程、协程区别 a.各自特点 参考《详细介绍 进程、线程和协程的区别》 进程:拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度; 线程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,标准线程由操作系统调度; 协程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,协程由程序员在协程的代码里显示调度。 协程与线程:每个单位时间内,一个CPU只能处理一个线程(操作系统:thread),线程是CPU处理的单位或单元,底层资源占用中等(比进程少)。线程中程序的执行过程是:同步阻塞的(依次执行),非抢占式的(依代码编写顺序)。开发上比较清晰明了。协程是“用户级”的线程,通过把线程的分段运行:主动暂停、主动运行,切换逻辑点,针对i/o请求可以节约连接、对方处理的中间环节等待时间,一...阅读全文

博文 2019-07-29 20:02:40 沧浪水

Ubuntu操作系统-VSCODE初币环境搭建

本文将基于前文Windows操作系统用VMware 虚拟机安装Ubuntu系统的基础上, 详细描述包括GO语言配置,VSCODE的IDE安装配置,以及初币环境的环境搭建 1.GO 语言的安装与配置1.1.所需工具1.Git2.Go => version 1.7 或更高版本3.编译工具1.2. Git 的安装首先,检查系统是否以经安装了git$ git --version 当出现类似上图时,表示系统未安装git 由于对Git的版本要求不高,所以直接使用包管理工具安装$ sudo apt-get install git最后,安装完成后,检查是否安装成功$ git --version 当出现类似上图时,表示系统安装git成功 1.3.GO安装1.首先,同样是检查是否已经安装了go$ go vers...阅读全文

博文 2018-10-11 01:34:39 ShawnXZhang

golang之panic,recover,defer

defer,recover: package main import ( "fmt" "time" ) func test() { defer func() { //defer中使用recover来捕获异常 //defer在函数执行结束最后,执行该方法 if err := recover(); err != nil { fmt.Println(err) } }() b := 0 a := 100 / b fmt.Println(a) return } func main() { for { test() time.Sleep(time.Second) } var a []int a = append(a, 10, 20, 383) a = append(a, a...) fmt.Printl...阅读全文

博文 2017-12-31 05:30:00 pyyu

Dockerfile总结

定义及其功能阐述 Dokcerfile 是一个普通的文本文件,文件名一般叫 Dockerfile,其中包含了一系列的指令(Instruction), 每一条指令都会构建一层,就是描述该层是如何创建的。 我们可以像写脚本一样把操作docker的命令写在这个文件里,执行这个文件就相当与执行一系列docker命令来构建镜像,并且会自己提交到本地从仓库,我们如果想改变镜像,操作这个文件就可以,分享这个文件也就相当于分享镜像,更加方便 指令详解 例子 FROM centos:latest LABEL maintainer="yangge " description="Install tree vim*" RUN rpm -qa | grep tree || yum ins...阅读全文

go json 实践中遇到的坑

在使用 go 语言开发过程中,经常需要使用到 json 包来进行 json 和 struct 的互相转换,在使用过程中,遇到了一些需要额外注意的地方,记录如下。 整数变浮点数问题 假设有一个 Person 结构,其中包含 Age int64 和 Weight float64 两个字段,现在通过 json 包将 Person 结构转为 map[string]interface{},代码如下。 type Person struct { Name string Age int64 Weight float64 } func main() { person := Person{ Name: "Wang Wu", Age: 30, Weight: 150.07, } jsonBytes, _ := j...阅读全文

博文 2018-12-24 11:34:46 simpleapples

Golang基础语法1

打开cmd命令窗口 保存,编译,执行: 1.保存到一个×××.go的文件(我这里保存到 E:\GoTest\hello.go 下) 2.编译,在命令提示符中执行命令: go build -o E:\GoTest\hello.exe E:\GoTest\hello.go 在指定目录下生成 .exe 文件 或者 go build E:\GoTest\hello.go 在当前目录下生成 .exe 文件 (注意:上面一条指定了输出的exe文件存在E:\GoTest, 而下面一条会在当前路径下生成hello.exe(可能会不是 E:\GoTest 的位置)) 3.执行,在命令提示符中执行命令: test.exe 就可以看到屏幕上显示的HelloWorld!字样...阅读全文

Go语言基础01-概述

概述 工作目录 在本地安装GoLang之后,配置文件如何找到你的工作目录呢? 这就是依靠GOPATH这个变量了。这个变量定义了你的project的目录,当你有多个projects,可以把他们都放进GOPATH,这样你就可以在一个project的文件里import另一个project的package了,就像他们在一个包里一样。 一个project的工作目录下,有src、bin、pkg三个目录。 src: 你开发的源码存放的地方 bin: 编译后的可执行文件 pkg: 编译后的包文件 执行过程 和c语言一样,是通过main()方法作为整个执行的入口。 依赖注入是通过包引用的形式进行管理的。main()方法所在的包为package main。引入其他包的方式为import xxx。 存在一个ini...阅读全文

博文 2019-01-30 12:34:43 isAlucard

如何发送给客户端响应之后程序继续执行

写PHP的时候遇到一个问题 *如何在把响应发送给客户端之后,继续执行后续任务? * 在stackoverflow上找到解决方案,如下 https://stackoverflow.com/questions/15273570/continue-processing-php-after-sending-http-response 想知道,如何在Golang中实现这种需求,google了一会没能找到,汗... 求助,能赐几行代码更好,多谢:...阅读全文

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下编译M...阅读全文

博文 2020-03-13 01:32:54 乌云龙oO

Delve代码分析笔记(5)——debug命令

dlv debug命令会编译并且调试一个package,其代码如下: func debugCmd(cmd *cobra.Command, args []string) { status := func() int { var pkg string dlvArgs, targetArgs := splitArgs(cmd, args) if len(dlvArgs) > 0 { pkg = args[0] } err := gobuild(debugname, pkg) if err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) return 1 } fp, err := filepath.Abs("./" + debugname) if err !...阅读全文

mac下编译go-ethereum

macos: 10.14.4 下载go-ethereum源码,按照文档执行命令编译: $ make all 报错:fatal error: 'stdlib.h' file not found /usr/include 查看xcode是否安装: $ xcode-select --install xcode-select: error: command line tools are already installed, use "Software Update" to install updates $ xcode-select -p /Applications/Xcode.app/Contents/Developer $ brew config Clang: 10.0 build 1001Gi...阅读全文

博文 2019-03-29 18:34:38 lansheng228

Visual Code+Golang环境手工安装依赖

#01 综述 微软发布的visual code studio是款简单易用的轻量级IDE,支持众多语言,包括Go语言。 通过extensions:install extensions安装了Go语言支持插件后,还需要安装gopls、gocode等依赖,因为golang.org无法直接访问,所以有时需要通过GitHub下载后手工安装依赖。 #02 下载和安装 使用git clone指令下载源文件至对应的 src 目录下,使用go install进行安装。(需要保持src下的目录路径与安装时提交的路径参数一致,如使用go install golang.org/x/tools/cmd/guru,下载时存放路径应是 src\golang.org\x\tools\cmd\guru ) #安装guru和go...阅读全文

博文 2020-02-08 01:32:45 ponder4

GO 语言交叉编译

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 Win...阅读全文

Golang学习笔记-1.8 switch语句

本文系第八篇Golang语言学习教程 switch是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据情况执行相应代码。是替代if else的常用方式。 下面通过讲解一个简单的运算程序来了解switch语句 package main import "fmt" func eval(a, b int, op string) int { //定义eval函数,输入三个值 a, b, op 输出类型为 int var result int switch op { // op 为表达式,将 op 的值与下面 case 比较 case "+": //若 op 值为 + , 则将 result 赋值 a + b 以此类推 result = a + b case "-": result = ...阅读全文

博文 2018-07-14 15:34:46 xunk1900

go可执行程序携带附件

###### 1.灵感来源 主要是看到这个开源项目: https://github.com/jteeuwen/go-bindata 该项目就是将文件生成go代码,编译出来的可执行程序可以创建携带的文件。我之前有个工具需要7za.exe,因为怕别人的电脑上没有这个文件,所以我想在我代码中判断环境不存在7za.exe或md5值不正确的时候,自动生成正确的7za.exe。当时就是使用上面的库,但是我仔细研究了一下源码发现生成的go源文件还是有点大,而且我也不需要太多复杂功能,因此我自己写了一个简化版的代码。 ###### 2.放上源码 ```go package main import ( "compress/zlib" "fmt" "io" "log" "os" "path/filepath" ...阅读全文

golang-nsq系列(二)--nsqd源码解析

上一篇初识了 nsq 三个模块(nsqd, nsqlookupd, nsqadmin)的 demo演示,本篇则从源码开始,一步一步去解析 nsqd 的执行流程和逻辑处理,学习别人优秀的项目架构,以期学以致用。 1. nsqd 执行入口 在 nsq/apps/nsqd/main.go 可以找到执行入口文件,如下: 2. nsqd 执行主逻辑源码 2.1 通过第三方 svc 包进行优雅的后台进程管理,svc.Run() -> svc.Init() -> svc.Start(),启动 nsqd 实例; func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil...阅读全文

博文 2019-09-01 22:02:39 热爱coding的稻草

Visual Code+Golang手工安装必要依赖

微软发布的visual code studio是款简单易用的轻量级IDE,支持众多语言,包括Go语言。通过extensions:install extensions安装了Go语言支持插件后,还需要安装gopls、gocode等依赖,因为golang.org无法直接访问,所以有时需要通过GitHub下载后手工安装依赖。简单如下:#安装guru和gorename git clone https://github.com/golang/tools.git "%GOPATH%\src\golang.org\x\tools" go install golang.org/x/tools/cmd/guru go install golang.org/x/tools/cmd/gorename #安装goli...阅读全文

博文 2020-02-07 07:32:41 ponder4

[转载]Golang 交叉编译跨平台的可执行程序 (Mac、Linux、Windows )

Golang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序.mac 下可以编译linux 下的执行程序 又或者windows下的执行程序 交叉编译依赖下面几个环境变量: GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows) 各平台的GOOS和GOARCH参考 OS ARCH OS version linux 386 / amd64 / arm >= Linux 2.6 darwin 386 / amd64 OS X (Snow Leopard + Lion) freebsd 386 / amd64 >= FreeBSD 7 windows 386 / amd64 >= Windows 2000 跨...阅读全文

博文 2019-10-19 23:32:48 aside section ._1OhGeD

开发完成的golang项目如何上线部署到Linu服务器上?

方法二:本地编译 cmd控制台到main.go文件目录下 set GOARCH=amd64 set GOOS=linux go build main.go 会生成一个没有后缀的二进制文件 main 将该文件放入linux系统某个文件夹下 赋予权限 chmod 777 main 最后执行 ./main 就行了。 windows服务器 先本地编译 go build main.go 编译后会在同级目录生成可执行文件 main.exe linux服务器 方法一:服务器上去编译 安装go,配置GOPATH 1,把服务器上配置成本地一样的环境 2,包括项目里面所依赖的包 3,项目源码拷贝到与服务器,服务器上编译 go build main.go 编译后会在同级目录生成可执行文件 main 最后执行 ./...阅读全文

博文 2019-10-15 11:32:58 aside section ._1OhGeD

Golang 在 Mac、Linux、Windows 下如何交叉编译

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...阅读全文

博文 2018-12-17 11:34:55 柠檬信息技术有限公司

golang循环跳转语句

golang循环跳转语句 跳转语句 goto break continue 三个语法都可以配合标签使用 标签名区分大小写,若不使用会造成编译错误 break与continue配合标签可用于多层循环的跳出 goto是调整执行位置,与其他2个语句配合标签使用的结果不同 break func main() { LABEL1: for { for i := 0; i < 10; i++ { if i > 3 { fmt.Println(i) break LABEL1 } } } fmt.Println("执行结束") } 输出结果 API server listening at: 127.0.0.1:5587 4 执行结束 Process exiting with code: 0 添加LABEL1标...阅读全文

博文 2019-07-30 03:32:39 iXiAo9

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 Wi...阅读全文

博文 2018-12-01 11:34:41 泡泡龙吐泡泡

Go Redigo 源码分析(三) 执行命令

简单使用 简单使用Do函数获取单条和使用童丹请求多条获取多条数据。 func main() { // 1. 创建连接池 // 2. 简单设置连接池的最大链接数等参数 // 3. 注入拨号函数 // 4. 调用pool.Get() 获取连接 pool := &redis.Pool{ MaxIdle: 4, MaxActive: 4, Dial: func() (redis.Conn, error) { rc, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { return nil, err } return rc, nil }, IdleTimeout: time.Second, Wait: true, } con := po...阅读全文

博文 2019-05-30 18:34:37 大二小的宝

2019-08-06 go 交叉编译

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 Windows 下编译 Mac 和 Linux 6...阅读全文

博文 2019-08-07 08:32:41 cityhash123

go交叉编译

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.go2.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.go3.Windows下编译Mac, Linu...阅读全文

博文 2019-10-09 19:32:42 aside section ._1OhGeD

Golang 交叉编译

golang 跨平台(跨操作系统系统)编译 Windows 下编译 Mac 64位可执行程序: SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build -v Windows 下编译 Linux 64位可执行程序: set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 go build Mac 下编译 Linux 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build Mac 下编译 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go ...阅读全文

GO语言学习笔记(三)初写GO程序

一、第一个程序名称:helloworld.go package main import "fmt" func main() { fmt.Println("hello world!") } 知识点1:Go语言的代码文件一般是以.go作为后缀。 运行helloworld.go执行:go run helloworld.go输出结果:hello world!知识点2:使用run参数的意思是编译并运行。 编译成二进制文件执行:go build -o helloworld helloworld.go执行:ls查看helloworld helloworld.go在当前目录下会产生一个helloworld的二进制文件,我们可以直接运行这个二进制文件执行二进制文件:./helloworld执行结果:hello...阅读全文

博文 2019-01-25 18:35:14 Mr大表哥

Go 语言, defer

Go 语言的 defer 语句是一个非常有用的特性,可以将一个方法延迟到包裹该方法的方法返回时执行,在实际应用中,defer 语句可以充当其他语言中try…catch…的角色,也可以用来处理关闭文件句柄等收尾操作。 相信很多初学者已经被上面加粗这句话搞懵逼了。而这种神乎其技的特性就是引发各种坑的元凶。 下面这段代码执行超乎预期: package main import "fmt" type Slice []int func NewSlice() Slice { return make(Slice, 0) } func (s *Slice) Add(elem int) *Slice { *s = append(*s, elem) fmt.Print(elem) return s } func ...阅读全文

博文 2019-06-13 23:03:12 qq5c822f9bb7f5c

我要在栈上。不,你应该在堆上

我要在栈上。不,你应该在堆上 我们在写代码的时候,有时候会想这个变量到底分配到哪里了?这时候可能会有人说,在栈上,在堆上。信我准没错... 但从结果上来讲你还是一知半解,这可不行,万一被人懵了呢。今天我们一起来深挖下 Go 在这块的奥妙,自己动手丰衣足食 问题 type User struct { ID int64 Name string Avatar string } func GetUserInfo() *User { return &User{ID: 13746731, Name: "EDDYCJY", Avatar: "https://avatars0.githubusercontent.com/u/13746731"} } func main() { _ = GetUserInfo...阅读全文

博文 2019-06-11 19:42:21 EDDYCJY

06-Go语言命令行参数

GO命令行操作指令 标准go语言项目文件目录格式 项目文件夹就是GOPATH指向的文件夹 src文件夹是专门用于存放源码文件的 main文件夹是专门用于存储package main包相关源码文件的 其它文件夹是专门用于存储除package main包以外源码文件的 bin文件夹是专门用于存储编译之后的可执行程序的 pkg文件夹是专门用于存储编译之后的.a文件的 |---项目文件夹 -----------|--------src文件夹 -----------------------------|--------main文件夹 -----------------------------|--------其它文件夹 -----------|--------bin文件夹 -----------|--...阅读全文

博文 2018-10-15 19:34:39 月色下的阳光

OS Thread Model

概念 线程: 程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,线程由CPU独立调度,在多CPU下可以多线程同时运行。 进程: 进程是资源(CPU、内存等)分配的基本单位,拥有独立的地址空间,它是程序执行时的一个实例,一个进程可有多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。 操作系统线程模型 1:1核心线程模型 pthread线程库--NPTL image.png 内核线程(KLT)由操作系统内核直接支持的线程,内核通过操纵调度器对线程进行调用,程序不直接与内核线程接触而是通过轻量级进程(LWP),LWP内核线程一一对应,程序和内核线程通过轻量级进程联系起,这样的局限性就是每次线程操作都需要从用户态到内核态的转化,代价高,而且由于一一对应的...阅读全文

博文 2019-10-11 01:32:45 aside section ._1OhGeD

golang 项目实战简明指南

开发环境搭建 golang 的开发环境搭建比较简单,由于是编译型语言,写好 golang 源码后,只需要执行 go build 就能将源码编译成对应平台(本文中默认为 linux)上的可执行程序。本文不再赘述如何搭建 golang 开发环境,只说明下需要注意的地方。 从官网下载对应平台的 golang 安装包中包括 golang 的编译器、一些工具程序和标准库源码。早期的 golang 版本中,需要设置 GOROOT 和 GOPATH 两个环境变量。 从 1.8 版开始,GOPATH 不再需要显示设置。如果没有显示设置,则 GOPATH 的默认值为 $HOME/go 。GOPATH 可以设置多个目录,但推荐只设置一个或直接使用默认值,多个 GOPATH 会造成依赖管理的困难。推荐将 $GOP...阅读全文

博文 2018-12-10 14:43:13 litang.me