GoLang
文章平均质量分 77
Crownt
bug
展开
-
golang HTTP Response Body需注意的问题
https://blog.csdn.net/hello_ufo/article/details/92994573欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的...转载 2019-11-29 00:37:20 · 4334 阅读 · 0 评论 -
Go基础之面向对象(封装篇)
一.封装: go中一般使用CamelCase 首字母大写:public 首字母小写:private public与private针对的是包 二.包每个目录下一个包,与其他语言不同的是,目录名和包名可以不同 main包包含可执行入口main()函数 为结构定义的方法必须在同一个包内,但可以是不同的文件...原创 2018-08-29 22:41:31 · 641 阅读 · 0 评论 -
Go基础之面向对象(结构体与方法篇)
go语言的面向对象相对简单,只支持封装,不支持继承和多态,go中用面向接口来做继承和多态的任务 go中没有class ,只有struct struct的创建type treeNode struct { value int left, right *treeNode}struct的声明和初始化//声明一个结构体类型 var root treeNode ...原创 2018-08-29 23:16:30 · 1488 阅读 · 0 评论 -
Go基础之变量
变量声明:go中没有全局变量的概念,再函数外定义的变量的作用域是函数所属的package,且必须用关键字"var"进行定义,不可用":= "方式,而函数内可以用":="方式进行变量定义 go中的变量在声明后会被默认赋上确定的初值 go中声明的变量一定要使用,不然编译会报错 在函数中,首次声明变量并赋值可以用":=",之后再赋值时只能用"=",否则就是重复定义变量var a,b in...原创 2018-08-26 00:24:17 · 197 阅读 · 0 评论 -
Go基础之面向对象(扩展已有类型篇)
如何扩充系统类型或别人的类型 在Java中是通过继承来实现的,在go中没有继承的概念 go中实现扩展有两种方法: 1.定义别名 2.使用组合 方法一 定义别名//使用别名对已有类型进行扩展 用别名"queue"扩展原类型[]int,为其增加push(), pop(), isEmpty() 方法type Queue []intfunc (q *Queue) Push(v int){...原创 2018-08-30 11:18:49 · 2046 阅读 · 0 评论 -
Go基础之资源管理与出错处理
程序中的资源管理通常是指一些成对出现的操作,如文件的打开和关闭,数据库的连接和释放.这通常不是一件复杂的事,但是,在资源管理中间程序可能会出错导致程序退出,这时就需要一些相应的措施了.一.defer调用defer后的语句是在函数结束时才调用的 参数在defer语句中是进行计算的,只是没有马上调用 defer内部相当于一个栈,defer列表为先进后出 使用defer调用的场景:O...原创 2018-09-02 15:12:12 · 309 阅读 · 0 评论 -
Go基础之测试与性能调优
一.测试 1.传统测试 VS 表格驱动测试传统测试 表格驱动测试 1.测试数据与测试逻辑混在一起 1.分离的测试数据和测试逻辑 2.出错信息不明确 2.明确的出错信息 3.一旦一个数据出错测试全部结束 3.可以部分失败 go语言的语法使得我们更容易实践表格驱动测试传统...原创 2018-09-03 14:47:07 · 370 阅读 · 0 评论 -
Go基础之并发编程
一.并发性1.并发产生的原因 在直观效果上,处理器是并行处理多项任务,因为我们可以在计算机上同时运行多个程序.但本质上一个处理器在某个时间点只能处理一个任务,属于串行执行。 在单处理器的情况下,并发问题源于多道程序设计系统的一个基本特性:进程的相对执行速度不可预测,它取决于其他进程的活动、操作系统处理中断的方式以及操作系统的调度策略。 在分布式环境下,并发产生的可能性就更大了...原创 2018-09-07 11:08:59 · 314 阅读 · 0 评论 -
Go基础之标准库
一.http库 go作为一门面向服务,面向并发的语言,其http库是一个很重要的库.使用http客户端发送请求 使用http.Client控制请求头部等 使用httputil简化工作import "net/http" http包提供了HTTP客户端和服务端的实现。客户端:Get、Head、Post和PostForm函数发出HTTP/ HTTPS请求。 r...原创 2018-09-07 13:18:56 · 1167 阅读 · 0 评论 -
Go基础之go开发工具链
最常用的go command之一,用于编译go文件 go build compile packages and dependencies在跨平台编译时,可以使用env GOOS=linux GOARCH=amd64 go build常用的本地打包编译命令,与build最大的区别是编译后会将输出文件打包成库放在pkg目录下go install comp...原创 2019-01-12 19:01:40 · 602 阅读 · 0 评论 -
Go与Java中package的理解与区别
一.GO中package的使用 package是go程序中最基本的分发单位和工程管理中依赖关系的体现,一个"xx.go"源文件必须属于某个package,一个package可以拆成多个".go"源文件; 每个".go"源代码文件开头都拥有一个package声明,表示该源代码所属的package; 要生成golang可执行程序(bin目录下),必须建立一个名为main的package,并且在...原创 2018-08-25 20:53:00 · 2451 阅读 · 1 评论 -
Go基础之函数式编程
一.函数式编程 VS 函数指针函数是go语言中的一等公民,参数 变量 返回值都可以是函数 go语言并不是正统的函数式编程,go语言的函数式编程主要体现在 "闭包" 上 高阶函数 关于"闭包"的理解:阮一峰_学习Javascript闭包(Closure) 廖雪峰_javascript闭包 Golang-函数式编程(闭包)注:正统的函数式编程:不可变性:不能有状态,只有常量和函数...原创 2018-09-01 11:51:15 · 1483 阅读 · 0 评论 -
Go基础之国际化字符"rune"
基本的概念,什么是Unicode,什么是UTF-8,什么是UTF-16。Unicode,UTF-8,UTF-16完整的说明请参考Wiki(Unicode,UTF-8,UTF-16)。用比较简单的话来说就是,Unicode定义了所有可以用来表示字符的数值集合(称之为Code Point)。UTF-8和UTF-16等UTF标准定义了这些数值和字符的映射关系。在UTF8编码中,英文字符占用一个字节...原创 2018-08-29 17:18:31 · 1702 阅读 · 0 评论 -
Go基础之条件语句和循环语句
一.条件语句 if 语句 if的条件里是不需要括号的package mainimport ( "fmt" "io/ioutil")func main() { const filename = "abc.txt" //文件"abc.txt"要放在工程的根目录下 contents, err := ioutil.ReadFile(file...原创 2018-08-26 23:12:13 · 418 阅读 · 0 评论 -
GoLong判断文件是否存在及文件内容的读取
一.判断文件是否存在,需要用到"os"包中的两个函数: os.Stat()和os.IsNotExit()func (f *File) Stat() (fi FileInfo, err error)Stat返回描述文件f的FileInfo类型值。如果出错,错误底层类型是*PathError。func IsNotExist(err error) bool返回一个布尔值说明该错...转载 2018-08-17 10:49:06 · 2304 阅读 · 0 评论 -
Go基础之面向对象(GOPATH篇)
GOPATH是一个环境变量,它可以指向多个不同的路径,多个路径之间用":"分割 在终端中查看变量:echo $GOPATH GOPATH默认指向:"~/go"(unix, linux), "%USERPROFILE%\GO"(windows) 官方推荐:所有项目和第三放库都放在同一个GOPATH下,但也可以将每个项目放在不同的GOPATH go程序在编译时会到各个不同的GOPAT...原创 2018-08-30 16:33:07 · 614 阅读 · 0 评论 -
Go基础之函数
go语言中的函数可以有多个返回值//带余除法func div(a, b int) (int, int) { return a/b, a%b}可以给函数的返回值取名字 ,取名后可以直接在函数中当做变量来进行赋值func div(a, b int) (q, r int) { q = a/b r = a%b return q,r //或直接 retur...原创 2018-08-27 23:12:41 · 556 阅读 · 0 评论 -
Go基础之指针
go语言中的指针比起C++来说简单了很多,go中的指针不能做运算var a int = 2var pa *int = &a*pa = 3fmt.Println(a)参数传递:1.值传递;2.引用传递 Java中除了一些系统自建类型外,一般都是引用传递,而go语言只有值传递一种方式 值传递每次传参都要拷贝一份数据会降低程序效率,对此,go语言的解决方案是与指针进行...原创 2018-08-28 10:57:52 · 148 阅读 · 0 评论 -
Go基础之数组与切片
一.数组数组的声明方式一 var 声明var arr1 [5]int //规定大小,不需赋初值 方式二 := 声明 需要赋初值arr2 := [3]int {0,0,0} //采用快速赋值符时,规定数组大小,且需要给数组赋初值arr3 := [...]int{1,2,3,4,5,6} //通过三个点,让编译器自动计算数组的大小数组的遍历...原创 2018-08-28 23:26:55 · 302 阅读 · 0 评论 -
Go基础之面向接口
一.duck typing 的概念像鸭子走路,像鸭子叫,长得像鸭子,就是鸭子 描述事物的外部行为而非内部结构 严格说go属于结构化类型系统,类似duck typing ,但不是正真完全意义的duck typing, 因为go是编译绑定,而duck typing 要求动态绑定 比较灵活,不管"retriever"是什么,只要满足"download"注释的要求,实现了get()方...原创 2018-08-31 19:46:13 · 556 阅读 · 0 评论 -
Go基础之Map
初识Mapm := map[string]string{ "name": "xiaoming", "course": "golang",}Map的结构: 1> map[K的类型]V的类型 2> 复合Map map[K1]map[K2]V Map的创建: 方式一m := map[string]string{ "n...原创 2018-08-29 11:28:53 · 180 阅读 · 0 评论 -
Go基础之"寻找最长不含重复字母的字符串"(Map篇番外)
解题思路: 对于每个字母"x": lastOccurred[x]不存在或者<start => 无需操作 lastOccurred[x]>=start => 更新start 更新lastOccurred[x],maxLength程序实现 package mainimport ( ...原创 2018-08-29 14:58:39 · 290 阅读 · 0 评论 -
Go基础之常量
常量的声明及使用:声明一个常量一定要给它赋值 const fliename = "abg.txt" const s string = "hello" const( a = 3 b = bool )const 数值在声明时不做类型确定时,可作为各种数值使用,相当于在编译是直接把数值换过去const a, b = 3, 4...原创 2018-08-26 21:50:06 · 143 阅读 · 0 评论