golang

golang学习笔记(一)

百般思念 提交于 2020-01-17 12:14:57
接口还可以嵌套接口。一个接口可以包含一个或多个其他的接口,这相当于直接将这些内嵌接口的方法列举在外层接口中一样。 空接口 interface{} 所有的类型都实现了空接口。任意类型的变量都能当成空接口。 import _ “net/http/pprof” golang对没有使用的导入包会编译报错,但是有时我们只想调用该包的init函数,不使用包导出的变量或者方法,这时就采用上面的导入方案。init函数属于内部函数,不要在代码中主动调用它。 执行时机:(1)全局变量(2)init(3)main函数 golang是一种静态编程语言,不像php那样是动态的。 从缓冲区循环读字节。 bufio循环读取。 写入缓冲中,再把缓冲中的写入文件中。 日志要有不同级别,上线之后不要有debug级别的日志。 接口是一种类型,一种抽象的类型。 接口变量可以保存实现了这个接口的变量。 *File表示File类型的指针。 if param != nil fmt.Println(time.Now().Format(“2006-01-02 15:04:05”)) # 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5 time.Sleep(time.Duration(2)*time.Second) 休眠2秒 日志支持往不同的地方输出日志。日志分级别(warning等)

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

自作多情 提交于 2020-01-17 11:16:54
继续上篇文章的学习,今天来看看其他的环境变量。 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 standalone flag. Because the entries are space-separated, flag values must not contain spaces. Flags listed on the command line are applied after this list and therefore override it. 这段话大意是说GOFLAGS是个"-flag=value"的命令行参数列表,当执行go命令时,默认会添加这个环境变量里设置的参数。 GOTMPDIR

Golang(八)go modules 学习

和自甴很熟 提交于 2020-01-17 07:13:10
0. 前言 最近加入鹅厂学习 k8s,组内使用 Go 1.11 以上的 go modules 管理依赖,因此整理了相关资料 本文严重 参考原文: 初窥Go module 1. 传统 Golang 包依赖管理 Golang 设计深受 Google 主干开发模型影响: 所有开发人员基于主干 trunk/mainline 开发:提交到 trunk 或从 trunk 获取最新的代码(同步到本地 workspace) 版本发布时,建立 Release branch,release branch 实质上就是某一个时刻主干代码的快照 release branch 上 的 bug fix 和增强改进代码也通常是先在主干上提交(commit),然后再 cherry-pick 到 release branch 上 Golang 中的 go get 的设计深受 Google 内部单一代码仓库(single monorepo)和基于主干(trunk/mainline based)的开发模型的影响:只获取 trunk/mainline 最新版本 go get 获取的代码会放在 $GOPATH/src 下面,而 go build 会在 $GOROOT/src 和 $GOPATH/src 下面按照 import path 去搜索 package 由于 go get 获取的都是各个 package repo 的

golang 代码安全审计

耗尽温柔 提交于 2020-01-16 14:43:06
前言 Go语言主要用作服务器端开发语言,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。Go语言是强类型语言,它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。 由于Go语言代码审计资料较少,这里就把最近学习的对Vulnerability-goapp项目的审计过程分享一下。整个审计过程结合代码安全扫描工具和人工审计,期间也发现代码安全审计工具的漏报误报问题,以下将会细述。 审计对象 经过在github上查找,发现 https://github.com/Snow-HardWolf/Vulnerability-goapp 这个项目适合入门,涵盖了常见的go web安全漏洞。Gitclone之后在goland IDE里打开看到如下项目结构: Asserts目录是静态资源文件,跳过。 Pkg目录是使用go实现的业务逻辑代码,重点关注。 Runenv是数据库配置文件和生成数据库的脚本,简单看下就好。 Trap目录是一个CSRF漏洞的演示,重点关注。 Views目录是前端视图页面,简单看下就好。 代码安全扫描 首先我们使用代码安全扫描工具扫描,发现4类高危,2类中危漏洞,我们分别进行验证。 命令注入-数据流分析 在pkg/admin/admin

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

霸气de小男生 提交于 2020-01-16 13:42:50
golang的环境变量有不少,平时安装完go之后,我们关注的一般只是GOPATH、GOROOT这些,还有与go mod有关的几个环境变量,对于其他变量了解不多,想要深入了解这门语言,有必要了解其他环境变量。 我们先总的来了解下有哪些环境变量,以及它们代表的含义: $ go help environment The go command and the tools it invokes consult environment variables for configuration. If an environment variable is unset, the go command uses a sensible default setting. To see the effective setting of the variable <NAME>, run 'go env <NAME>'. To change the default setting, run 'go env -w <NAME>=<VALUE>'. Defaults changed using 'go env -w' are recorded in a Go environment configuration file stored in the per-user configuration directory,

golang strings Replace 字符串替换

拟墨画扇 提交于 2020-01-16 07:26:51
函数声明为: func Replace(s, old, new string, n int) string 官方描述为:返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。 示例代码为,每行的结果见每行上面的注释部分: func main() { // non-overlapping: "123" repeat 6 times in s s := "123lafaldsjglad123lkfasdf123djfal123lkdjga123lksjfla123l" old := "123" new := "888" fmt.Println("non-overlapping: ") // n < 0 ,用 new 替换所有匹配上的 old;n=-1: 888lafaldsjglad888lkfasdf888djfal888lkdjga888lksjfla888l fmt.Println("n=-1: ", strings.Replace(s, old, new, -1 )) // 不替换任何匹配的 old;n=0: 123lafaldsjglad123lkfasdf123djfal123lkdjga123lksjfla123l fmt.Println("n=0: ", strings.Replace(s, old, new, 0 )) // 用

golang基础

狂风中的少年 提交于 2020-01-16 05:07:09
查看环境变量 ,控制台输入:go env **运行:**go run 项目名.go 编译成二进制文件: go build -0 编译后指定的名.exe,,多出一个项目,后缀.exe 再执行项目名;项目名.exe就可以执行文件了 方式二直接运行:go run 文件名.go 来源: CSDN 作者: 灯若九 链接: https://blog.csdn.net/weixin_43527614/article/details/103985793

centos7下安装golang环境和.net core环境和docket环境

ε祈祈猫儿з 提交于 2020-01-16 04:45:50
golang环境安装 在这下载最新的二进制包 https://studygolang.com/dl 最新文档 http://docscn.studygolang.com/doc/install # 安装包 wget https://studygolang.com/dl/golang/go1.13.6.linux-amd64.tar.gz # 解压到 /usr/local 目录 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz # 添加到 PATH 环境变量 export PATH=$PATH:/usr/local/go/bin .net core环境安装 官方文档地址 https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-centos7 # 导入仓库 sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm # 安装 .NET Core SDK sudo yum install dotnet-sdk-3.1 # 安装 .NET Core 运行时 sudo yum install dotnet-runtime-3.1 #

Mac os安装golang开发环境

非 Y 不嫁゛ 提交于 2020-01-16 04:37:17
为了能够愉快地进行golang编程,我们需要安装以下几样东西: 包管理Homebrew 语言环境golang 版本管理git 虚拟器docker 编译器Goland 我将按照这个顺序叙述整个安装过程 docker 其实是可选的,它可以把应用程序打包为可移植的、自给自足的容器。这样一来,你就可以在本地生成golang程序的docker镜像,直接扔到测试环境,便可以进行测试了,不需要再进行代码上传,环境配置等操作了。 如果你觉得暂时用不到,也可以先不装。 1、安装brew Homebrew有点类似于Linux操作系统中的apt-get(Ubuntu)、yum(yum),Mac的操作系统中使用它解决包依赖问题,套用官方的话来说: Homebrew 能干什么? 使用 Homebrew 安装 Apple 没有预装但 你需要的东西 。 让我们开始安装吧! 在命令行输入以下指令 fabric:~ fabric$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 出现以下内容,安装成功 ==> Installation successful! ==> Homebrew has enabled anonymous aggregate user behaviour

最大子序和的golang实现

泪湿孤枕 提交于 2020-01-16 03:59:59
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 首先理解题意: 题目讲究的是连续,那我们可以假设一下,我们现在以下标为0的值为基准值,那么下一位就分为两种情况了: 下一位为负数,那么我们就要与基准值比较,看哪个大 下一位为正数,那么我们肯定是要相加了 核心代码: //取出第一位为基准值 sum := nums[0] res := sum //下标从1开始 for i := 1; i < len(nums); i++ { //当值是负数的时候,就要与res比较,取出最大的 //当值为正数的时候,就要与res相加,那么才会更大 if sum < 0 { sum = nums[i] } else { sum += nums[i] } res = max(res, sum) } 整体代码: package main import ( "fmt" ) func maxSubArray(nums []int) int { //取出第一位为基准值 sum := nums[0] res := sum //下标从1开始 for i := 1; i < len(nums); i++ { //当值是负数的时候