
GO
jadeshu
这个作者很懒,什么都没留下…
展开
-
GO学习目录
(1)Go变量声明、赋值和常量(2)Go基本数据类型(3)Go运算符-----Go type别名和定义类型区别(4)Go程序结构和流程控制(5)Go数组(6)Go函数和函数式编程-----Go内置函数(7)Go切片(8)Go Map(9)Go指针-----Go语言new和make-----Go字符串常用处理(10)Go结构体struct(11)Go方法/接收者-----Go值接收者方法和指针接收者方法-----Go结...原创 2020-06-07 00:34:04 · 237 阅读 · 0 评论 -
(1)Go变量声明、赋值和常量
先简单了解一下控制台输出,在go中,我们使用fmt包中的函数进行在控制台中打印,一般用以下几个函数 fmt.Print() #不换行输出 fmt.Printf() #字符串格式化输出 同C语言 fmt.Println( ) #带换行输出 fmt.Fprintf() fmt.Fprint() fmt.Fpr...原创 2019-10-31 21:01:10 · 1067 阅读 · 1 评论 -
(2)Go基本数据类型
Go语言的基本类型有:bool string int、int8、int16、int32、int64 uint、uint8、uint16、uint32、uint64、uintptr byte // uint8 的别名 rune // int32 的别名 代表一个 Unicode 码 float32、float64 complex64、complex128 变量被声明之后,系...原创 2019-11-01 22:06:15 · 240 阅读 · 0 评论 -
(3)Go运算符
运算符Go 语言内置的运算符有:算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符算数运算符运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 注意:++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。关系运算符运算符 描述 == 检查两个值是否相等,如果相等...原创 2019-11-03 17:59:43 · 274 阅读 · 0 评论 -
go type别名和定义类型区别
package mainimport ( "fmt")type person struct { age int name string}func (p person)testPer() { fmt.Println("person::testPer()")}// 注意两者区别//type man person 另外类型type man = person ...原创 2019-11-04 18:57:37 · 1098 阅读 · 0 评论 -
(4)Go程序结构和流程控制
Go程序主要由以下几部分组成:(具体可以参考2选择结构中的实例)*包声明 *导入包 *函数 *变量 *语句和表达式 *注释流程控制1.顺序结构 2.选择结构(1)if else if和else分支结构在 Go 中当然是直接了当的了。 包声明 package main 导入fmt包 ...原创 2019-11-03 17:29:29 · 191 阅读 · 0 评论 -
(5)Go数组
数组数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:// 定义一个长度为3元素类型为int的数组avar a [3]int数组定义:var 数组变量名 [元素数量]T比如:var a [5]int, 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。[5]int和[1...原创 2019-11-03 17:35:11 · 213 阅读 · 0 评论 -
go语言error=216编译错误
CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)版本的程序,然后联系软件发布者。1.请检查所运行的main函数是否在package main中;可能因为在软件中移动文件后自动更改package包名了2.运行路径下是否有main函数3....原创 2019-11-03 17:55:20 · 698 阅读 · 0 评论 -
(6)Go函数和函数式编程
一、Go函数 函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。函数定义Go语言中定义函数使用func关键字,具体格式如下:func 函数名(参数)(返回值){ 函数体}其中:函数名:由字母、数字、下划线组成。但函数名的第一个字母不能...原创 2019-11-04 15:46:55 · 675 阅读 · 0 评论 -
Go内置函数
appendgo语言中的append函数作用是在切片变量的后面追加新的数据,然后返回新的切片变量func append(slice []Type, elems ...Type) []typeslice为需要追加的源切片,elems为可变参数列表,返回值为追加后的切片在调用此函数时,通常需要以slice接收追加后的返回切片,否则slice仍为追加前的数据copycopy函...原创 2019-11-15 20:04:15 · 372 阅读 · 0 评论 -
(7)Go切片
切片切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。切片的定义声明切片类型的基本语法如下:var name []T其中,name:表示变量名 T:表示切片中的元素类型切片的长度和容量切片拥有自己的长度和容...原创 2019-11-05 22:34:04 · 162 阅读 · 0 评论 -
(8)Go Map
Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。Mapmap是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。map定义Go语言中map的定义语法如下:map[KeyType]ValueType其中,KeyType:表示键的类型。 ValueType:表示键对应的值的类型。map类型的变量默...原创 2019-11-05 22:36:35 · 118 阅读 · 0 评论 -
(9)Go指针
区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。Go语言中的指针任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。比如,“永远不要高估自己”这句话是我的座右铭,我想把它写入程序中,程序一启动这句话是要加载到内存(假设内存地...原创 2019-11-14 22:59:19 · 293 阅读 · 0 评论 -
go语言new和make
1.newfunc new(Type) *Type 内建函数,内建函数 new 用来分配内存,它的第一个参数是一个类型,它的返回值是一个指向新分配类型默认值的指针!2.makefunc make(Type, size IntegerType) Type 内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这...原创 2019-11-05 20:56:43 · 876 阅读 · 0 评论 -
Go字符串常用处理
应用到strings包/** * @Author: jadeshu * @Description: * @File: main * @Version: 1.0.0 * @Date: 2019/11/7 1:01 */package mainimport ( "fmt" "strconv" "strings")func main() { // 字符串连接组合...原创 2019-11-07 02:13:13 · 424 阅读 · 0 评论 -
(10)Go结构体struct
结构体Go语言中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称struct。 也就是我们可以通过struct来定义自己的类型了。Go语言中通过struct来实现面向对象。结构体的定义使用type和stru...原创 2019-11-05 22:57:18 · 256 阅读 · 0 评论 -
(11)Go方法/接收者
方法和接收者Go语言中的方法(Method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者self。方法的定义格式如下:func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) { 函数体}其中,接收者变量:接收者中的参数变量名在命名时,官方建议使用接收者类型名的第一个小...原创 2019-11-14 23:07:50 · 810 阅读 · 0 评论 -
Go值接收者方法和指针接收者方法
一、类型对象和类型对象指针调用 Go语言有值类型和指针类型直接调用其值接收者方法和指针接收者方法的区别:先看一个实例:package mainimport "fmt"type IFather interface { getName() string setName(string)}type Person struct { name string}fun...原创 2019-12-17 16:11:51 · 2557 阅读 · 1 评论 -
Go结构体继承指针和非指针区别(转换接口)
1.实例不转换为接口的情况下无区别总结: 不转换为接口时(字段继承和字段指针继承)无区别, 在代码中1,2,3,4处(即a,b,pa,pb)都可以正常调用父类的函数package mainimport "fmt"type iter interface { run() sleep()}type base struct{}func (p *base)run() { fmt.Println("aBase::run()")}func (p base)sle原创 2020-06-06 17:21:20 · 3264 阅读 · 0 评论 -
(12)Go面向对象
尽管Go中没有封装、继承、多态这些概念,但可以通过别的方式实现这个特性:*封装:通过方法实现*继承:通过匿名字段实现*多态:通过接口实现package mainimport "fmt"type person struct { age int name string}// 方法func (p *person) display() { fmt.Println(...原创 2019-11-05 23:00:50 · 154 阅读 · 0 评论 -
(13)Go接口
接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。接口接口类型在Go语言中接口(interface)是一种类型,一种抽象的类型。interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数...原创 2019-11-14 23:20:17 · 277 阅读 · 0 评论 -
go的接口内部实现
1 前言1.1 Go汇编Go语言被定义为一门系统编程语言,与C语言一样通过编译器生成可直接运行的二进制文件。这一点与Java,PHP,Python等编程语言存在很大的不同,这些语言都是运行在基于C语言开发的虚拟机上,如果想深入了解运行原理只需要看懂对应的C语言开发的虚拟机(绝大部分程序员应该都对C语言有基本的了解)。但是如果想深入学习Go语言,就需要对基本的汇编指令和语法有一定的了解(通过...转载 2019-11-10 20:07:06 · 841 阅读 · 1 评论 -
(14)Go导入包几种方式
(1)一般方式【导入单个和多个】(2)匿名导入包/忽略包 (主要用到有些包的init函数)(3)点操作包(4)包别名/自定义包名package main////导入单个包//import "fmt"////func main() {// fmt.Println("导入包操作案例!")//}//导入多个包方式import ( "fmt" "os")f...原创 2019-11-04 23:12:00 · 805 阅读 · 0 评论 -
Go工程项目方面注意
1.同一个文件夹下的包名必须相同2.文件夹下go文件使用的包名不是必须同文件夹名,但建议包名同文件夹名3.不用目录包名不同4.调用不同包里面的函数格式:包名.函数名(...)5.包导出给外部使用时的函数/全局变量/常量需首字母大写,内部使用的首字母小写,GO通过 首字母区别访问权限6.配置src目录放源代码 ,如果src中有多个文件或者多个包,需要配置GOPATH环...原创 2019-11-04 23:29:06 · 377 阅读 · 0 评论 -
(15)Go错误处理
1.erro(一般错误)package mainimport ( "errors" "fmt")func div(a, b int) (res int) { if b == 0 { err := errors.New("分母不能为0") println(err.Error()) } else { res = a/b } return}func mai...原创 2019-11-06 00:57:18 · 141 阅读 · 0 评论 -
(16)Go OS文件基础创建、打开、读写与关闭
OS下打开与关闭文件在GO最基层面操作os包内File几个基础函数funcOpenFilefunc OpenFile(name string, flag int, perm FileMode) (file *File, err error)在OpenFile基础上包装的两个函数func Create(name string) (file *File, err error) // 采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件...原创 2020-06-06 23:01:24 · 2133 阅读 · 0 评论 -
(17)Go 带缓冲的读写、复制(bufio包)
GO 带缓冲的读写需要用到bufio这个包,bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,同时还提供了缓冲和一些文本I/O的帮助函数的对象。带缓冲的读取func NewReader(rd io.Reader) *Readerfunc (b *Reader) Reset(r io.Reader) func (b *Reader) Buffered() int func (b *Reader) Peek(n int) ([]byte, err..原创 2020-06-06 23:47:33 · 751 阅读 · 0 评论 -
Go中bufio.ReadString和bufio.Read返回EOF区别
package mainimport ( "bufio" "fmt" "io" "os")// 带缓冲的读入func main() { file, err := os.Open("1.txt") if err != nil { fmt.Println("文件打开失败" + err.Error()) return } defer func() { file.Close() fmt.Println("文件关闭") }() // 创建带缓冲的读取器 read.原创 2020-06-07 02:21:43 · 5523 阅读 · 2 评论 -
(18)Go io.ioutil便携的读写、复制
io/ioutil包内函数func ReadAll(r io.Reader) ([]byte, error) func ReadFile(filename string) ([]byte, error) func WriteFile(filename string, data []byte, perm os.FileMode) error最终还是调用底层的os.File内的函数读取文件package mainimport ( "fmt" "io/ioutil")func .原创 2020-06-07 00:22:21 · 409 阅读 · 0 评论 -
Go文件处理
package mainimport ( "bufio" "fmt" "os")func main() { // 新建文件 file, e := os.Create("ceshi.txt") if e != nil { // 发送错误时 fmt.Println("文件失败!") } // 写入字符串 file.WriteString("this is a test...原创 2019-11-06 02:21:10 · 177 阅读 · 0 评论 -
Go-Json操作
/** * @Author: jadeshu * @Description: * @File: main * @Version: 1.0.0 * @Date: 2019/11/7 2:33 */package mainimport ( "encoding/json" "fmt")// 输出json 结构体中字段首字母必须大写type person struct {...原创 2019-11-07 03:17:06 · 820 阅读 · 0 评论 -
(19)Go反射
一、概述 每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的,只要包含这个包就可以使用。 在讲反射之前,先来看看Golang关于类型设计的一些原则 变量包括(type, value)两部分 理解这一点就知道为什么nil != nil了 type 包括 static(静态)type和concrete(具体)type. 简单来说 stati...原创 2020-06-07 21:44:51 · 417 阅读 · 0 评论 -
Go web基本应用
1、net.http第一个版本package mainimport ( "io" "log" "net/http")func main() { // 设置路由 http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { io.WriteString(wr...原创 2019-12-29 00:33:57 · 286 阅读 · 0 评论 -
(20)Go网络TCP
一、服务器1.创建服务器func Listen(net, laddr string) (Listener, error)func ListenTCP(net string, laddr *TCPAddr) (*TCPListener, error) //TCPfunc ListenUnix(net string, laddr *UnixAddr) (*UnixListener, error) // Unixln, err := net.Listen("tcp", ":808...原创 2020-06-08 20:17:02 · 324 阅读 · 0 评论 -
GO 互斥锁实现原理剖析
1. 前言互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了非常简单易用的Mutex,Mutex为一结构体类型,对外暴露两个方法Lock()和Unlock()分别用于加锁和解锁。Mutex使用起来非常方便,但其内部实现却复杂得多,这包括Mutex的几种状态。另外,我们也想探究一下Mutex重复解锁引起panic的原因。按照惯例,本节内容从源码入手,提取出实现原理,又...转载 2020-04-18 04:40:18 · 389 阅读 · 0 评论 -
Go语言并发机制初探
Go 语言相比Java等一个很大的优势就是可以方便地编写并发程序。Go 语言内置了 goroutine 机制,使用goroutine可以快速地开发并发程序, 更好的利用多核处理器资源。这篇文章学习goroutine 的应用及其调度实现。一、Go语言对并发的支持使用goroutine编程使用 go 关键字用来创建 goroutine 。将go声明放到一个需调用的函数之前,在相同地...转载 2019-11-06 19:01:51 · 309 阅读 · 0 评论