
Go/Golang
kikajack
这个作者很懒,什么都没留下…
展开
-
Golang - init() 函数
init 和 main 函数对比这两个函数都是 golang 内置的函数:main 函数只能在 main 包中出现,是整个程序的入口init 函数可以在任意文件中出现,且每个文件中可以出现任意次数一个文件中多个 init 函数,从上往下执行package mainimport "fmt"func init() { fmt.Println("init up")}func init() { fmt.Println("init down")}func main()原创 2020-09-30 23:36:30 · 503 阅读 · 0 评论 -
Golang 并发goroutine之间实现通信
Goroutine 之间常用的通信方式有:全局变量channelcontext 上下文sync.WaitGroup如果只是单纯的等待所有任务完成,可以使用 sync.WaitGroup:package mainimport ( "fmt" "sync" "time")func main() { var wg sync.WaitGroup for i := 0; i < 3; i++ { wg.Add(1) go fun原创 2020-08-29 23:02:13 · 799 阅读 · 0 评论 -
Golang 操作 Redis
github.com/gomodule/redigo/redis 库package mainimport ( "fmt" "github.com/gomodule/redigo/redis")func main() { c, err := redis.Dial("tcp", ":6379") if err != nil { fmt.Println("connect err: ", err) return } defer c.Close() // 通过 Send 和 Re原创 2020-07-24 18:55:55 · 256 阅读 · 0 评论 -
golang 反射demo
反射代码在运行过程中,动态获取并修改代码自身的能力,就是反射。为啥用反射对于静态类型语言,为了提高灵活性,有时在代码里允许传入多种类型变量,编译的时候不清楚会用哪一种,只有代码执行的时候才能动态感知到。当然可以通过类型断言来判断参数具体类型,但是需要针对每一种具体类型进行断言,代码会很长。而且后面增加新的自定义类型时,都需要改动断言部分的代码。通过反射的 TypeOf 和 ValueOf 函数,可以直接从接口中获取目标对象的信息。示例通过反射查看变量类型和值package mainimpo原创 2020-07-23 20:12:16 · 297 阅读 · 0 评论 -
golang 类型断言
函数使用 interface{} 作为参数时,可以接收各种类型的数据。使用的时候通常需要判断具体是哪一种类型,这时候就需要类型断言。语法具体类型匹配x.(string)x.(int)x.(bool)x.(int32)switch case 中匹配 switch i.(type) { case string: fmt.Println("is string") case int: fmt.Println("is int") }示例package mainim原创 2020-07-09 13:08:38 · 623 阅读 · 0 评论 -
Golang 实现 RPC
go RPC 包文档通过 go 自带的 net/rpc 包可以很容易实现 RPC。go 官方文档对 RPC 服务端方法的要求如下:方法是导出的方法有两个参数,都是导出类型或内建类型方法的第二个参数是指针方法只有一个error接口类型的返回值通过 net/rpc 包实现 RPCGo 自带的 rpc 包,在编解码时使用了 Gob (Go binary)编码,导致无法跨平台。可以替换为...原创 2020-04-25 22:15:55 · 391 阅读 · 0 评论 -
Golang 配置代理
通过 go get 命令下载各种依赖时,经常需要访问 github/google 等网站。配置好代理后,可以快速稳定的访问。常用的 go 代理goproxyhttps://goproxy.io/zh/阿里云https://mirrors.aliyun.com/goproxy/七牛云https://goproxy.cn设置 go 代理go 1.13 及以上版本可以直接用下面命令...原创 2020-04-25 11:19:17 · 22448 阅读 · 0 评论 -
golang 二维 slice 的奇怪 bug
对二维 slice 操作时,对长度 16 的 slice 的第 8 次操作时,影响了第 16 个 slice 的最后一个元素。。package mainimport "fmt"// import "sort"// import "reflect"// import "math"// import "strings"func showSlice(s [][]int) { f...原创 2020-03-05 22:04:17 · 802 阅读 · 0 评论 -
Hugo - 安装、设置及使用
Hugo 官方主页:https://gohugo.iohugo 是基于 Go 语言的静态网站生成器。有两种方式发布生成的静态网站文件:放到自己的服务器上提供服务:需要自己购买服务器把网站托管到 GitHub Pages:需要将静态页面文件 push 到 GitHub 的博客项目的 gh-pages 分支并确保根目录下有 index.html 文件。安装从 hugo 的 Git...原创 2018-05-22 22:35:20 · 18249 阅读 · 3 评论 -
go tour - Go 入门实验教程
在线实验地址 - 官网 在线实验地址 - 国内可以将官方教程作为独立程序在本地安装使用,这样无需访问互联网就能运行,且速度更快,因为是在你的机器上构建并运行代码示例。本地运行此教程的中文版的步骤如下:下载并安装 Go用 go get 命令来安装 gotour:go get github.com/Go-zh/tour/gotour运行产生的 gotour 可执行文件...翻译 2018-04-07 14:05:26 · 6531 阅读 · 1 评论 -
Go slice - 用法和内部原理
原文地址1. 引言Go 的 slice 类型为处理同类型的数据序列提供方便而高效的方式。slice 类似于其他语言中的数组,但是有一些不同寻常的特性。本文将深入 slice 的本质及用法。2. 数组Go 语言中的的 slice 是在数组之上的抽象数据类型,因此要了解 slice 必须先理解数组。数组类型定义了长度和元素类型。例如,[4]int 类型表示一个由四个整数组成的数...翻译 2018-04-06 15:05:40 · 1195 阅读 · 0 评论 -
Go 文档 - 如何写 Go 代码
原文地址1. 引言本文档展示了一个简单 Go 包的开发,并介绍了用 go工具 来获取、 构建并安装 Go 包及命令的标准方式。go 工具需要你按照指定的方式来组织代码。请仔细阅读本文档, 它说明了如何以最简单的方式来准备并运行你的 Go 安装。视频讲解可在 此处 观看。2. 代码的组织2.1 概述Go 程序员通常将他们所有的 Go 代码保存在一个工作空间中。工作空间...翻译 2018-04-05 11:35:02 · 798 阅读 · 0 评论 -
Go 中的常用命令
Go 提供了一套程序来构建和处理 Go 源代码。这个套件中的程序通常不是直接运行,而是由 go 程序调用,将这些程序作为 go 程序的子命令,例如 go fmt。这样运行时,该命令会在完整的 Go 源代码包上运行,go 程序使用适合于包级处理的参数调用基础二进制文件。套件中的程序也可以通过使用 go tool 子命令(如 go tool vet)作为独立的二进制文件直接运行。这种调用方式允...原创 2018-04-04 23:32:59 · 1147 阅读 · 0 评论 -
详解 Go 中的 slice - 官方文档翻译
《Arrays, slices (and strings): The mechanics of ‘append’ 》翻译,原文地址相关资料:Go Slices:使用及内部特性1. 介绍编程语言最常见的特征之一就是数组。数组看起来简单,但在将它们添加到编程语言中时,必须回答很多问题,例如:固定大小还是可变大小?数组大小(size)是类型的一部分吗?多维数组什么样?空数组是否有...翻译 2018-04-04 21:51:27 · 1127 阅读 · 3 评论 -
Go 文档 - 概述
Go 官网 - 被墙 Go 官网 - 大陆可用,速度还不错 Go 中文官网 - 适合英语水平低的,但网站无法和最新版官网文档保持同步(目前官方文档是 1.10,这里还是 1.2) Go 教程中文版 - 通过实验入门 Go 语言 Go 标准库中文版原文地址1. 文档概况1.1 安装Go 的安装比较简单,暂时没有翻译计划。1.2 学习1.2.1 Go 教程...原创 2018-03-17 09:08:35 · 1061 阅读 · 0 评论