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

[译]像专家一样使用 panic

作者: Vladimir Kovpak | 发布时间:2018-08-21 (i do it cause i need to...) 预备知识 本文假定你已经熟悉 go 语言及其 panic/recorer 函数、以及任何其他具有异常(try-catch)概念的编程语言。 介绍 你可能已经在《The Little Go Book》中看到诸如这样的句子: Go 处理错误的首选方式是 return values,而不是抛出错误 也许你在 go wiki 上看到过《CodeReviewComments》,上面写着: 不要在平常的错误处理中使用 panic,而应使用 error 和多参数返回* 另外,你可能已经看过文章《Effective Go》 ,上面说: 向调用者报告错误的通常方法,是将错误作为...阅读全文

博文 2020-05-05 23:34:23 henry_chen

Go学习笔记一(实用的基础概念)

引言 自己对学习go语言的心得进行个记录,方便未来复习。也见证自己的一个学习过程 应用程序⼊⼝ 必须是 main 包:package main 必须是 main 方法:func main() ⽂件名不一定是 main.go main函数的传参和返回 main 函数不不⽀支持传⼊入参数,在程序中直接通过 os.Args 获取命令⾏行行参数。 Go 中 main 函数不不⽀支持任何返回值,通过 os.Exit 来返回状态。 func main() { if len(os.Args) > 1 { fmt.Println("Hello World", os.Args[1]) os.Exit(11) } } 在终端go run文件,在后面带上参数即可,下面是打印的结果 打印的结果 编写测试程序 源码⽂...阅读全文

博文 2019-07-10 09:02:39 Jabir2HLJ

python、go、shell、c、命令行参数解析

用的半生不熟的Linux环境,看看几种语言的命令行参数解析~1. pythonpython demo.py -u tom -g users -o output.log --time-out 300使用getopt.getopt()模块import getoptimport systry: args, opts = getopt.getopt(sys.argv[0], "u:g:o:", "time_out=")except Exception as ex: print(str(ex))for key,value in opts: if key == "-u": username = value elif key == "-g": group = value elif key == "-o":...阅读全文

博文 2019-02-25 23:34:42 __六便士

golang初探与命令源码分析

前段时间有群友在群里问一个go语言的问题: 就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数。其中main.go和hello.go同属于main包。但是在main.go的目录下执行go run main.go却报hello函数没有定义的错: 代码结构如下: **gopath ---- src** **----gohello** **----hello.go** ** ----main.go** main.go如下: package main import "fmt" func main() { fmt.Println("my name is main") hello() } hello.go如下: package main import "fmt" f...阅读全文

博文 2019-10-19 21:02:44 小碗汤

【代码篇】从零开始一步步搭建自己的golang框架(三)

上一篇文章里,我们定了项目基本目录结构。现在来回顾一下我的思路: 创建入口文件; 指定配置、日志目录; 指定数据库、队列、缓存组件目录; 创建数据处理的controller目录; 指定公共函数等杂项。 接下来,我们还是按照这个顺序填充代码。 入口文件 func main() { config.InitConfig() logger.InitLogger() } 暂且忽略一些实现细节,我们需要先初始化配置和日志,先来看看日志,我选用Uber的zap日志库。来看看日志模块怎么写? 日志 package logger import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) v...阅读全文

博文 2020-01-20 12:32:42 onepunchgo

Spring 中获取 request 的几种方法,及其线程安全性分析

概述在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的属性(如cookie、授权信息)、body中的数据等。由于在Spring MVC中,处理请求的Controller、Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发请求时,能否保证不同请求/线程中使用不同的request对象。 这里还有一个问题需要注意:前面所说的“在处理请求时”使用request对象,究竟是在哪里使用呢?考虑到获取request对象的方法有微小的不同,大体可以分为两类:(1)在Spring的Bean中使用request对象:既包括Controller...阅读全文

博文 2019-02-21 18:34:41 MyBatis

Golang交叉编译

Golang从1.5版本起支持交叉编译,可以在一个平台上生成另一个平台的可执行程序,非常方便,交叉编译依赖于环境变量GOOS(操作系统),GOARCH(架构),CGO_ENABLED(是否启用cgo)。 Windows 下编译 Mac 和 Linux 64位可执行程序 SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go Mac下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build m...阅读全文

博文 2019-08-16 00:32:44 土豆吞噬者

golang 基础(18)字符串

square-gopher.png 字符串 immutability 字符串是不可变类型 strigs 标准库提供字符串基本操作 strconv 字符串与其他类型的转换 func main() { var c byte = 'H' fmt.Println(c) mj := string(45) fmt.Println(mj) } 我们尝试输出c byte = 'H'``和string(45)`` 72 - 结果可能预期有些差别,如果我们将```mj := string(72)`` 我们就会得到 72 H 在 go 语言会将 sybmol(符号)看作数字,而将string是作为sybmole 的数组 "hello world" 在 go 眼里是数组[72 101 100 108 111...]...阅读全文

Golang 大杀器之性能剖析 PProf

文地址:Golang 大杀器之性能剖析 PProf 前言 写了几吨代码,实现了几百个接口。功能测试也通过了,终于成功的部署上线了 结果,性能不佳,什么鬼????? 想做性能分析 PProf 想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据,本文将带你学习、使用 Go 后花园,涉及如下: runtime/pprof:采集程序(非 Server)的运行数据进行分析 net/http/pprof:采集 HTTP Server 的运行时数据进行分析 是什么 pprof 是用于可视化和分析性能分析数据的工具 pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告) profile.proto 是一个 Protocol Bu...阅读全文

博文 2019-07-19 21:32:40 李_MAX

使用Envoy 作Sidecar Proxy的微服务模式-3.分布式追踪

本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。 这是接下来几个部分的想法(将在发布时更新链接): 断路器(第一部分) 重试/超时(第二部分) 分布式跟踪(第三部分) Prometheus的指标收集(第四部分) 服务发现(第五部分) 第三部分 - 使用envoy proxy 实现分布式追踪 第一篇博文向您介绍了Envoy Proxy的断路功能实现。在第二部分中,仔细研究了如何启用额外的弹性功能,如超时和重试。在第三部分中,我们将了解如何在服务网格中启用分布式跟踪。有意进行一些简单的演示,因此我可以单独说明模式和用法。请下载此演示的源代码并按照说明进行操作! 该演示由一个客户端和一个服务组成。客户端是一个Java http...阅读全文

博文 2019-02-23 19:34:41 iyacontrol

golang 命令行开发基础

os.Args获取命令行参数 os.Args参数列表 0 :程序路径(go run 运行 0 为临时工作目录的路径,编译后运行,0 二进制文件名) 1 第一个参数 2 第二个参数... ... len(os.Args) 参数数量 示例 /** * @Author : jinchunguang * @Date : 19-11-4 上午10:37 * @Project : tcp-chat */ package main import ( "fmt" "os" ) func main() { // 获取命令行参数 fmt.Println("命令行参数数量:", len(os.Args)) for k, v := range os.Args { fmt.Printf("args[%v]=[%v]\...阅读全文

博文 2019-11-04 15:33:23 aside section._1OhGeD

Golang sync.WaitGroup基础用法

package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() fmt.Println("First goroutine sleep") time.Sleep(1 * time.Second) }() wg.Add(1) go func() { defer wg.Done() fmt.Println("Second goroutine sleep") time.Sleep(2 * time.Second) }() wg.Wait() fmt.Println("All goroutines complete") } 程序输出...阅读全文

博文 2019-06-08 15:32:42 FredricZhu

GoLang-Scheduling In Go : Part I - OS Scheduler

Scheduling In Go系列文章 本文主要针对Go语言中的调度。 目录 Part I - OS Scheduler Part II - Go Scheduler Part III - Concurrency Part I - OS Scheduler 第一部分,将提供对Go中调度器背后的机制和语义的理解。 Introduction Go调度的设计与实现提供了高效率和高性能的多线程,然而如果你的Go程序多线程设计不支持Go调度的工作,那这也将无济于事。本文主要集中于调度程序的高级机制和语义,展现出多线程工作的一些细节,从而帮助你更好的做出工程决策。 OS Scheduler 操作系统调度器是软件非常重要的部分。我们的程序在运行运行的时候只是一串需要被顺序执行的指令,为了执行这些指令,操...阅读全文

博文 2020-03-16 09:32:57 帘外五更风

golang进行交叉编译

golang进行交叉编译 交叉编译即编译不同操作系统平台的可执行程序 golang执行交叉编译,只需要使用两个变量 - GOOS:目标操作系统 - GOARCH:目标操作系统的架构 根据下面这个表格指定就行了。 其中386指的是32位系统 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 build命令的用法如下 usage: go build [-o output] [-i] [build flags]...阅读全文

博文 2020-03-27 06:32:42 泥之天空

生产环境容器落地最佳实践 --JFrog 内部K8s落地旅程

引言Kubernetes已经成为市场上事实上领先的编配工具,不仅对技术公司如此,对所有公司都是如此,因为它允许您快速且可预测地部署应用程序、动态地伸缩应用程序、无缝地推出新特性,同时有效地利用硬件资源。本期我们将回顾采用Kubernetes作为容器编排工具的公司所面临的复杂性和挑战。我们希望我们提供的经验教训、最佳实践和技巧将帮助您在前往K8s旅途中起步并继续前进。本期将介绍关于在Kubernetes生产环境的最佳实践,包括::为上K8s容器云准备好应用程序在Kubernetes中获得灵活性和通用性为所有应用程序使用单一、可信和可靠的源自动部署到Kubernetes在Kubernetes中构建可靠且可伸缩的环境可见性和安全性:在Kubernetes中保护您的应用程序在Kubernetes中记...阅读全文

博文 2020-03-12 13:37:17 JFrogChina

Go语言库系列之flag

背景 终端(命令行)操作是程序员的必备技能,但是你知道怎么通过golang制作出如下命令吗? $ flag girl -h Usage of girl: -height int 身高 (default 140) $ flag girl --height 170 恭喜你获得了身高 170 的女朋友 极速上手 整个实现非常简单,只需要5个步骤 第一步,引库 import "flag" 第二步,定义变量 定义该变量的作用是存储命令行参数传来的值 var height int 第三步,配置命令信息 在main函数或init函数中加入 flag.IntVar(&height, "height", 140, "身高") 第一个参数是定义的变量引用 第二个参数:命令的名称 第三个参数:命令参数的默认值 第...阅读全文

博文 2020-04-02 21:33:08 平也

服务计算 - 3 | CLI 命令行实用程序开发基础

服务计算 - 3 | CLI 命令行实用程序开发基础 概述 CLI(Command Line Interface)实用程序是Linux下应用开发的基础。正确的编写命令行程序让应用与操作系统融为一体,通过shell或script使得应用获得最大的灵活性与开发效率。Linux提供了cat、ls、copy等命令与操作系统交互;go语言提供一组实用程序完成从编码、编译、库管理、产品发布全过程支持;容器服务如docker、k8s提供了大量实用程序支撑云服务的开发、部署、监控、访问等管理任务;git、npm等都是大家比较熟悉的工具。尽管操作系统与应用系统服务可视化、图形化,但在开发领域,CLI在编程、调试、运维、管理中提供了图形化程序不可替代的灵活性与效率。 基本要求 参阅 Selpg命令行程序设计逻辑...阅读全文

博文 2018-10-11 13:34:42 刘一

【转载】关于docker的15个小tip

文地址:http://www.cnblogs.com/elnino/p/3899136.html 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu): $ ID=$(docker run ubuntu echo hello world) hello world $ docker commit $ID helloworld fd08a884dc79 这种方式在编写脚本的时候很有用,比如你想在脚本中批量获取id,然后进一步操作。但是这种方式要求你必须给ID赋值,如果是直接敲命令,这样做就不太方便了。 这时,你可以换一种方式: $ alias dl=’docker ps -l -q’ $ docker run ubuntu echo hello w...阅读全文

博文 2019-01-31 12:34:43 Mr_Leung

Go 命令行解析 flag 包之通过子命令实现看 go 命令源码

上篇文章 介绍了 flag 中如何扩展一个新的类型支持。本篇介绍如何使用 flag 实现子命令,总的来说,这篇才是这个系列的核心,前两篇只是铺垫。 前两篇文章链接如下: Go 命令行解析 flag 包之快速上手 Go 命令行解析 flag 包之扩展新类型 希望看完本篇文章,如果再阅读 go 命令的实现源码,至少在整体结构上不会迷失方向了。 FlagSet 正式介绍子命令的实现之前,先了解下 flag 包中的一个类型,FlagSet,它表示了一个命令。 从命令的组成要素上看,一个命令由命令名、选项 Flag 与参数三部分组成。类似如下: $ cmd --flag1 --flag2 -f=flag3 arg1 arg2 arg3 复制代码FlagSet 的定义也正符合了这一点,如下: type ...阅读全文

博文 2019-12-01 16:04:14 波罗学

【环境篇】golang环境变量二三事(二)

继续上篇文章的学习,今天来看看其他的环境变量。 GOEXE The executable file name suffix (".exe" on Windows, "" on other systems). 编译后的二进制文件后缀,在Windows平台是".exe",在其他平台是""。 GOFLAGS 这个变量看起来比较陌生,用的不多,我们看看文档里是怎么解释的: A space-separated list of -flag=value settings to apply to go commands by default, when the given flag is known by the current command. Each entry must be a standalon...阅读全文

博文 2020-01-17 01:32:39 onepunchgo

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld 在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux 本文将介绍如何书写、编译、并运行第一个go语言程序 同时详细介绍其内部机制 书写第一个go语言程序 首先我们可以在任意位置新建一个文件,命名为main.go go源文件以.go作为后缀,命名时建议统一为小写英文字母 用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码 package main import "fmt...阅读全文

博文 2020-02-12 07:32:58 唯识相链2

面试都在问的微服务,一文带你彻底搞懂!

来自公众号:后端技术学堂 作者LemonCoder 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程序」( Monolithic application ),单体式应用内部包含了所有需要的服务。而且各个服务功能模块有很强的耦合性,也就是相互依赖彼此,很难拆分和扩容。 在座的各位都写过单体程序,给大家举个栗子,刚开始写代码你写helloworld 程序就是单体程序,一个程序包含所有功能,虽然helloworld 功能很简单。 单体应用程序的优点 开发简洁,功能都在单个程序内部,便于软件设计和开发规划。 容易部署,程序单一不存在分布式集群的复杂部署环境,降低了部署难度。 容易测试,没有各种复杂的服务调用关系,都是内部调用方便测试。 单体应用程序的缺点 单体程序的缺点一开始不是特别明...阅读全文

博文 2020-05-28 06:32:45 码农小光

从 golang flag 迁移到 cmdr

基于 cmdr v1.0.3从 golang flag 迁移到 cmdr 采用一个新的命令行解释器框架,最痛苦地莫过于编写数据结构或者流式定义了。我们首先回顾一下 cmdr 和其它大多数三方增强命令行解释器都支持的最典型的两种命令行界面定义方式,然后再来研究一下 cmdr 新增的最平滑的迁移方案。 典型的方式 通过结构数据体定义 有的增强工具(例如 cobra,viper)采用结构体数据定义方式来完成界面指定,如同 cmdr 的这样: rootCmd = &cmdr.RootCommand{ Command: cmdr.Command{ BaseOpt: cmdr.BaseOpt{ Name: appName, Description: desc, LongDescription: long...阅读全文

博文 2019-07-23 22:02:44 hedzr

Golang单元测试入门实践总结

背景: 之前很长一段时间再写Golang程序时,不会有意识去写单元测试,直到后来写了独立项目后,慢慢才发现给一个功能编写对应的单元测试是多么高效和方便,接下来就再一起复习下Golang中的测试. UnitTest(单元测试) 单元测试是程序开发者适用一段代码来验证另外一段代码写的是否符合预期的一种相对高效的自我测试方法。 还记得最早开始搞运维时,写的程序基本上是通过main程序去调用具体的功能函数,然后通过具体的输出来主观验证结果是否符合预期,这种方式对于搞正统的软件开发者而言会感觉很傻,但这对于运维领域来说却很实用,很有效,因为通常运维工作中需要的一些开发都不会是逻辑较为复杂的程序,所以没有必要专门去写测试程序去测试另外一个程序是否符合预期。 但是随着工作内容和运维需求的变化,不得不使用一...阅读全文

博文 2019-11-10 03:32:58 更多精彩内容【实践】Golang的单元测试入门go test笔名辉哥[译]golang基础-编写单元测试GeminiGirl0604GO语言静态代码测试---应用于区块链构建性测试老余2017golang 单元测试 UnitTest 覆盖率 基准测试木猫

最新golang开发环境搭建

本文将以mac环境为例给读者一个搭建golang开发环境的方案 golang安装 在mac 系统下,大部分用户都安装有home brew(https://brew.sh/ ),我们可以通过home brew来安装golang。 brew install go 执行完毕后 执行go version可以查看go的版本。 设置GOPROXY echo "export GOPROXY=https://goproxy.cn" >> $HOME/.zshenv source $HOME/.zshenv VSCode安装 打开https://code.visualstudio.com/。点击“Download For Mac” 下载Vscode。下载完成后解压,可以得到Visual Studio Code...阅读全文

golang 基础(28)defer

square-gopher.png 资源管理与出错处理 defer 调用 有的时候我们需要程序发生错误后需要进行后续的处理,例如关闭文件、结束网络连接等。这时候我们就会用到 def ,如果是 java 的 developer 可以理解为 finally。 确保在函数结束时发生 参数在 defer 语句时计算 defer 列表为后进先出 var wg sync.WaitGroup func say(s string){ for i:=0; i < 3; i++ { fmt.Println(s) time.Sleep(time.Millisecond * 100) } wg.Done() } func main(){ wg.Add(1) go say("Hey") wg.Add(1) go sa...阅读全文

博文 2019-04-03 08:34:39 zidea

你的Helm安全吗?

一、背景Kubernetes是目前最为流行、成为事实标准的容器集群管理平台,为容器化应用提供了部署运行、资源调度、服务发现和动态伸缩等一系列完整功能。在Kubernetes当中,用户通过使用API对象,如Pod、Service、Deployment等,来描述应用的程序规则,而这些资源对象的定义一般需要写入一系列的YAML文件中,然后通过 Kubernetes 命令行工具Kubectl进行部署。由于通常应用程序都涉及到多个Kubernetes API对象,而要描述这些API对象就可能要同时维护多个YAML文件,从而在进行 Kubernetes 软件部署时,通常会面临下述几个问题:如何管理、编辑和更新这些这些分散的 Kubernetes 应用配置文件如何把一套相关的配置文件作为一个应用进行管理如...阅读全文

没有“银弹” 之 微服务架构

没有“银弹”没有一种单纯的技术或管理上的进步,能够独立地承诺在10年内大幅度地提高软件的生产率、可靠性和简洁性。 什么是微服务 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。 每个微服务仅关注于完成一件任务并很好地完成该任务。 在所有情况下,每个任务代表着一个小的业务能力。 其实微服务本身不是什么新技术,只是随着业务的不断发展,对业务不断分层,不断拆分,形成的一种架构风格。 微服务与SOA 技术为业务而生,架构也为业务而出现。 随着业务的发展、用户量的增长,系统数量增多,调用依赖关系也变得复杂,为了确保系统高可用、高并发的要求,系统的架构也从单体时代慢慢迁移至服务SOA时代。 根据不同服务对系统资源的要求不同,我...阅读全文

博文 2020-03-27 16:32:46 陌若尘_c167

2019-01-17

【CSDN编者按】在 2017年 本年度计算机语言榜这篇中, 我们汇报总结了 2017 年最最火的 TOP 20 计算机语言,全部的语言中,Java、C、C++ 名列前三。Java 凭着可移植性、可扩展性及其庞大的社区性傲视群雄,那麼最原始的 C 和 C++ 为什么依然成活至今?本文的创作者亦发表了自身的观点,他觉得,硬件访问、效率高、跨平台性、持续演进、应用领域广泛等等全是他们风靡迄今不可缺少的关键因素。下列为译文:C 语言问世于 1972 年(45 年前),而 C ++ 问世于 1985 年。或许有些人会觉得在这般悠长的时间里,像 C、C++ 那样古老的语言早已日薄西山,显然你弄错: 1. 访问硬件在许多应用程序中浏览硬件是十分关键的,C 和 C ++ 能够或多或少让人完全控制硬件。直接...阅读全文

博文 2019-01-17 17:35:04 青春埋在这

Part I - 操作系统调度(翻译)

Part I - 操作系统调度 简介 多线程程序是如何正确的调度工作的,在这里作者给出了很多详细的例子一步步深入。 OS Scheduler 您的程序只是一系列需要一个接一个顺序执行的机器指令。为了实现这一点,操作系统使用了线程的概念。线程的任务是说明并顺序执行分配给它的指令集。执行一直持续到线程不再有指令可执行。这就是为什么我称线程为“执行路径” 您运行的每个程序都创建一个进程,每个进程都有一个初始线程。线程能够创建更多的线程。所有这些不同的线程彼此独立运行,调度决策是在线程级别而不是在进程级别做出的。线程可以并行运行(每个线程在单个内核上轮流运行),也可以并行运行(每个线程在不同内核上同时运行)。线程还保持自己的状态,以允许安全、本地和独立地执行它们的指令。 如果有线程可以执行,操作系统...阅读全文

博文 2019-07-15 15:34:57 chenxull

初识GoLang

1、概念 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 2、特点 简洁、快速、安全 Go语言语法简单易学、学习曲线平缓,相比于C/C++,Go语言具有很高的开发效率。 并行、有趣、开源 Go语言为高并发而生。 代码风格统一,便于阅读。 Go语言使用go fmt,统一格式化代码。 3、安装 下载地址 下载对应平台下的文件,使用下一步安装法。 image.png ...阅读全文

博文 2020-01-27 13:32:41 kjkongjun

go语言-01.基本结构

//当前程序包名 package main //导入其他的包 import std "fmt" //常量定义 const PI = 3.14 //全局变量的声明与复制 var name = "gohpher" //一般类型声明 type newType int // 结构的声明 type gopher struct{} //接口的声明 type golang interface{} //使用main函数作为程序的入口点启动 func main() { std.Println("Hello world!") ...阅读全文

博文 2019-06-10 23:32:49 KeyboardLife

golang并发编程-20190624

进程 进程是操作系统进行资源分配的一个基本单元,由于描述程序执行的过程。 所有的进程都有父进程,所有的进程共同组成了一个树状结构 内核启动进程是所有进程的祖先,他自己作为自己的父进程 进程标识 内核对每个进程的属性和行为进行详细记录 pid就是这个唯一标识,pid为1的就是上面说的内核启动进程 image.png ppid就是当前进程的父进程 pid := os.Getpid() ppid := os.Getppid() 通过以上方法可以获取到对应的pid和ppid 进程空间 一个用户进程总会生存与用户的空间中 image.pn...阅读全文

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

lesson-1:go 第一个程序

什么是 GO 程序 go 程序是一段简单的 UTF-8 编码的以 .go 结尾的文件。 GO 程序结构 package main // 创建一个 main 包,使用关键字 package import "fmt" // 从 Go 标准库中引入 fmt 包,使用关键字 import func main() { // 入口函数 fmt.Println("hello go") // fmt包中 Println 函数 } Go 程序都必须以一个包开头,必须包含一个 main 函数。main 函数是程序的入口函数。 $ go run ./hello.go // 执行 hello.go 文...阅读全文

博文 2020-01-14 11:32:44 Gabriel

14.Go语言标准库flag基本使用

Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。 1.os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。 os.Args十一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称。 package main import ( "fmt" "os" ) func main() { //os.Args是一个[]string if len(os.Args)>0{ for index,arg := range os.Args{ fmt.Printf("args[%d]=%v\n",index,arg) } } } 结果: ➜ test go build -o "args_demo" ➜ test...阅读全文

博文 2020-02-07 01:33:11 DevOperater

好程序员web前端学习教程之Node Js流程

好程序员web前端学习教程之Node Js流程1,项目前期准备: 以express框架为例npmiexpress-generator-g//全局安装express框架express-e//生成express应用骨架npmi//安装依赖npmstart//在3000端口监听 拓展:目前最市面上最流行的node框架有:--Sail.jsSails.js就像是Node.js平台上的Rails框架。这是一个可靠可伸缩的开发框架,面向服务的架构,提供数据驱动的API集合。用来开发多玩家游戏、聊天应用和实时面板引用非常方便,也可用于开发企业级Node.js应用。Sails.js基于Node.js,Connect,Express和Socket.io构建。--Koa.jskoa.js是下一代的Node.js...阅读全文

博文 2019-03-29 13:42:32 hcxy

go匿名函数实现操作封装

/** * 使用匿名函数实现操作封装 * 将匿名函数作为 map 的键值,通过命令行参数动态调用匿名函数 * 运行命令 go run src/hh/main.go --skill=fly */ package main import ( "flag" "fmt" ) var skillParam = flag.String("skill", "", "skill to perform") func main() { flag.Parse() var skill = map[string]func(){ "fire": func() { fmt.Println("chicken fire") }, "run": func() { fmt.Println("soldier run") }, "f...阅读全文

博文 2019-12-19 11:34:13 huang_he_87

Go Web编程--解析JSON请求和生成JSON响应

现在无论是网站、App、小程序还是移动端H5页面应用,都是采用前端与后端单独部署,相互之间以API接口交互的形式构建而成的。因为在结合可读性、编码数据大小和开发者使用难度上都JSON格式是一个比较好的选择,所以接口的数据格式通常都采用JSON,即前端在发送POST,PUT,PATCH请求添加,更改数据时会把数据以JSON格式放到请求的Body中。而后端则是所有数据都会以JSON格式返回。 关于JSON可读性、编码数据大小和开发者使用难度上,因为其可读性不如XML结构,但是数据量小,用程序操作起来更方便。对比Protobuf来说,Protobuf编码速度、编码后数据大小比JSON都要好,但是用程序操作起来没有JSON方便简单,编码后的数据是二进制格式的,易读性完全没有。所以整体来说JSON是一...阅读全文

博文 2020-04-03 11:32:53 Kevin

go 学习笔记之环境搭建

千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意的就是 $GOPATH 环境变量的设置问题. 不过,简单起见,目前采用默认配置,等到比较熟悉 Go 语言时候再自定义设置也不迟,因此采用喜闻乐见的傻瓜式安装方式吧! go-base-setup-index.png Go 下载安装 由于众所周知的原因,谷歌被墙,因此 Go 的国外官网无法访问,好在已提供 Go 的中国官网可以正常访问. go-base-setup-website.png 国外官网: https://golang.org/ 国内官网: https://golang.google.cn...阅读全文

博文 2019-08-01 20:33:52 雪之梦技术驿站

区块结构描述

1、块链(Blockchain)表现形式为块文件,名称如blockfile_000000,由块(Block)按照顺序排列组成,每一个块的头部(Header)都包含了当前块的data_hash和前一个块的hash值previous_hash,官网blockchain结构图如下:块链B包含了块B0,B1,B2,B3,其中B0是创世块(genesis block) 2、块(Block)包含3部分内容:块头,块数据,块的元数据。具体描述如下:2.1块头(Block Header)块头结构形式如下: "header": { "data_hash": "xXLEx+MSmIh3XiYCOOzgqgbncCWv/CerQmr4pv5htIw=", "number": "4", "previous_hash...阅读全文

博文 2020-01-09 23:32:45 阿留神

编译

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

博文 2020-02-03 19:32:41 风亡小窝

Go 每日一库之 flag

缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态。写博客是一种方式,但不是每天都有想写的,值得写的东西。 有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏差,或者细节还没有完全掌握,要去查资料,了解了之后又继续写,如此反复。 这样会导致一篇博客的耗时过长。 我在每天浏览思否、掘金和Github的过程中,发现一些比较好的想法,有JS 每日一题,NodeJS 每日一库,每天一道面试题等等等等。 github.com/parro-it/aw…这个仓库收集 NodeJS 小型库,一天看一个不是梦!这也是我这个系列的灵感。 我计划每天学习一个 Go 语言的库,输出一篇介绍型的博文。每天一库当然是理想状态,我心中的预期是一周 3-5 个。 今天是第一天,我们...阅读全文

博文 2020-01-13 11:34:22 darjun

Go学习第一集,从console接收命令行参数

废话少说,直接上代码: package main import ( "flag" "fmt") var infile *string =flag.String("i","infile","File contains values for inputpath") var outfile *string =flag.String("o","outfile","File to receive values for outputpath") func main() { flag.Parse() if infile!=nil{ fmt.Println("infile=",*infile,"outfile=",*outfile) } } 进入文件所在目录,执行 go build console.go,生...阅读全文

博文 2020-01-02 11:32:41 Nirvana

GoLang 学习笔记 - 循环语句

GoLang 中的循环语句只有 for 循环,没有像 C 语言中那样的 while 、do ...while 循环,但是可以改变写法实现 do ...while 循环。   GoLang 循环语句的语法: // 和 C 语言的 for 一样 for init; condition; post { // .... } init: 一般为赋值表达式,给控制变量赋初值; condition: 关系表达式或逻辑表达式,循环控制条件; post: 一般为赋值表达式,给控制变量增量或减量。 for 语句执行过程如下:   1. 执行 init 赋值表达式.   2. 检查控制变量是否满足 condition 的条件,若其值为 true ,则执行循环体内语句,然后执行 post,进入下一次循环,再检查 c...阅读全文

GoLang 学习笔记 - 基本数据类型

GoLang 的数据类型   在 GoLang 中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。   GoLang 有以下几种数据类型: 类型 描述 布尔 基本数据类型,只有两个值,并且只可以是常量 —— true 或者 false。 数值 基本数据类型,GoLang 支持整型、浮点型数字,并且支持复数,其中位的运算采用补码。 字符串 基本数据类型,GoLang 中 string 类型被官方定为基本数据类型,是一串由单个字节连接起来的字符序列。GoLang 字符串的字节使用 UTF-8 编码标识 Unicode 文本。 派生 派生类型包括很多种,其中有:指针、数组、结构体、管道、切片、接口...阅读全文

博文 2019-07-20 20:32:39 凉丶心园

golang交叉编译

Linux系统下编译Windows64位系统、Mac系统可执行程序 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go Mac系统下编译Linux系统、Windows64位系统可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Windows系统下编译Linux系统、Mac系统可执行程序 SET CGO_ENABLED=0 SET GOOS...阅读全文

shell快讲第一节--shell基础

前言 我有不少同事学了shell很久,最后来一句学不会,或者学会写几个代码段子过一阵子不用也就忘记了。我并没有专门学过shell,也从不钻研它,比如有人用shell写图形界面,有人用shell写游戏,包括更大型的程序。其实这种人我也佩服的,但是我觉得写代码最好要使用匹配场景的语言,shell我只用来写一些简单的插件,再复杂的需求我会用Python,如果是工程项目我会用golang就这样。 怎么才叫学会一门语言 这个问题看似简单,实则还挺复杂的,大学的时候我觉得学会一门语言就是学会它的语法,当我学会了c的语法的时候,我就骄傲的说我学会了c,当然现实啪啪啪的打脸。我无法用c完成任何一项编程工作。可能也有人觉得学会一门语言就是学会它主要的标准库,比如python,学会主要的标准库就可以做很多事情了...阅读全文

博文 2019-08-13 12:32:49 梦回上玄

Go 命令行解析 flag 包之扩展新类型

上篇文章 说到,除布尔类型 Flag,flag 支持的还有整型(int、int64、uint、uint64)、浮点型(float64)、字符串(string)和时长(duration)。 flag 内置支持能满足大部分的需求,但某些场景,需要自定义解析规则。一个优秀的库肯定要支持扩展的。本文将介绍如何为 flag 扩展一个新的类型支持? 扩展目标 在 gvg 这个小工具中,list 子命令支持获取 Go 的版本列表。但版本的信息来源有多处,比如 installed(已安装)、local(本地仓库)和 remote(远程仓库)。 查看下 list 的帮助信息,如下: NAME: gvg list - list go versions USAGE: gvg list [command optio...阅读全文

博文 2019-11-25 15:04:42 波罗学