golang

【Golang语言版本】LeetCode 867. Transpose Matrix 矩阵转置

天大地大妈咪最大 提交于 2020-01-24 00:48:02
矩阵转置,A[i][j] 变成A[j][i] 比较简单,直接上代码了。 func transpose(A [][]int) [][]int { B := make([][]int, len(A[0])) for i := 0; i < len(A[0]); i++ { B[i] = make([]int, len(A)) for j := 0; j < len(A); j++ { B[i][j] = A[j][i] } } return B } 来源: 51CTO 作者: 努力的C 链接: https://blog.51cto.com/fulin0532/2432313

持续构建:使用Docker镜像方式构建go语言项目

萝らか妹 提交于 2020-01-23 08:45:35
go官方提供了各种版本的镜像,在Easypack中根据官方的Alpine镜像也创建go语言的镜像,因为go 1.13开始GOPROXY 默认为 https://proxy.golang.org,将GOPROXY缺省设定为goproxy.cn,以方便更简单地使用go镜像进行构建。 golang官方镜像 官方镜像分如下三类: 普通镜像: golang:<version> Alpine镜像: golang:<version>-alpine Windows镜像: golang:<version>-windowsservercore 详细可参看:https://hub.docker.com/_/golang Easypack的Alpine镜像 镜像tag: golang:<version>-alpine 下载镜像 下载镜像:docker pull liumiaocn/golang:1.13.5-alpine3.11 编译go语言应用 这里以Prometheus提供的go语言的示例应用(为Prometheus提供可供抓取的数据)为例进行说明如何使用Docker镜像进行go语言应用的编译。 准备go语言应用 执行命令:git clone https://github.com/prometheus/client_golang.git 当然也可以直接使用自己手头已有的go语言的应用示例进行编译。

Golang进阶面试题整理

允我心安 提交于 2020-01-22 16:14:03
1. 简述Golang的方法有什么特别之处 函数的定义声明没有接收者。 方法的声明和函数类似,他们的区别是:方法在定义的时候,会在func和方法名之间增加一个参数,这个参数就是 接收者 ,这样我们定义的这个方法就和接收者绑定在了一起,称之为这个接收者的方法。 Go语言里有两种类型的接收者: 值接收者和指针接收者 。 使用 值类型接收者 定义的方法,在调用的时候, 使用的其实是值接收者的一个副本 ,所以对该值的任何操作, 不会影响原来的类型变量 。-------相当于形式参数 如果我们使用一个 指针作为接收者 ,那么就会其作用了,因为指针接收者传递的是一个指向原值指针的副本,指针的副本,指向的还是原来类型的值,所以修改时, 同时也会影响原来类型变量的值 。 2. Golang可变参数 函数方法的参数,可以是任意多个,这种我们称之为可以变参数,比如我们常用的fmt.Println()这类函数,可以接收一个可变的参数。 可以变参数,可以是任意多个。我们自己也可以定义可以变参数,可变参数的定义,在类型前加上省略号…即可。 func main ( ) { print ( "1" , "2" , "3" ) } func print ( a ... interface { } ) { for _ , v := range a { fmt . Print ( v ) } fmt .

golang三个点的用法

我们两清 提交于 2020-01-22 12:55:43
文章目录 变长的函数参数 调用拥有变长参数列表的函数 标识数组元素个数 Go命令行中的通配符 在Golang中,三个点一共会用在四个地方: 变长的函数参数 如果最后一个函数参数的类型的是 ...T ,那么在调用这个函数的时候,我们可以在参数列表的最后使用若干个类型为 T 的参数。这里, ...T 在函数内部的类型实际是 []T 。 func Sum ( nums ... int ) int { res := 0 for _ , n := range nums { res += n } return res } Sum ( 1 , 2 , 3 ) 调用拥有变长参数列表的函数 上面调用Sum函数时,是将变长参数分开写的。如果我们有一个slice,那么我们调用时不必将slice拆开再调用,直接在slice后跟 ... 即可: primes := [ ] int { 2 , 3 , 5 , 7 } fmt . Println ( Sum ( primes ... ) ) 标识数组元素个数 这里, ... 意味着数组的元素个数: // len(stooges) == 3 stooges := [ ... ] string { "Moe" , "Larry" , "Curly" } Go命令行中的通配符 描述包文件的通配符。 在这个例子中,会单元测试当前目录和所有子目录的所有包: go

LeetCode 三数之和 Golang

落花浮王杯 提交于 2020-01-22 02:31:43
题目地址 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4] , 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 代码实现 package main import ( "fmt" "sort" ) func main() { nums := []int{-1,0,1,-1,2,2,2,2,-1,0,0,0,-1,-4} result := threeSum(nums) fmt.Println(result) } func findNext(nums []int, i int) int { j := i + 1 for ; j < len(nums); j++ { if nums[i] != nums[j] { return j } } return j } func findPre(nums []int, i int) int { j := i - 1 for ; j >= 0; j-- { if nums[i] != nums[j] { return j } } return -1 } func threeSum(nums

golang基础篇-环境搭建

安稳与你 提交于 2020-01-22 02:06:27
官网下载: https://golang.org/dl/ 国内下载: https://golang.google.cn/dl/ 概念解释: GOROOT: golang的安装路径,安装时自己生成 GOPATH: 实际项目的工程目录(建议)包含bin ,pkg,src如下 bin:编译可执行文件存放路径,可自动生成 pkg:编译的.a中间文件存放路径,可自动生成 src:项目源码路径 备注: 执行 go mod vendor 可以将相关依赖包放到项目根目录的vendor文件夹下 go1.13中只在项目包含了 go.mod 文件时启用 Go modules,go mod的应用可以让go项目在任意目录下编译 gopath修改主要是方便项目源码管理,开发过程中,统一放到gopath下可以直接定位代码(注意防止项目相互引用) 相关依赖包放到gopath下,可以被直接引用到 go get : 例如:go get github.com/gin-gonic/gin go get 自动执行步骤: 1. 从远程下载需要用到的包 (默认安全协议https,如果想用http拉包则需要加 -insecure 配置:go get -insecure XXXXX ) 2. 执行go install win环境 下载go语言安装包 双击msi,一路next(不用更改安装路径,默认C:\Go) 到 Install

E反转字符串--golang

故事扮演 提交于 2020-01-21 16:11:45
题目描述 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char [ ] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 代码实例 package main import ( "fmt" ) //type char [...]string func main ( ) { // istr := "hello worlds" //fmt.Println(reverseString01(istr)) //getStr() //reverseString02([]byte(istr)) reverseString03 ( [ ] byte ( istr ) ) //reverseString03([]byte(istr)) } //算法1 使用i--的倒叙方式 输入参数采用string func reverseString01 ( istr string ) ( ostr [ ] string ) { var slic1 = make ( [ ] string , 0 ) for i := len ( istr ) ; i <= len ( istr ) && i > 0 ; i -- { //fmt.Println(istr[i-1])

grpc 在golang 介绍 (2)

醉酒当歌 提交于 2020-01-21 03:37:08
上一章我们简单介绍了一下grpc 概念方面的信息,这一章我们具体学习grpc 在golang的知识。 源码地址: https://github.com/grpc/grpc-go/tree/master/examples/route_guide 关于 protocol buffers 的相关信息我们这里暂不赘述,如果有读者对这部分的知识不熟悉可以参看以下链接学习。 http://doc.oschina.net/grpc?t=60133 先上我们的 route_guide.proto 文件 // Interface exported by the server. service RouteGuide { // A simple RPC. 最基本的不含流式信息的rpc 接口 // // Obtains the feature at a given position. // // A feature with an empty name is returned if there's no feature at the given // position. rpc GetFeature(Point) returns (Feature) {} // A server-to-client streaming RPC. 服务器端是流式信息的接口 // // Obtains the Features

以alpine作为基础镜像构建Golang可执行程序

痞子三分冷 提交于 2020-01-21 01:09:34
Alpine介绍 Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版, Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时, Alpine 还提供了自己的包管理工具 apk ,可以通过 https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。 Alpine 由非商业组织维护的,支持广泛场景的 Linux 发行版,它特别为资深 / 重度 Linux 用户而优化,关注安全,性能和资源效能。 Alpine 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统 / 环境。 Alpine Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他 Docker 镜像,它的容量非常小,仅仅只有 5 MB 左右(对比 Ubuntu 系列镜像接近 200 MB ),且拥有非常友好的包管理机制。官方镜像来自 docker-alpine 项目。 目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高

Golang生成公钥私钥

北慕城南 提交于 2020-01-20 17:54:14
//RSA公钥私钥产生 func GenRsaKey(bits int) (publicKeyStr, privateKeyStr string, err error) { // 生成私钥文件 privateKey, err := rsa.GenerateKey(rand.Reader, bits) if err != nil { return } derStream := x509.MarshalPKCS1PrivateKey(privateKey) block := &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: derStream, } bufferPrivate := new(bytes.Buffer) err = pem.Encode(bufferPrivate, block) if err != nil { return } privateKeyStr = bufferPrivate.String() // 生成公钥文件 publicKey := &privateKey.PublicKey derPkix, err := x509.MarshalPKIXPublicKey(publicKey) if err != nil { return } block = &pem.Block{ Type: "PUBLIC KEY",