golang-笔记2】的更多相关文章

golang笔记1 go代码是用包来组织的,每个包有一个或多个go文件组成,这些go文件文件放在一个文件夹中 每个源文件开始都用一个package声明,指明本源文件属于哪个包 pakage声明后紧跟这导入其他包 导入包之后,是构成源文件的变量.函数.类型生命等 go语言不需要在语句后家分号 import时,左括号'('要跟import在一行 函数的的左花括号'{' 必须跟func关键词在一行 下面这段代码是一个完整的GO程序 package main import( "fmt" ) f…
Golang笔记(二)面向对象的设计 Golang本质还是面向过程的语言,但它实现了一些OOP的特性,包括抽象.封装.继承和多态. 抽象和封装 Golang和C语言一样以struct为数据结构核心,不同的是Golang的struct可以定义自己的函数,这使得struct有了一些class的特点,所以Golang具有OOP里抽象和封装的概念.举个栗子来说,f是os.OpenFile()函数返回的File类型指针,File结构体实现了Close()函数,通过f.Close()调用File结构体里的C…
Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是简洁(语言细节少).高效(开发迅速)和高性能(忽略GC时,类比C++的性能). package package是golang最基本的分发单位.每个golang源代码文件开头都要申明其属于哪个package.如果输出的是可执行文件,则必须定义一个'main' package和属于它的一个main()函…
学习Golang了, 下面分享我的, 还有我收集的Golang的学习资料 我的基础笔记地址: https://github.com/zhuchangwu/go-study-notes 其他参考: Go的学习之路 https://github.com/talk-go/read 知识图谱: https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0#map Golang中文网: https://studygolang.com/pkgdoc…
题外话: 很早就有整理学习笔记的想法,今天将想法付诸于行动,将Golang相关知识系统整理一遍,此分类为Golang学习笔记,最近开始学习这门语言的同学可以参考. 一 第一个Go程序: hello.go package main import "fmt" func main() { fmt.Print("hello word! \n") } 逐行解读 1. package main :定义一个包,包名为main,main是可执行的程序的包名,所有的源文件头部必须有一…
如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly language 如果为函数的每一个返回值都设置变量名,则会以相应的零值初始化,且在该函数的return语句中省略操作数,这种用法称之为 bare return. go中的错误处理,习惯上是先进行一系列的初始化检查,将处理失败逻辑的代码先行处理,然后才是函数的实际逻辑,这样使得代码更简洁,避免过多的层级结构…
可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1.Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目前 golang 唯一的IDE了吧,是使用 qt 开发的,界面比较简陋. 下载地址:https://sourceforge.net/projects/liteide/ 功能上还算是比较完善,自动格式化代码.编译.调试都不错. 可以通过 go_code 为 LiteIDE 增加智能提示.先下载 go_…
1.包简述 GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包.比如 import "logging" 则会在所有设置的 $GOPATH/src 下去寻找相应包,而不仅仅是当前项目中. 2.包声明 在每一个代码文件中,都需要使用 package 命令来声明包名,所以在GO语言中,代码文件属于哪个包与文件目录结构没有必然联系,但习惯上我们会设置成跟目录结构相…
1.下载安装 从 https://golang.org/dl/ 这里下载最新版本的 golang 安装包,分别有 Windows\Linux\Apple OSX\源码包. golang的官方网站是 https://golang.org/ ,对应的中文版网站是 https://go-zh.org/ ,对中国开发者还是很友好啊. go语言圣经: https://docs.ruanjiadeng.com/gopl-zh/ 2.环境配置  go 语言相比其它语言,初次安装配置要麻烦一点,需要手动配置环境…
0.环境信息 系统:Win10_x64 Go版本:go version go1.8.1 windows/amd64 Git版本:git version 2.17.0.windows.1 1.安装Go运行环境,并设置GOROOT和GOPATH环境变量 安装Go环境教程此处不再介绍,网络搜索即可. GOROOT为Go环境所安装的路径 GOPATH为创建的Go项目默认存放的位置 我的电脑安装信息: 2.安装Git 因为后续下载cobra库时需要用到git命令,所以此处需要事先安装Git. 下载地址:h…
golang 的坑 package main import ( "fmt" "net/http" "time" ) func Hello(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello!!\n")) time.Sleep(10 * time.Second) } func main() { http.HandleFunc("/hello&q…
一.if语句 Go的流程控制主要包括条件分支.循环和并发.  if语句一般由if关键字.条件表达式和由花括号包裹的代码块组成.在Go中,代码块必须由花括号包裹.这里的条件表达式是结果类型为bool的表达式.例: if number > 10 { number += 3 } else分支: if number > 10 { } else { } if语句还支持串联 if number > 100 { } else if number < 100 { } else { } 上面的num…
一.Go语言基础 1. 基础 Go语言中的标识符必须以字母(Unicode字母,PHP/JS可以用中文作为变量名)下划线开头.大写字母跟小写字母是不同的:Hello和hello是两个不同的名字.  Go中有25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for imp…
1.使用yum安装 yum install go 这个命令可以将go环境安装到linux上. 2.配置gopath 第一步安装成功的go命令会被放入/usr/lib/golang/bin /usr/lib/golang 该目录是yum install go安装的目录,所以go相关的都在这里. 使用命令:vim /etc/profile 打开profile文件 在文件末尾填入如下内容: export GOROOT=/usr/lib/golang export GOBIN=$GOROOT/bin e…
golang程序结构 2.1 命名 Golang中的命名遵循这样一个简单原则,名字的开头必须是字母或者下划线,后面跟字母.数字或者下划线(这里与C语言中是一致的). 在函数内部声明的实体,即局部变量,只在函数内部有效.在函数外定义的变量,在整个包内有效(注意是包,不是文件,多个文件可以属于同一个包). 首字母的大小写决定了是否对其他包可见,首字母小写只对本包内有效,首字母大写对于其他包可见.比如,fmt.Println()函数名字的首字母大写,可以在其他包内引用该函数. 名字中出现多个单词时,习…
----------- golang打包和部署到centos7. 参考:https://blog.csdn.net/qq_33230584/article/details/81536572…
golang里,操作mysql数据库,使用查询语句的时候,一般的写法 rows, err := db.Query("select name from table") if err != nil { return } for rows.Next() { var name string err = rows.Scan(&name) if err != nil { return } } 当查出来的字段有NULL的时候,就会报这样的错误unsupported driver ->…
在同一个问题上栽了两次,以后碰到cookie出问题多半都是因为这个. Request.Cookie(name)取Cookie的时候,返回值只有name和value cookie.go cookies = append(cookies, &Cookie{Name: name, Value: val}) 可以看到只返回了Name和Value两个值,大概是为了所谓性能吧.于是在拦截器里读取当前Cookie并重设时间的时候,Path和时间值都要重设一下.不然原来根目录下的Cookie还在,而新的Cook…
go语言中的main函数也是运行在一个单独的goroutine中的,一般称为 main goroutine,main函数结束时,会打断其它 goroutine 的执行,但是其它 goroutine 不会打断其它的 goroutine 的执行,除非是通过通信让对方自行中止. 先来看一个最简单的并发例子,一个时间服务器:(偏题了,不应该使用这个例子,应该突出重点,这个例子可以放到tcp那节) func main() { listener, err := net.Listen("tcp",…
通过 new 创建的引用类型对象是不完整创建,比如 map,它仅分配了字典类型本身所需的内存(指针包装),而没有分配键值存储内存,也没有初始化散列桶等内部属性,因此无法工作,如下代码就是错误的: p := new(map[string]int) m := *p m[ ages := make(map[string]int) // mapping from strings to ints 我们也可以用map字面值的语法创建map,同时还可以指定一些最初的key/value: ages := map…
任何语言中,字符串操作API都是非常重要的,有些还是熟记比较好,当然如果记不住可以去看源码文件,不得不说GO语言源码看起来非常舒服. 可以使用反引号代替双引号,来表示原生的字符串,即不进行转义,尤其适合用于表示正则表达式.路径字符串.JSON串. 每个Unicode码点都使用同样的大小32bit来表示.这种方式比较简单统一,但是它会浪费很多存储空间,因为大数据计算机可读的文本是ASCII字符,本来每个ASCII字符只需要8bit或1字节就能表示.而且即使是常用的字符也远少于65,536个,也就是…
一.切片的定义 我们可以从数组(go语言中很少直接使用数组)或者切片来初始化一个新的切片,也可以直接通过 make 来初始化一个所有元素为默认零值的切片. //1.通过数组来初始化切片 arr := [...], , , , } slice1 := arr[:] // [1,2,3,4,5] slice2 := arr[:] // [3,4] slice3 := arr[:] // [1,2,3,4] slice4 := arr[:] // [3,4,5] //2.通过切片来初始化切片 slic…
1.定义一个 array 数组长度也是类型的一部分,比如长度为3的int数组与长度为5的int数组,并不是同一类型. package main import ( "strconv" //GO语言中将 int 转化成 string 比较麻烦,通常使用 strconv.Itoa(i) ) //格式化输出一个数组,因为不同长度的数组属于不同类型,这里只能用切片作为参数,调用时将数组转换成切片传入即可 func print_array(arr []int) { var str string s…
1.定义一个结构体 type User struct { userid int username string password string } 2.初始化一个结构体 有两种情况,一是得到结构体的对象,一是得到结构的对象指针,分别有三种方式: //第1种方式,先声明对象,再初始化 var player1 Player player1.userid = player1.username = "lina1" player1.password = " //第2种方式,声明同时初始…
条件语句 if ... else if ... else 语句,如: { fmt.Println(">100") } < num { fmt.Println("<0") } else { fmt.Println("0<<num<<100") } 惯用法:if 语句条件前面可以前置一条初始化语句,而go语言中的函数可以返回多个值,有很多函数第二个返回值是 error 类型,则我们可以通过 if v, err…
25个关键字 程序声明:import, package 程序实体声明和定义:chan, const, func, interface, map, struct, type, var 程序流程控制:go, select, break, case, continue, default, defer, else, fallthrough, for, goto, if, range, return 类型 18个基本类型:bool, string, rune, byte, int, uint, int8,…
1.GO命令一览 GO提供了很多命令,包括打包.格式化代码.文档生成.下载第三方包等等诸多功能,我们可以通过在控制台下执行 go 来查看内置的所有命令 下面来逐个介绍,也可以详细参考 https://github.com/hyper-carrot/go_command_tutorial 2.go build 这个命令可以直接使用,也可以带上代码包或源码文件使用. 如果是直接使用,表示试图编译当前目录所对应的代码包,如果当前目录不是一个有效的代码包(包含在 $GOPATH/src 目录下)则会报错…
 Go语句和通道类型是Go语言的并发编程理念的最终体现.与defer语句相同,go语句也可以携带一个表达式语句.Go语句的执行会很快结束,并不会对当前流程的进行造成阻塞或明显的延迟.一个简单的示例: go fmt.Println("Go") go语句仅由一个go关键字和一条表达式语句组成.同样的,go语句的执行与其携带的表达式语句的执行在时间上没有必然联系.这里能确定的仅仅是后者会在前者完成之后发生.在go语句被执行时,其携带的函数(也称为go函数)以及要传给它的若干参数会被封装成一个…
一.defer语句 defer语句仅能被放置在函数或方法中.它由关键字defer和一个调用表达式组成.这里的表达式所表示的既不能是对Go语言内建函数的调用也不能是对Go语言标准库代码包unsafe中的那些函数的调用.实际上,满足上述条件的表达式被称为表达式语句.例: func readFile(path string) ([]byte, error) { file,err != os.Open(path) if err != nil { return nil,err } defer file.C…
一.函数 Go中函数是一等(first-class)类型.我们可以把函数当作值来传递和使用.Go中的函数可以返回多个结果.  函数类型字面量由关键字func.由圆括号包裹声明列表.空格以及可以由圆括号包裹的结果声明列表组成.其中参数声明列表中的单个参数声明之间是由英文逗号分隔的.每个参数声明由参数名称.空格和参数类型组成.参数声明列表中的参数名称是可以被统一省略的.结果声明列表的编写方式与此相同.结果声明列表中的结果也是可以被省略的,并且在只有一个无名称的结果声明时还可以省略括号.例: func…