golang语法
TheIgnoranceMan
这个作者很懒,什么都没留下…
展开
-
golang实现网络文件传输
获取文件属性和命令行参数首先获取文件名。借助os包中的stat()函数来获取文件属性信息。在函数返回的文件属性中包含文件名和文件大小。Stat参数name传入的是文件访问的绝对路径。FileInfo中的Name()函数可以将不含路径的文件名单独提取出来。func Stat(name string) (FileInfo, error) type FileInfo interface { Name() string Size() int64 Mode() F原创 2021-08-30 03:36:15 · 672 阅读 · 0 评论 -
UDP 通信
UDP 与 TCP 的差异TCPUDP面向连接面向无连接要求系统资源较多要求系统资源较少TCP 程序结构较复杂UDP 程序结构较简单使用流式使用数据报式保证数据准确性不保证数据准确性保证数据顺序不保证数据顺序通讯速度较慢通讯速度较快UDP 服务器由于 UDP 是“无连接”的,所以,服务器端不需要额外创建监听套接字,只需要指定好 IP 和 port,然后监听该地址,等待客户端与之建立连接,即可通信。//创建监听地址:func原创 2021-08-30 02:58:53 · 218 阅读 · 0 评论 -
socket
定义socket:插座插口的意思,理解为套接字,用于描述IP地址和端口。可以实现不同应用间的通讯。起源于UNIX,以一切都是文件的思想设计的,socket就是此模式下的一个实现。网络的 Socket 数据传输是一种特殊的 I/O,Socket 也是一种文件描述符。Socket 也具有一个类似于打开文件的函数调用:Socket(),该函数返回一个整型的 Socket 描述符,随后的连接建立、数据传输等操作都是通过该 Socket 实现的原理 发送端========>接收端 sfd 接原创 2021-08-30 00:16:34 · 120 阅读 · 0 评论 -
go-map(集合)
Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。定义 Map可以使用内建函数 make 也可以使用 map 关键字来定义 Map:/* 声明变量,默认 map 是 nil */var map_variable map[key_data_type]value_data_ty原创 2021-08-27 00:21:59 · 65 阅读 · 0 评论 -
golang递归
递归,就是在运行的过程中调用自己。func getvalue(num uint) { if num <= 0 { return } fmt.Println("num is ", num, "go on") num -= 1 getvalue(num) //务必设置退出条件)}//递归函数实现阶乘func jiecheng(num uint64) (sum uint64) { if num > 0 { sum = num * jiecheng(num-1) retu原创 2021-08-27 00:21:34 · 130 阅读 · 0 评论 -
golang-method
Go 没有类。不过你可以为结构体类型定义方法。方法就是一类带特殊的 接收者 参数的函数。方法接收者在它自己的参数列表内,位于 func 关键字和方法名之间。在此例中,Abs 方法拥有一个名为 v,类型为 Vertex 的接收者。package mainimport ( "fmt" "math")type Vertex struct { X, Y float64}func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X +原创 2021-08-27 00:21:16 · 53 阅读 · 0 评论 -
golang-interface
Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。//接口定义type interface_name interface{ method_1[return_type] method_2[return_type] method_3[return_type] method_4[return_type]}//结构体定义type struct_name struct{ value1 type1; ...}原创 2021-08-27 00:20:55 · 78 阅读 · 0 评论 -
go-error
Go 语言通过内置的错误接口提供了非常简单的错误处理机制。error类型是一个接口类型,这是它的定义:type error interface { Error() string}我们可以在编码中通过实现 error 接口类型来生成错误信息。函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息。package mainimport ( "fmt" "strings")type stringError struct { strErr string原创 2021-08-27 00:20:26 · 108 阅读 · 0 评论 -
go-channel
通道(channel)是用来传递数据的一个数据结构。通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。ch <- v // 把 v 发送到通道 chv := <-ch // 从 ch 接收数据 // 并把值赋给 v声明一个通道很简单,我们使用chan关键字即可,通道在使用前必须先创建:ch := make(chan int)注意:默认情况原创 2021-08-27 00:20:03 · 58 阅读 · 0 评论 -
Go匿名函数
Go语言支持匿名函数,即在需要使用函数时再定义函数,匿名函数没有函数名只有函数体,函数可以作为一种类型被赋值给函数类型的变量,匿名函数也往往以变量方式传递,这与C语言的回调函数比较类似,不同的是,Go语言支持随时在代码里定义匿名函数。匿名函数是指不需要定义函数名的一种函数实现方式,由一个不带函数名的函数声明和函数体组成,下面来具体介绍一下匿名函数的定义及使用。定义一个匿名函数匿名函数的定义格式如下:func(参数列表)(返回参数列表){函数体}1.匿名函数的定义就是没有名字的普通函数定义。原创 2021-08-27 00:19:44 · 2088 阅读 · 0 评论 -
go-list
在Go语言中,列表使用 container/list 包来实现,内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作。初始化列表list 的初始化有两种方法:分别是使用 New() 函数和 var 关键字声明,两种方法的初始化效果都是一致的。通过 container/list 包的 New() 函数初始化 list变量名 := list.New()通过 var 关键字声明初始化 listvar 变量名 list.List列表与切片和 map 不同的是,列表并没有具体元素类型原创 2021-08-27 00:19:23 · 63 阅读 · 0 评论 -
Go-Goroutine
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。goroutine 语法格式:go 函数名( 参数列表 )package mainimport ( "fmt" "time")func say(s string) { for i := 0; i < 5; i++ { time.S原创 2021-08-27 00:19:05 · 1012 阅读 · 0 评论 -
go-defer
defer 语句会将函数推迟到外层函数返回之后执行。 推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用。package mainimport "fmt"func main() { defer fmt.Println("world") fmt.Println("hello") fmt.Println("counting") for i := 0; i < 10; i++ { ...原创 2021-08-27 00:22:22 · 61 阅读 · 0 评论 -
golang控制语句
forGo 只有一种循环结构:for 循环。 基本的 for 循环由三部分组成,它们用分号隔开: 初始化语句:在第一次迭代前执行,可选 条件表达式:在每次迭代前求值 后置语句:在每次迭代的结尾执行,可选package mainfunc main() { /*sum:=0 for i:=0;i<10;i++{ sum += i }*/ sum := 1 for ; sum < 10; { sum += sum } //此时你可以原创 2021-08-26 17:36:18 · 68 阅读 · 0 评论 -
golang切片
切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型,这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内。 Go语言中切片的内部结构包含地址、大小和容量,切片一般用于快速地操作一块数据集合,如果将数据集合比作切糕的话,切片就是你要的“那一块”,切的过程包含从哪里开始(切片的起始位置)及切多大(切片的大小),容量可以理解为装切片的口袋大小,如下图所示。 切片并不存储任何数据,它只是描述了底层数组中的一段。 更改切片的元素会修改其底原创 2021-08-26 17:35:13 · 66 阅读 · 0 评论 -
golang数组
Go语言中因为数组是由固定长度组成的,所以一般不用,多用可以增长收缩的切片 var 数组变量名[元素数量]Type 数组变量名:数组声明及使用时的变量名。 元素数量:数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量不能含有到运行时才能确认大小的数值。 Type:可以是任意基本类型,包括数组本身,类型为数组本身时,可以实现多维数组。package mainimport ("fmt")func shuzhuTest(){ ///var a[...原创 2021-08-26 17:33:31 · 238 阅读 · 0 评论 -
golang标识符
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var append bool byte cap..原创 2021-08-26 17:32:10 · 48 阅读 · 0 评论 -
golang指针
指针(pointer)在Go语言中可以被拆分为两个核心概念: 类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。 切片,由指向起始元素的原始指针、元素数量和容量组成。 取地址操作符&和取值操作符是一对互补操作符,&取出地址,根据地址取出地址指向的值。变量、指针地址、指针变量、取地址、取值的相互关系和特性如下: 对变量进行取地址操作使用&操作符,可以获得这个变量的指针..原创 2021-08-26 17:30:36 · 500 阅读 · 0 评论 -
golang变量
可以在包内和函数内声明 var a,bc bool,类型在变量名后面 声明可以包含初始值var i,j int = 1,2 有初始值可以不用写变量类型var x,y,z = true,30,"aaa" 函数内可以使用短赋值语句:=,如果是函数外每段语句必须按照关键字开头 基本类型: bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byt...原创 2021-08-26 17:29:16 · 45 阅读 · 0 评论 -
golang函数
函数可以有多个参数,或者没有参数 func add(x int, y int) int {return x + y} 函数有两个及以上形参是相同类型,除了最后一个类型,其他都可以省略 add(x int,y int)=>add(x,y int) 函数可以任意多值返回func add()(int,string,float){} 函数返回值可以被命名 func cal(num int)(x,y int){x=num/2;y=num-2;return x,y} 函..原创 2021-08-26 17:28:03 · 41 阅读 · 0 评论 -
golang包
Go程序都是由包构成,程序从main包还是运行包名与导入路径的最后一个元素相同包导入可以使用import ()语句来包含多个包包内首大写字母为外部可用,小写只能包内部访问原创 2021-08-26 17:25:26 · 45 阅读 · 0 评论 -
Golang安装方式
Linux:先获取安装链接后,使用wget下载到opt,然后使用tar解压到/usr/local,最后设置环境变量和路径,使用go version确认安装完成。 命令如下: wget xxxx.tar.gz tar -xzf goxxx.gz -C /usr/local export GOROOT=/usr/local/go export GOPATH=/workspace/go export PATH=$PATH:$GOROOT/bin source原创 2021-08-26 17:18:40 · 84 阅读 · 0 评论