![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang学习
99号
一二年好运!!!
展开
-
Go 语言 fmt.Scan,Fscan,Sscan相关用法
Go 语言 fmt.Scan 相关用法1.Scanfmt.Scanfunc Scan(a ...interface{}) (n int, err error)Scan从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。func main() { var name string var age int fmt.Scan(&name原创 2020-12-18 11:31:25 · 2399 阅读 · 0 评论 -
golang 学习(三十二)注意:捕获迭代变量
警告:捕获迭代变量错误代码:1.for rangevar rmdirs []func()for _, dir := range tempDirs() { os.MkdirAll(dir, 0755) rmdirs = append(rmdirs, func() { os.RemoveAll(dir) // NOTE: incorrect! })}2.for ivar rmdirs []func()dirs := tempDirs()for i :=原创 2020-11-24 15:02:57 · 453 阅读 · 0 评论 -
golang 学习(一)main()方法的应用以及编写测试程序
main()方法的应用获取命令行参数 os.Argsmain() 方法退出执行 os.Exitimport ( "fmt" "os")func main() { //获取命令行参数 var arg = os.Args fmt.Println(arg) //[C:\Users\mm\AppData\Local\Temp\go-build001296202\b001\exe\main.exe chao] fmt.Println(arg[1])//chao fmt.Println("原创 2020-07-27 17:26:07 · 713 阅读 · 0 评论 -
golang 学习(三十一)文件的读取和写入
文件的读取和写入文件的读取操作打开和关闭文件os.Open() 函数能够打开一个文件,返回一个*File 和一个 err。操作完成文件对象以后一定要记得关闭文件import ("fmt""os")func TestOpenFile(t *testing.T) { //以只读方式打开文件 fp, err := os.Open("F:/test.txt") if err!=nil{ fmt.Println("打开文件失败") } fmt.Println(fp)//&{0xc原创 2020-07-20 22:08:32 · 422 阅读 · 0 评论 -
golang 学习(三十一)反射(Reflect)的介绍以及用法
反射(Reflect)的介绍以及用法反射的前言有时我们需要写一个函数,这个函数有能力统一处理各种值类型,而这些类型可能无法共享 同一个接口,也可能布局未知,也有可能这个类型在我们设计函数时还不存在,这个时候我 们就可以用到反射。空接口可以存储任意类型的变量,那我们如何知道这个空接口保存数据的类型是什么? 值是什么呢?可以使用类型断言可以使用反射实现,也就是在程序运行时动态的获取一个变量的类型信息和值信息。把结构体序列化成 json 字符串,自定义结构体 Tag 标签的时候就用到了反射原创 2020-07-18 21:14:19 · 1221 阅读 · 0 评论 -
golang 学习(三十)gorouting的互斥锁和读写锁
gorouting的互斥锁和读写锁互斥锁互斥锁是一种常用的控制共享资源访问的方法,它能够保证同时只有一个 goroutine 可以访问共享资源。Go 语言中使用 sync 包的 Mutex 类型来实现互斥锁.使用互斥锁能够保证同一时间有且只有一个 goroutine 进入临界区,其他的 goroutine 则在等待锁;当互斥锁释放后,等待的goroutine 才可以获取锁进入临界区,多个 goroutine 同时等待一个锁时,唤醒的策略是随机的.虽然使用互斥锁能解决资源争夺问题,但是并不完美,通过原创 2020-07-17 09:59:47 · 315 阅读 · 0 评论 -
golang 学习(三十)管道(channel)介绍以及应用
管道(channel)介绍以及应用管道是 Golang 在语言级别上提供的 goroutine 间的通讯方式,我们可以使用 channel 在 多个 goroutine之间传递消息。如果说 goroutine 是 Go 程序并发的执行体,channel 就是它们 之间的连接。channel 是可以让一个goroutine 发送特定值到另一个 gorutine 的通信机制Golang 的并发模型是 CSP(Comunicating Sequential Processes),提倡通过通信共享内 存而不是原创 2020-07-15 07:17:40 · 1433 阅读 · 0 评论 -
golang 学习(二十九)协程(gorouting)介绍以及sync.WaitGroup,素数
协程(gorouting)介绍以及sync.WaitGroup进程、线程进程(Proces)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进 程都有一个自己的地址空间。一个进程至少有 5种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。通俗的讲进程就是一个正在执行的程序。线程 是进程的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基 本单位一个进程可以创建多个线程,同原创 2020-07-12 22:32:46 · 435 阅读 · 0 评论 -
golang 学习(二十八)空接口(interface)的用法和类型断言
空接口(interface)的用法和类型断言golang 中的接口可以不定义任何方法,没有定义任何方法的接口就是空接口。空接口表示 没有任何约束,因此任何类型变量都可以实现空接口空接口在实际项目中用的是非常多的,用空接口可以表示任意数据类型import ( "fmt" "testing")//空接口 表示没有任何约束 任意的类型都可以实现 空接口也可以直接当做类型来使用,可以表示任意类型type A interface { }func TestInterfaceType(t *t原创 2020-07-09 23:56:22 · 3110 阅读 · 3 评论 -
golang 学习(二十七)接口(interface)的用法和介绍
接口(interface)的用法和介绍Golang 中的接口(interface)Golang 中的接口是一种抽象数据类型,Golang 中接口定义了对象的行为规范,只定义规范不实现。接口中定义的规范由具体的对象来实现通俗的讲接口就一个标准,它是对一个对象的行为和规范进行约定,约定实现接口的对象必须得按照接口的规范Golang 中的接口(interface)的定义在 Golang 中接口(interface)是一种类型,一种抽象的类型。接口(interface)是一组 函数 method的集原创 2020-07-08 22:34:01 · 869 阅读 · 0 评论 -
golang 学习(二十六)第三方包的下载和安装
第三方包的下载和安装go 第三方包下载网址https://pkg.go.dev/1.go mod int 初始化项目,生成go.mod文件2.项目中添加需要引入的包import ( "fmt" "github.com/shopspring/decimal" //处理float运算精度不准确的问题 "github.com/tidwall/gjson" //处理json数据)func TestPackage(t *testing.T) { //加入方法 fl1 := 5.323 f原创 2020-07-07 22:15:27 · 1083 阅读 · 0 评论 -
golang 学习(二十五)go mod以及自定义包package的用法和init()方法
go mod以及自定义包package的用法和init()方法包的介绍和定义包(packge)是多个 Go 源码的集合,是一种高级的代码复用方案,Go 语言为我们提供了 很多内置包,如:fmt、strconv、strings、sort、eros、time、encoding/json、os、io 等。Golang 中的包可以分为三种:1、系统内置包 2、自定义包 3、第三方包 系统内置包: Golang语言给我们提供的内置包,引入后可以直接使用,如 fmt、srconv、strings、sort、e原创 2020-07-07 00:10:17 · 18728 阅读 · 4 评论 -
golang 学习(二十四)结构体struct 和 json之间的转换
结构体struct 和 json之间的转换import ( "encoding/json" "fmt" "math/rand")struct转json字符串 json.Marshal()type Student struct { Id int Name string Age int //如果定义为age 私有属性不能被json包访问 Sno string}type Teacher struct { Id int Name string Age int Tno原创 2020-07-05 15:21:29 · 848 阅读 · 0 评论 -
golang 学习(二十三)结构体struct的用法
结构体struct的用法import ( "fmt")定义结构体 首字母 大写是公有(public) 小写就是私有(private)属性 首字母 大写是公有(public) 小写就是私有(private)type person struct { name string sex string age int}实例化结构体 //1. var p person //实例化结构体 p.name = "王二" p.age = 20 p.sex = "男" fmt.Printf(原创 2020-07-04 21:33:48 · 589 阅读 · 0 评论 -
golang 学习(二十二)指针的用法
指针的用法指针也是一个变量,但它是一种特殊的变量,它存储的数据不是一个普通的值,而是另一个变量的内存地址 var a = 10 fmt.Printf("a值%v--a的类型%T--a的内存地址%p\n",a,a,&a)//a值1--a的类型int--a的内存地址0xc000094158 var p = &a //p指针变量 p的类型 *int fmt.Printf("%v--%p",p,&p)//0xc00000a1c0--0xc0000060381 //*p 取出p对原创 2020-07-03 23:35:49 · 115 阅读 · 0 评论 -
golang 学习(二十一)time 时间,时间戳的用法以及定时器
time 时间的用法import ( "fmt" "testing" "time")时间的创建 和 获取var timeObj = time.Now()fmt.Println(timeObj) //2020-07-02 21:53:54.2141593 +0800 CST m=+0.006999401year := timeObj.Year()month := timeObj.Month()day := timeObj.Day()hour := timeObj.Hour()min原创 2020-07-02 23:05:08 · 777 阅读 · 0 评论 -
golang 学习(二十)defer 、panic、recover 用法,以及异常处理
defer 、panic、recover 用法,以及异常处理defer 延迟执行语句import ( "errors" "fmt" "testing"func TestDefer(t *testing.T) { //defer 延迟执行语句 fmt.Println("start") defer fmt.Println("go") defer fmt.Println("go") defer fmt.Println("Let's") defer fmt.Println("end"原创 2020-07-01 23:21:37 · 252 阅读 · 0 评论 -
golang 学习(十九)递归方法和闭包
递归方法和闭包递归方法计算1~100的和func fn2(n int) int { if n > 1 { return n + fn2(n-1) } else { return 1 }}sum := fn2(100)fmt.Println(sum)计算5的阶乘func fn3(n int) int { if n > 1 { return n * fn2(n-1) } else { return 1 }}factorial := fn2(5)fm原创 2020-06-30 22:35:28 · 194 阅读 · 0 评论 -
golang 学习(十八)自定义切片排序方法 和 type 用法、匿名方法
自己定义切片排序方法 和 type 用法、匿名方法package demoimport ( "fmt" "testing")func TestFunMap(t *testing.T) { var slice = []int{1, 23, 9, 6, 8, 453, 34} newSlice := sortArrAsc(slice) fmt.Println(newSlice) //[1 6 8 9 23 34 453] fmt.Println(slice) //[1 6 8 9 23原创 2020-06-29 22:30:40 · 426 阅读 · 0 评论 -
golang 学习(十七)方法的定义和基本使用
方法的定义测试文件名的定义 func_test.go执行命令 go test -v func_test.goimport ( "fmt" "testing")func TestFun(t *testing.T) { m, n := 1, 10 var val = sumFn(m, n) fmt.Println(val) //11 val = subFn(n, m) fmt.Println(val) //9 val = sumFn1(213, 434, 5, 12, 143, 3原创 2020-06-28 23:51:48 · 161 阅读 · 0 评论 -
golang 学习(十六)map和切片的组合定义
map和切片的组合定义import ( "fmt" "strings")元素为map的切片 var userInfo = make([]map[string]string, 2, 2) if userInfo[0] == nil { //map 的默认值是nil userInfo[0] = make(map[string]string) userInfo[0]["name"] = "lili" userInfo[0]["age"] = "20" userInfo[0]["se原创 2020-06-28 23:13:37 · 509 阅读 · 0 评论 -
golang 学习(十五)map的定义和基本用法
map的定义和基本用法声明 //1.make 定义 var userData = make(map[string]string) userData["name"] = "wang" fmt.Println(userData["name"]) fmt.Println(userData) //2. var userData = map[string]string{"name": "li", "age": "20"} fmt.Println(userData["age"]) //20原创 2020-06-27 16:34:12 · 1049 阅读 · 0 评论 -
golang 学习(十四)选择排序和 冒泡排序以及sort的用法
选择排序和 冒泡排序以及sort的用法选择排序 var sliceNum = []int{1, 34, 7, 234, 9, 90} for i := 0; i < len(sliceNum); i++ { for j := i + 1; j < len(sliceNum); j++ { if sliceNum[i] > sliceNum[j] { temp := sliceNum[i] sliceNum[i] = sliceNum[j] slice原创 2020-06-27 15:17:40 · 115 阅读 · 0 评论 -
golang 学习(十三)切片的用法
切片的用法定义切片 var arr1 []int //golang中切片的默认值就是nil var arr2 = []int{1,2,3,656,788} var arr3 = []int{1:1,2:2,3:3,4:656,6:788} fmt.Println(arr1,arr2,arr3) //[] [1 2 3 656 788] [0 1 2 3 656 0 788] fmt.Println(arr1 == nil)//true基于数组定义 切片 a := [5]int{1,2,35原创 2020-06-26 22:35:50 · 309 阅读 · 0 评论 -
golang 学习(十二)数组的用法
数组的用法数组的定义 长度定义好 不能动态改变第1种 var s [3]int //长度定义好 不能动态改变 var str [3]string s[0] = 1 s[1] = 2 s[2] = 3 fmt.Println(s) //[1 2 3] fmt.Println(str) //[ ]第2种 var arr1 = [3]string{"php", "java", "golang"} arr2 := [3]string{"php", "java", "golang"}原创 2020-06-25 21:09:10 · 243 阅读 · 0 评论 -
golang 学习(十一)switch的用法
switch的用法和写法1. var n = 8 switch n { case 8: fmt.Println(n++) break case 6: fmt.Println(n--) break }2. switch s := 8; s { case 8: fmt.Println(s++) break case 6: fmt.Println(s--) break }3.一个分支可以多个值,多个case 值中间使用英文逗号分隔 var原创 2020-06-24 21:14:41 · 185 阅读 · 0 评论 -
golang 学习(十)if else 用法 和 for用法 goto用法
if else 用法 和 for用法if else 用法第一种用法 age := 30 //全局变量 if age > 20 { fmt.Println("hello") } fmt.Println("hello")第二种用法if age = 45; age > 30 { //局部变量 fmt.Println("你好") }原创 2020-06-23 21:39:43 · 521 阅读 · 0 评论 -
golang 学习(九)算术运算符注意事项,位运算符
算术运算符注意事项除法 var a = 10 var b = 3 fmt.Println(a / b) //3 都是int 返回int var c = 10.0 fmt.Println(c / float64(b)) //3.3333333333333335 //都是float 返回float取余 余数 = 被除数 - (被除数/除数)*除数 fmt.Println(10%3)//1 fmt.Println(-10%3)//-1 -10 - (-10/3)*3 = -1 fmt原创 2020-06-22 21:21:37 · 634 阅读 · 0 评论 -
golang 学习(八)string 类型和整型 浮点型 布尔值型 byte型的转换
string 类型和整型 浮点型 布尔值型 byte型的转换1 .使用fmt.Sprintf 其它类型 转 string 类型说明 %v 代表值 %T 代表数据类型 import ( "fmt" "strconv" ) var n int = 30 var m float64 = 12.34 var b bool = true var c byte = 'a' str1 := fmt.Sprintf("%d", n) fmt.Printf("%v--%T\n",原创 2020-06-21 19:57:52 · 242 阅读 · 0 评论 -
golang 学习(七)字符 byte 和 rune类型介绍
字符 byte 和 rune类型介绍golang中用单引号 ’ 定义字符 类型属于 int var a = 'a' fmt.Printf("%v %T",a,a) //值是97 代表ASCII码 类型int32 fmt.Printf("%c %T",a,a) //值是a 代表 原样 类型int32定义一个字符串输出里面的字符 var b = "this" fmt.Printf("%v %c %T",b[2],b[2],b[2]) // 105 i uint8一个汉字占 3 个字节原创 2020-06-21 18:49:04 · 355 阅读 · 0 评论 -
golang 学习(六)字符串(string)类型和常用方法
字符串型和常用方法声明字符串的声明 用"" var str1 string = "hello world " var str2 = "你好" str3 := "你好"多行字符串 反引号 `var str = `str dtr str`字符串常用的方法len len(str)字符串连接 + 或 fmt.Sprintf str = "hello" str1 = "world" str2 = str + str1 str2原创 2020-06-20 21:44:57 · 311 阅读 · 0 评论 -
golang 学习(五)浮点数型和布尔值型
浮点数型和布尔值型golang 浮点数为 float32 float64 var a float32 = 3.12 fmt.Printf("%v----%f,类型%v\n",a,a,a) fmt.Println(unsafe.Sizeof(a)) //占用4个字节 var b float64 = 5.1243434 fmt.Printf("%v----%.2f,类型%v\n",b,b,b) fmt.Println(unsafe.Sizeof(a)) //占用8个字节golang 64原创 2020-06-20 18:43:48 · 412 阅读 · 0 评论 -
golang 学习(四)整型变量
整型变量有符号整型int8 int16 int32 int64无符号整型uint8 uint16 uint32 uint64区别特殊 整型 int uint系统是32位 就是 int32 uint32 系统是64位 就是 int64 uint64unsafe.Sizeof() 可以查看不同长度的整型 在内存里面占的空间注意 高位整型 转 低位整型 溢出 var a1 int32 = 10 var a2 int64 = 20 fmt.Println(int64原创 2020-06-19 22:44:27 · 418 阅读 · 0 评论 -
golang 学习(三)常量的声明 和iota用法
常量的声明 和iota 用法常量的声明 const单个常量const pi = 3.14159多个常量const (A = “a”B = “b”)多个常量 相同值const (n1 = 100n2n3)fmt.Println(n1, n2, n3) //100 100 100iota用法 golang 计数器 与const 一起用单个const m = iota // 0多个const (m1 = iotam2m3)fmt.Println(m1,原创 2020-06-19 21:48:58 · 218 阅读 · 0 评论 -
golang 学习(二)声明变量的方法
#golang 语言声明变量的几种方法##1.单个就能量的声明###第一种var username string = “wang”var age int = 20也可以是下面var username = “wang”var age = 20var username string = “wang”var age int = 20###第二种username := “wang”age := 20##2.多变量的声明###第一种var username,nickname st原创 2020-06-18 22:29:56 · 256 阅读 · 0 评论