GOLANG
文章平均质量分 70
GLOLANG入门介绍
玖五二七
对新兴的技术感兴趣对开源服务器和客户端感兴趣cocos2d-xpomelofirefly都感兴趣
现在方向是Golang/微服务/Devops/K8s
展开
-
Go教程(十三)goroutine和channel
一次只做一件事情并不是完成任务最快的方法.一些大的任务可以拆解成若干个小任务.goroutine可以让程序同时处理几个不同的任务.goroutine使用channel来协调它们的工作.channel允许goroutine互相发送数据并同步.这样一个goroutine就不会领先于另一个goroutine.它允许我们充分利用具有多处理器的计算机,让程序运行得尽可能的快.多任务我们有a.txt,b.txt,c.txt三个文件,我们需要读取它们的内容至内存,然后再计算它们的大小package mainim原创 2022-04-02 09:06:53 · 758 阅读 · 0 评论 -
Go教程(十二)接口
在Go中一个接口被定义为特定值预期具体的一组方法,后面跟一个{},内部有一组方法,以及方法期望参数和返回值.可以把接口看作需要struct实现的一组行为.接口定义type myInterface interface { method() // 无参数无返回值的方法 methodWithParam(float64) // 带参数的方法 methodWithReturn() string // 带返回值的方法}一个拥有接口定义的所有方原创 2022-03-31 07:37:25 · 522 阅读 · 0 评论 -
Go教程(十一)定义方法
在Golang中不支持重载.不支持类,但是支持自定义方法方法定义和函数定义很像,它们实际上只有一点不同,就是在函数的前面增加一个额外的叫做接收器的参数名称和类型即可type MyType string// m 接收器参数名称 Mytype 接收器参数类型func (m MyType) foo(n int) { fmt.Println("from ",m, " get n", n)和任何其他函数一样,需要提供一个接收器参数的名称,后面跟上其类型为了调用你定义的方法,输入你要调用的方法的值,一原创 2022-03-28 16:54:25 · 645 阅读 · 0 评论 -
Go教程(九)结构体嵌套
无论是数组,切片还是映射,它们的值都只能保存同一种类型.如一个切片变量的所有元素只能是int,而不是有string,这个和动态语言Python,Javascript不同.一个映射变量的所有键只能是string,而不是一些是int.在实际项目过程中,肯定是会遇到这种组合类的变量的,比如学生信息name := "张三"age := 18sex := 1address :="大铁岭"Go里面有一个叫struct的结构体可以把多种不同类型的变量联合起来struct类型struct是一个由不同原创 2022-03-28 16:51:16 · 859 阅读 · 0 评论 -
Go教程(八)结构体
无论是数组,切片还是映射,它们的值都只能保存同一种类型.如一个切片变量的所有元素只能是int,而不是有string,这个和动态语言Python,Javascript不同.一个映射变量的所有键只能是string,而不是一些是int.在实际项目过程中,肯定是会遇到这种组合类的变量的,比如学生信息name := "张三"age := 18sex := 1address :="大铁岭"Go里面有一个叫struct的结构体可以把多种不同类型的变量联合起来struct类型struct是一个由不同原创 2022-03-27 16:47:47 · 468 阅读 · 0 评论 -
Go教程(七)映射
映射是通过键值访问的一个集合.一个映射通过键来访问它存储的值.键是一个简单的从映射中找出值的方式.就像是书前面的索引一样.键可以看作是值的索引相对于数组和切片只能用整数作为索引不同,映射可以作用任何可以使用==操作符的类型作为键,如数字,字符串等等,所有的键类型必须相同,所有的值也必须是同一类型.但是键和值不必是相同的类型.比如键是字符串,值是浮点数声明映射的代码如下var 变量名 map[key_type]value_type这里的var 和map都是go中的保留关键字.// 先声明后创建va原创 2022-03-27 09:12:56 · 582 阅读 · 0 评论 -
Go教程(六)切片
Golang中的切片是对数组的抽象和封装,切片的长度和容量不是固定的,是可以动态增加的切片声明var mySlice []int字面量初始化切片mySlice1 := []int{1, 2, 3}fmt.Println(mySlice1)这里和数组的区别很明显的是数组只需要在[]里面填个值就成了数组,不填,则是切片切片运算符与Python相同,切片可以进行切片操作Slice[startIndex : endIndex] 将返回一个新切片sl1 := mySlice1[0 : len原创 2022-03-26 22:28:33 · 1089 阅读 · 0 评论 -
Go教程(十)函数
函数是由一行或多行代码组成的集合, 你可以在程序中其它位置调用它.Go允许我们定义自己的函数func Foo(){ fmt.Println("hi")}函数声明以关键字func开头,后跟函数名,一对()来接受可选的参数,然后是包含函数代码的{}一旦声明了一个函数你就可以在程序的其他地方调用它.只需要输入它的名字即可.当执行foo时,我们没有在函数名之前加包名.在调用当前包中定义的函数时,是不需要指定包名的.函数命名规则:必须以字母开头,后跟数量和字母名称以大写开头的函数是可导出的,原创 2022-03-26 08:55:07 · 964 阅读 · 0 评论 -
Go教程(五) 数组
数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int、string 等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在 Golang 中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型。Golang 中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。Golang 数组的特点原创 2022-03-26 08:45:14 · 2636 阅读 · 0 评论 -
Go教程(四)For 循环
循环以for开头,后面跟四段控制代码初始化语句,用于初始化变量(可选)条件表达式,用于决定何时中止一个标志,用于循环后的每次迭代的步进(可选)循环块例1package mainimport "fmt"func main() { // x := 1; 初始化变量 // x <5; 条件表达式,决定该循环何时中止 // 标志位代表 x++迭代步进 // {为循环块的开始 }循环块结束 for x := 1; x < 5; x++ { fmt.Pr原创 2022-03-26 08:42:04 · 461 阅读 · 0 评论 -
Go教程附录(一)指针
为什么放附录?因为指针确实稍微涉及到一些计算机底层和硬件相关的知识,不想过早介绍,这里我们不深入,供参考,go的指针已经非常的简洁.比较容易掌握,也安全.指针存在的意义是指向存值的内存地址Golang中所有的变量都可以取出地址变量,就是一块内存区域中存储的值。整型,字符串,数组,struct,都可以取到地址.使用地址运算符&可以取到变量的内存地址import "fmt"func Test() { a := 6 // &a表示一个地址 fmt.Println("addr原创 2022-03-21 09:11:13 · 579 阅读 · 0 评论 -
Go教程(三)条件表达式
go的条件控制有以下几种ifif 表达式 { // 当表达式为true的时候,才执行代码块 **注意这里没有()** 代码块}if…elseif 表达式{ 代码块} else { // 当if的表达式为false进入这里 代码块}if…else if…elseif 表达式{ 代码块} else if 表达式{ 代码块} else{ 代码块}请参考go module来配置工程package mainimport ( "fmt")func原创 2022-03-21 08:58:38 · 574 阅读 · 0 评论 -
Go教程(十二)接口
在Go中一个接口被定义为特定值预期具体的一组方法,后面跟一个{},内部有一组方法,以及方法期望参数和返回值.可以把接口看作需要struct实现的一组行为.接口定义type myInterface interface { method() // 无参数无返回值的方法 methodWithParam(float64) // 带参数的方法 methodWithReturn() string // 带返回值的方法}一个拥有接口定义的所有方原创 2022-03-20 16:40:26 · 236 阅读 · 0 评论 -
Go教程(二)类型转换
Go语言是静态强类型语言go语言中的数学和比较运算必须是相同类型的变量,否则会报错。为变量赋值也必须是相同类型的变量length := 6.4var width int = 2length = width // 报错,赋值的左右两边类型不同fmt.Println("area is", length * width) // 报错,运算的类型不同,一个是float64一个是int解决方法是对类型进行转换一 基本数据类型之间的转换int,err:=strconv.Atoi(string)原创 2022-03-20 16:35:20 · 743 阅读 · 0 评论 -
Go入门教程(一)语法基础
go语言的hello world请参考go module来配置工程以下是hello.go文件package mainimport "fmt"func main() { fmt.Println("hello world")}在控制台执行go run hello.go得到如下输出hello world以下是解释// 每个go文件必须以package <包名>开始,包名为main说明这是程序入口点// 可以执行在控制台运行package main// im原创 2022-03-06 21:07:18 · 363 阅读 · 0 评论 -
go module
GO ModuleGO111MODULE=on以上是开启go modules的前提条件之一,另外要go 1.17版本以上Go Modules 方式下载下来的第三方库位在 $GOPATH/pkg/mod 文件夹里面使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,比如:D:\goproj\modtest这个不在我们的GOPATH中,以下指令初始化新module块go mod init <packagename>看到原创 2022-02-24 08:48:27 · 739 阅读 · 0 评论 -
Go一定要理解的环境概念
输入go env会出现一系列GO相关的环境变量,其中几个重要的go envGOPATH=d:\goGOROOT=f:\goGO111MODULE=onGOROOTGOROOT就是我们Go语言的安装路径。我这里是 GOROOT=f:\go打开这个文件夹,可以看到[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传src, bin, pkg三个文件夹,标准的Go语言代码库中包含了大量的包,并且在安装 Go 的时候多数会自动安装到系统中。我们可以在$GOROOT/src原创 2022-02-24 08:47:38 · 310 阅读 · 0 评论 -
windows上交叉编译go程序
linux新建 linux.bat@echo offset CGO_ENABLED=0 set GOOS=linuxset GOARCH=amd64go build -o ./bin/linux/test新建windows.bat@echo offset CGO_ENABLED=1 set GOOS=windowsset GOARCH=amd64go build -o ./bin/windows/test.exe需要编译对应平台的就用执行对应平台.bat...原创 2022-02-23 22:35:09 · 711 阅读 · 0 评论 -
VSCode调试go
几个关键配置天朝一定要设置GOPROXY,否则所有插件都无法安装set GO111MODULE=onset GOPROXY=https://goproxy.cn,directset GOROOT=f:\go // 这个是安装的时候自动设置windows上的设置如下所示在VSCode中打开插件,然后搜索Go,安装RichGo安装完成后,找个文件夹新建一个Go工程D:\goproj\debugtestPS D:\goproj\debugtest> go mod init debu原创 2022-02-20 21:57:53 · 4242 阅读 · 0 评论