go语言

Go语言学习(一)Go语言变量

旧时模样 提交于 2019-12-13 05:05:35
1.声明一个或多个变量并将其输出 总结:此代码中需要注意的点是 (1)声明变量时要注意中间的空格不能省略 (2)如果代码写的不规范,编译时会自动调整成规范的格式,比如在编译前代码中的1,2之间没有空格,但是在编译后会自动出现 (3)在编写代码时,不用每次都删除hello.exe文件,因为在编译main.go文件时,会自动将其之前的进行覆盖 2.变量声明 第一种,指定变量类型,如果没有初始化,则变量默认为零值。 以下几种类型为 nil: 举一个实例: 总结: 在go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块 第二种,根据值自行判定变量类型。 此处没有定义变量d是什么类型 第三种,省略var 注意:“=”左侧如果没有声明新的变量,就产生编译错误(就是说变量不能声明已经声明了的变量) 3.多变量声明 总结: 此处发现了两个问题 (1)就是也可以不导入“fmt”,依旧可以进行输出,可以使用小写的print、println输出,但是首字母大写的无法使用,printf无法使用 (2)如果在main函数中定义了变量,那么一定要进行输出,否则会报错undefined:g,h 特别重要的注意事项: 如果您不平时不注意这些注意事项,那么你可能会出现许多很莫名其妙的报错,但是你个人会认为你自己是对的

GO语言 方法 接口

蹲街弑〆低调 提交于 2019-12-13 03:20:00
方法 1.什么是方法 方法其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。 func (t Type) methodName(parameter list) { } 2.方法的定义使用 1.方法绑定给结构体 //1.定义结构体 type Person struct { name string age int sex int } //2.给Person结构体加一个打印名字的方法 func (a Person)printName() { fmt.Println(a.name) //接收器直接使用结构体内属性 } //3.main函数中使用 var p *Person=&Person{name:"lqz"} //实例化 p.printName() //调用方法 3.指针接收器和值接收器 1.值接收器和指针接收器的区别在于方法接收器的类型; func (a Person)changeName(name string) //值接收器 unc (a *Person)changeName(name string) //指针接收器2.//func (值)changeName(name string):在内部修改值,不会影响外部的值//func (指针)changeName(name

go的编程哲学和设计理念

假装没事ソ 提交于 2019-12-13 00:56:42
go语言是互联网时代的语言,融合了众多互联网时代程序设计的特征。 并行与分布式支持。多核化和集群化是互联网时代的典型特征。 并发执行的“执行体” 执行体是个抽象的概念,在操作系统层面有多个概念与之对应,如操作系统自己掌管的进程(process)、进程内的线程(thread)以及进程内的协程 (coroutine,也叫轻量级线程)。多数语言在语法层面并不直接支持协程,而通过库的方式支持的协程的功能也并不完整,比如仅仅提供协程的创建、销毁与切换等能力。如果在这样的协程中调用一个同步IO操作,比如网络通信、本地文件读写,都会阻塞其他的并发执行协程,从而无法真正达到协程本身期望达到的目标。 Go语言在语言级别支持协程,叫goroutine。Go语言标准库提供的所有系统调用(syscall)操作,当然也包括所有同步IO操作,都会出让CPU给其他goroutine,这让事情变得非常简单。 go语言异步程序示例: func run(arg string) { // ... } func main() { go run("test") ... } 关于进程、线程、协程的区别可以参考如下几篇文章: 谈谈并发编程中的协程 一个“蝇量级” C 语言协程库 编程中的进程、线程、协程、同步、异步、回调 执行体间的通信 执行体间通信的方式: 执行体之间的互斥与同步 执行体之间的消息传递 执行体之间的互斥与同步

go语言基础异常处理

醉酒当歌 提交于 2019-12-13 00:13:01
异常处理模板 package main import "fmt" //异常处理 //defer panic recover //defer 表示延迟调用,即便程序出现严重错误,也会执行 //panic 就是python中的raise(主动抛出异常) //recover 恢复程序,继续执行 func main() { //先注册,后调用 //defer fmt.Println("xxxx") //defer fmt.Println("yyy") f1() f2() f3() } func f1() { fmt.Println("f1...") } func f2() { defer func() { if a:=recover();a!=nil{ //a 如果不等于nil,表示程序出了异常,a 就是异常信息 //a 等于nil,表示没有异常 //fmt.Println("出错了") fmt.Println(a) } //用于会被执行(相当于finally) }() fmt.Println("f2...") //var a =make([]int,3,3) //fmt.Println(a[4]) panic("你给我出去") } func f3() { fmt.Println("f3...") } 函数异常: package main import ( "errors" "fmt" )

7.Go语言基础之函数

陌路散爱 提交于 2019-12-12 11:55:07
1.函数 1.1函数定义 Go语言中定义函数使用fun关键字,具体格式为 func 函数名(参数)(返回值){ 函数体 } 其中: 1.函数名:由字母,数字,下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名不能重名。 2.参数:参数由变量名和变量类型组成。 3.返回值:可以只写返回值类型,多个返回值必须用()包裹,并用,分隔。 4.函数体:实现指定功能的代码块。 定义一个求两个数和的函数: func intSum(x int, y int) int { return x + y } 函数的参数和返回值是可选的,我们也可以不传参也没有返回值。 func sayHello() { fmt.Println("Hello vita") } 1.2函数的调用 定义了函数后,可以通过 函数名()的方式调用函数。 调用有返回值的函数时,可以不接收返回值。 package main import "fmt" func sayHello(){ fmt.Println("hello vita") } func main() { sayHello() } 结果: hello vita 1.3参数 1.3.1类型简写 函数的参数中如果相邻变量的类型相同,则可以省略类型。 package main func intSum(x,y int)int{ return x+y } func main

go语言中strings包常用方法

依然范特西╮ 提交于 2019-12-12 00:13:47
strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 strings.HasSuffix(s string, suffix string) bool:判断字符串s是否以suffix结尾。 strings.Index(s string, str string) int:判断str在s中首次出现的位置,如果没有出现,则返回-1 strings.LastIndex(s string, str string) int:判断str在s中最后出现的位置,如果没有出现,则返回-1 strings.Replace(str string, old string, new string, n int):字符串替换 strings.Count(str string, substr string)int:字符串计数 strings.Repeat(str string, count int)string:重复count次str strings.ToLower(str string)string:转为小写 strings.ToUpper(str string)string:转为大写 strings.TrimSpace(str string):去掉字符串首尾空白字符 strings.Trim(str string, cut

go语言切片和数组

☆樱花仙子☆ 提交于 2019-12-11 18:17:09
go语言的切片是动态数组,长度不固定。跟一般的数组不一样。 package main import "fmt" func main() { //Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的 var numbers = make([]int,3,5) //make([]T, length, capacity)创建一个切片,capacity会动态增加。 var iar =[]int{2,3,4,5,6,7,8,9} //这样写是一个数组, var siar []int //这样是定义了一个空切片,默认值是nil printSlice(numbers) printSlice(iar) printSlice(siar) //go语言数组或切片都支持这种[:]截取,类似于python中的切片操作,只是少了第2个:后面的步长。 fmt.Println("iar[:2]=",iar[:2]) fmt.Println("iar[1:6]=",iar[1:6]) siar=iar[1:3] printSlice(siar) fmt.Println("append") //append方法是追加多个元素在末尾,后面可以跟不定数目的元素。 iar=append(iar,1,2,3,4) printSlice(iar) siar=append(siar,9

go语言指针变量做函数参数

删除回忆录丶 提交于 2019-12-11 13:05:57
package main import "fmt" func main() { /* 定义局部变量 */ var a int = 100 var b int= 200 fmt.Printf("交换前 a 的值 : %d\n", a ) fmt.Printf("交换前 b 的值 : %d\n", b ) /* 调用函数用于交换值 * &a 指向 a 变量的地址 * &b 指向 b 变量的地址 */ swap(&a, &b); fmt.Printf("交换后 a 的值 : %d\n", a ) fmt.Printf("交换后 b 的值 : %d\n", b ) } func swap(x *int, y *int) { var temp int temp = *x /* 保存 x 地址的值 */ *x = *y /* 将 y 赋值给 x */ *y = temp /* 将 temp 赋值给 y */ } /* 交换函数这样写更加简洁,也是 go 语言的特性,类似于python,相当于tuple元组赋值。 */ func swap(x *int, y *int){ *x, *y = *y, *x } 还有一种更更简洁的交换,不需要交换函数swap: b:=5 c:=6 b,c=c,b //直接在变量定义里,把两个值调换。 来源: CSDN 作者: talkingmute 链接:

学习GO (一)

梦想与她 提交于 2019-12-11 12:07:52
学习GO 1. 入门 1.1 简介 go语言是由3位谷歌员工设计的。最开始开发go的时候,谷歌的开发需要维护百万行需要更新的代码,将这些代码转化为程序需要花费大量的时间。最烦人的是,每个人都得经受这种痛苦。为了应对这些问题, go语言的设计初衷就是 “eliminate the slowness and clumsiness of software development at Google, and thereby to make the process more productive and scalable” . 换句话说,设计go的目的是为了让开发更加的迅速和容易。它包含高级语言的特性,比如自动垃圾回收,并充分利用了计算机多核的特性,设计之初就是为了并发而生。 Go语言的特性和速度已经吸引了大量不同的程序员,包括应用开发和基础设施团队等。随着go语言的发展,我们将看到go在应用开发,网页开发,命令行开发和其他地方的实现。 在我们开始使用go之前,我们需要先过一下go的基础知识,如何读一个go程序,如何跑一个go程序。 guide for developing Go locally 配置本地环境。 1.2 编译 当我们手写go语言的时候,我们希望代码对于我们自己和别人都可读。 我们能从代码读出代码的逻辑和意图。但是,电脑并不懂我们的go代码,也无法读懂我们表达的意思

GO语言的前世今生(一)

只愿长相守 提交于 2019-12-11 11:18:48
一:Go的前世 Go语言是谷歌2009年发布的第二款开源编程语言,它专门针对多处理器系统应用程序的编程进行了优化,它是一种系统语言其非常有用和强大,其程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Go支持面向对象 ,而且具有真正的**闭包(closures)和反射 (reflection)**等功能。Go可以在不损失应用程序性能的情况下降低代码的复杂性。 二:功能特点 Go语言设计是让软件充分发挥多核心处理器同步多工的优点,它可解决面向对象程序设计面临的麻烦。 Go的速度也非常快,几乎和C或C++程序一样快,且能够快速制作程序。 Go支持面向对象,而且具有真正的闭包(closures)和反射 (reflection)等功能。 Go语言可以在不损失应用程序性能的情况下降低代码的复杂性。 Go语言的另一项与网络相关的特色,是服务器和用户端设备,如PC或手机,可以分担工作。因此,使用Go的服务便可轻松适应不同的用户端处理性能。 Go可以和NativeClient配合使用,Go可以让应用完美的运行在浏览器内。例如,使用Go可以更高效的实现Wave,无论是在前端还是后台。 Go同时具有两种编译器,一种是建立在GCC基础上的Gccgo,另外一种是分别针对64位x64和32位x86计算机的一套编译器(6g和8g)。 三:Go的优势 List item可直接编译成机器码