Golang学习笔记
什么是包?为什么使用包? 到目前为止我们见到的 Go 程序都只有一个文件,文件中包含了一个main函数和几个其他函数。在实际中这种将所有代码都放在一个文件里的组织方式是不可行的。这样的组织方式使得代码变得无法重用和维护困难。包(package)用于解决这样的问题。 包用于组织Go源代码,以获得更好的重用性和可读性。包提供了代码封装的机制从而使得Go应用程序易于维护。例如,假设我们正在开发一个图像处理应用,它提供了诸如图像裁剪,锐化,模糊和增色等功能。一种组织代码的方式是将所有实现同一功能的代码放在一个独立的包中。例如裁剪功能可以放在一个单独包中,而锐化功能可以放在另一个包中。这种做法的优点是:增色功能可能需要做一些锐化的处理,那么增色代码中可以简单地导入(我们即将讨论导入)锐化包,使用其中提...阅读全文
Golang 入门系列(五)GO语言中的面向对象
前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友可以先看看之前的文章。https://www.cnblogs.com/zhangweizhong/category/1275863.html。 今天GO语言中的面向对象。 GO语言中的面向对象 其实GO并不是一个纯面向对象编程语言。它没有提供类(class)这个关键字,只提供了结构体(struct)类型。 java或者C# 里面,结构体(struct)是不能有成员函数的。然而,Go语言中的结构体(struct)可以有"成员函数"。方法可以被添加到结构体中,类似于一个类的实现。 我个人觉得Go 语言在的面向对象,其实更简单,也更容易理解。 学过java或C# 的人应该都知道,面向对象的三个基本特征:封装、继承和...阅读全文
Go字符串常用方法
更多方法,请见golang中文https://studygolang.com/pkgdoc // 1. =============统计字符串长度,按字节len(str) // ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。 // UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节 // go中都以utf8进行编码 str1 := "hello world 哈哈" fmt.Println("str len=", len(str1)) // 18 // 2. =============字符串遍历,同时处理有中文的问题 r:=[]rune(str) // 常规遍历时,一个中文占三个字节,直接遍历...阅读全文
请教go routine,为什么总是先打印大写字母
package main import ( "fmt" "runtime" "sync" ) func main() { // Allocate 1 logical processor for the scheduler to use. runtime.GOMAXPROCS(1) // wg is used to wait for the program to finish. // Add a count of two, one for each goroutine. var wg sync.WaitGroup wg.Add(2) fmt.Println("Sta...阅读全文
go语言工厂模式
作者:HaigLee https://www.jianshu.com/u/67ec21fb270d 本文由 HaigLee 发布。未经许可,禁止转载。 1. 说明 Golang 的结构体没有构造函数,通常可以使用工厂模式来解决这个问题。 2. 需求示例 一个结构体的声明: package model type Student struct{ Name string ... } 因为这里的Student 的首字母S是大写的,如果我们想在其它包括创建Student 的实例(比如main包),引入model 包后,就可以直接创建Student 结构体的变量(实例)。但是问题来了,如果首字母是小写的,比如是: type student struct{ ... } 那么直接使用就不行了,这时候该怎么办...阅读全文
Effective Go小记一
英文原文:https://docs.huihoo.com/go/golang.org/doc/effective_go.html 阅读小记: 1、go语言使用gofmt统一编码风格,包括排列和缩进。 2、关于注释,文章建议每个package子句之前都应该有关于包的说明,每个方法之前同样要对该方法进行说明;以方便godoc抽取相关内容并展示。 3、命名在go中非常重要,比如首字母是否大写决定在程序包之外的可见性。文章建议包名字均使用小写,力求简洁,包本身是根据路径选择源路径,若包名冲突,可在程序中将冲突的包重命名。 另外,文件对传统上的getter和setter做了自己的观点,认为getter不需要加Get关键字,当然setter加Set关键字是合理的...阅读全文
关于 goroutine 调度问题
学习 goroutine 的时候看过这个例子,不太明白为什么会这样?请看代码: ``` // This sample program demonstrates how to create goroutines and // how the scheduler behaves. package main import ( "fmt" "runtime" "sync" ) // main is the entry point for all Go programs. func main() { // Allocate 1 logical processor for the scheduler to use. runtime.GOMAXPROCS(1...阅读全文
golang的字符串拼接
常用拼接方法 字符串拼接在日常开发中是很常见的需求,目前有两种普遍做法: 一种是直接用 += 来拼接 s1 := "Hello" s2 := "World" s3 := s1 + s2 // s3 == "HelloWorld" s1 += s2 // s1 == "HelloWorld" 这是最常用也是最简单直观的方法,不过简单是有代价的,golang的字符串是不可变类型,也就是说每一次对字符串的“原地”修改都会重新生成一个string,再把数据复制进去,这样一来将会产生很可观的性能开销,稍后的性能测试中将会看到这一点。 第二种是使用bytes.Buffer // bytes.Buffer的0值可以直接使用 var buff bytes.Buffer // 向buff中写入字符/字符串 b...阅读全文
《Go语言四十二章经》第六章 约定和惯例
《Go语言四十二章经》第六章 约定和惯例 作者:李骁 ## 6.1 可见性规则 包通过下面这个被编译器强制执行的规则来决定是否将自身的代码对象暴露给外部文件: 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )。 (大写字母可以使用任何 Unicode 编码的字符,比如希腊文,不仅仅是 ASCII 码中的大写字母)。 因此,在导入一个外部包后,能够且只能够访问该包中导出的对象。 假设在包 pa...阅读全文
第十二天:golang学习笔记之strings, text, unicode
★strings | strings包实现了用于操作字符的简单函数. ★text | scanner对utf-8文本的token扫描服务,tabwriter缩进修正 ★unicode | unicode 包提供了一些测试Unicode码点属性的数据和函数. 三个都和string有关,放一块康一康: string: strings包实现了用于操作字符的简单函数: 分割,按空格分割 比较(模糊相等、包含、包含任意字符) 计数 索引(首次、末次) 替换,首尾Trim 格式化(全小写,全大写,首字母大写) 字符串连接,构造重复字符串 遍历 定义个一个strings.Read结构体,实现了io.Reader text: text包含三个子包: scanner:scanner包提供了功能强大的scann...阅读全文
Golang基础知识-概念篇
1、go中使用struct模拟类和对象 type Bike struct{ color string //首字母小写表示属性私有 Name string //首字母大些表示属性公有 } //首字母大些表示方法对外公开 func (b *Bike) Move() string{ return b.color } 2.三大基本特性 封装:首字母大小写代表公私有权限 继承:使用内嵌的方式,对结构体struct进行组合 多态:使用interface实现 3、五大基本原则 1、单一功能原则(struct) 2、开闭原则(扩展是开放,修改是关闭的) 3、里氏替换原则(子类可以替换父类,而程序逻辑不变) 4、接口隔离原则 5、依赖反转原则(对接口进行开发...阅读全文
golang标准库之strconv
字符串转整型 package main import ( "fmt" "strconv" ) func main() { //字符串转为整数 s := "128" // func ParseInt(s string, base int, bitSize int) (i int64, err error) // 返回字符串表示的整数值,接受正负号。 // base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制; // bitSize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64; // 返回的err是*NumErr类型的,如果语法有误,err.Erro...阅读全文
encoding/json
在处理网络编程时, json格式的数据方便在网络上传输, 兼具可视化和效率... 虽然效率没有那么高... 但是确实使用的很广泛呀. 这个包用于处理golang的json相关的东西. 这个包在处理json问题时, 会用到反射获取字段的tag. 可以参考反射包... golang的官方文档~ https://blog.golang.org/json-and-go package main import ( "fmt" // "reflect" "encoding/json" ) type User struct{ // Name string `json:"-,"` // 这个导出才是 {"-":"张三","age":20} // Name string `json:"-"` // alway...阅读全文
Go冒泡排序练习
package main //要求:随机生成5个元素的数组,并使用冒泡排序对其排序 从小到大 //思路分析: //随机数用math/rand生成为了更好的保证其不会重复 使用 rand.New(rand.NewSource(time.Now().UnixNano()))并定义一个随机生成函数 //用冒泡排序对其排序 import ( //"math/rand" //"time" "fmt" "math/rand" "time" ) var arrnum [5]int = [5]int{109,137,49,190,87} //定义冒泡函数 //重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z) // 错误就把他们交换过来。走访元素的工作是重复地进...阅读全文
Golang学习笔记之包(package)
包是结构化代码的一种方式:每个程序都由包的概念组成,可以使用自身的包或者从其它包中导入内容。 一、工作空间 编译⼯具对源码目录有严格要求,每个⼯作空间 (workspace) 必须由 bin、 pkg、 src 三个目录组成。 二、包结构 所有代码都必须组织在 package 中。 • 包由同⼀目录下的多个源码⽂件组成。 • 包名类似 namespace,与包所在目录名、编译⽂件名⽆关。 • 目录名最好不⽤ main、 all、 std 这三个保留名称。 • 可执⾏⽂件必须包含 package main,⼊⼝函数 main。 包声明 "package + 包名" ,必须在源文件中非注释的第一行指明这个文件属于哪个包。如:package main。package main表示一个可独立执行的程...阅读全文
2.蛤蟆笔记go语言——包
2.蛤蟆笔记go语言——包 每个 Go 程序都是由包组成的。 程序运行的入口是包 main。 这个程序使用并导入了包 "fmt" 和"math/rand"。 按照惯例,包名与导入路径的最后一个目录一致。例如,"math/rand" 包由 package rand 语句开始 代码 package main import ( "fmt" "math/rand" ) func main() { fmt.Println("Myfavorite number is", rand.Intn(10)) } 执行如下: Myfavorite number is 1 导入 代码用圆括号组合了导入,这是“打包”导入语句。 同样可以编写多个导入语句,例如: import "fmt" import "math" 不...阅读全文
golang基础--method方法
Go没有类似python语言中类class的概念,但依旧有method 类型方法定义格式如下 func (a mytype) method_name(x type)(y type){ return y } 调用方式: instance.method(args) -> (type).func(instance, args) 通过显示的说明Receiver(强制函数传递的第一个参数)来实现与某个类型(struct,int...)的组合 package main import "fmt" type A struct{ Name Sting } func main() { a := A{} //实例化结构体 a.Method_Print() //结构体调用方法 } func (a A) Method...阅读全文
Go 面向对象编程(译)
『就要学习 Go 语言』系列 -- 第 26 篇分享好文 今天接着给大家分享关于 Go 面向对象的好文。原文作者是 William Kennedy,《Go 语言实战》作者,博客 www.ardanlabs.com/blog/ 的维护者。大部分中国的 Gopher 都是通过这个博客认识了这位 Go 大神。 有些与知识点无关的语句,翻译过来有点拗口,大家一眼带过。但与知识点相关的,都会尽量忠于原文。另外,文章做了简单的排版,方便阅读。翻译水平有限,有误的地方,请大家在下方留言指正。 基础 今天有人在论坛上问我一个问题,如何在不通过嵌入的情况下而获得继承的优点。重要的是,每个人都应该考虑 Go 语言,而不是他们留下的语言。我不能告诉你我从早期的 Go 实现中删除了多少代码,因为这是不必要的。语言设...阅读全文
掌握这些Go语言特性,你的水平将提高N个档次(二)
前言: 大家好,我是asong,这是我的第二篇原创文章。上一文介绍了切片、变量声明、defer三个知识点(回顾上文,关注公众号即可进行阅读),这一文将继续介绍其他Go语言特性,废话不多说,直接上干货。 1. 指针和引用 在Go语言中只有一种参数传递的规则,那就是值拷贝,其包含两种含义: 函数参数传递时使用的值拷贝 实例赋值给接口变量,接口对实例的引用是值拷贝 我们在使用过程中会发现有时明明是值拷贝的地方,结果却修改了变量的内容,有以下两种情况: 直接传递的是指针。指针传递同样是值拷贝,但指针和指针副本的值指向的地址是同一个地方,所以能修改实参 参数是复合数据类型,这些符合数据类型内部有指针类型的元素,此时参数的值拷贝并不影响指针的指向。 在Go语言中,复合类型chan、map、slice、i...阅读全文
Golang高性能json包:easyjson
简介easyjson是什么呢? 根据官网介绍,easyjson是提供高效快速且易用的结构体structs<-->json转换包。easyjson并没有使用反射方式实现,所以性能比其他的json包该4-5倍,比golang 自带的json包快2-3倍。 easyjson目标是维持生成去代码简单,以致于它可以轻松地进行优化或固定。安装go get -u github.com/mailru/easyjson/go install github.com/mailru/easyjson/easyjsonorgo build -o easyjson github.com/mailru/easyjson/easyjson验证是否安装成功。$ easyjson Usage of D:\Code\go\bin...阅读全文
Golang备忘 - 02 杂项:面向对象,通道
开发十年,就只剩下这套Java开发体系了 >>> 面向对象 OO语言最重要的三方面分别是:封装、继承和多态,在Go中它们如何体现: 封装:即数据隐藏,与别的OO语言有4个或更多访问层次相比,Go简化为2层: 包范围内的:通过标识符首字母小写,对象只能在它所在的包内可见 可导出的:通过标识符首字母大写,对象对所在包以外也可见 继承:用组合实现,内嵌一个或多个包含想要的行为(字段和方法)的类型; 多重继承可以通过内嵌多个类型实现 多态:用接口实现,某些类型的实例可以赋给它所实现的任意接口类型的变量。 类型和接口是松耦合的,并且多重继承可以通过实现多个接口实现 备注:类型只拥有自己所在包中定义的方法 通道(channel) 把一个进程中的两个goroutine比作汽车工作里的两个生产车间, 每个车...阅读全文
Golang实现统计文件内容的字符,数字,符号数量
废话不多说,直入主题 今天学习了通过Golang语言实现了统计文件内容中的字符,空格,数字,符号的数量, 当然也可以用来统计更多,例如:统计汉字,大写/小写字母等...仅需要更改部分代码即可. 知识点总结 代码实现前的思路分析: 打开一个文件,创建一个reader 每读取一行,就去统计该行有多少个字符,数字,空格等数量 然后将统计的数量储存到一个结构体内 引入的包有:bufio, io,os,fmt 源代码参考 package main import ( "bufio" "fmt" "io" "os" ) /* 代码编写思路: 1- 打开一个文件,创建一个reader 2- 每读取一行,就去统计该行有多少个字符,数字,空格等数量 3 - 然后将结果存到一个结构体内 */ // 定义一个结构体...阅读全文
Go语言之旅:包
每个 Go 程序都是由一些包组成的。 原文地址:https://golang-book.readthedocs.io 欢迎关注我们的公众号:小菜学编程 (coding-fan) 程序从 main 包开始执行。 package main import ( "fmt" "math/rand" ) func main() { fmt.Println("My favorite number is", rand.Intn(10)) } 在这个程序,通过 import 导入两个包, fmt 和 math/rand (包路径)。 按照惯例,包名与包路径最后部分相同。 例如, math/rand 包中的源码文件都以 package rand 语句开头。 import语句 Go 通过 import 语句引入包...阅读全文
golang-练习3
题目:将输入的字母变成其下一个字母,并且元音字母大写 package main import "fmt" func LetterChanges(str string) string { bb := []rune(str) var str1 []rune for i:=0;i
Go语言核心之美 1.1-命名篇
命名篇 1.Go的函数、变量、常量、自定义类型、包(Package)的命名方式遵循以下规则: 1)首字符可以是任意的Unicode字符或者下划线 2)剩余字符可以是Unicode字符、下划线、数字 3)字符长度不限 2.Go只有25个关键字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 3.Go还有37个保留字 Constants:true false iota nil Types: int int8 int16 int32 int6...阅读全文
2.蛤蟆笔记go语言——包
2.蛤蟆笔记go语言——包 每个 Go 程序都是由包组成的。 程序运行的入口是包 main。 这个程序使用并导入了包 "fmt" 和"math/rand"。 按照惯例,包名与导入路径的最后一个目录一致。例如,"math/rand" 包由 package rand 语句开始 代码 package main import ( "fmt" "math/rand" ) func main() { fmt.Println("Myfavorite number is", rand.Intn(10)) } 执行如下: Myfavorite number is 1 导入 代码用圆括号组合了导入,这是“打包”导入语句。 同样可以编写多个导入语句,例如: import "fmt" import "math" 不...阅读全文
【Go语言】【15】GO语言的面向对象
GO是不是面向对象的语言?GO作者如是说:“是,也不是。”正如前面所说:GO是一种面向类型的语言,它有类型和方法,但没有类的概念,程序员可以用一种面向对象的风格(或者说是方式)来编程,下面我们从封装性、继承性和多态性三大面向对象的特性谈谈GO语言1、封装性 面向对象的语言中,“类”是基本单位,它把属性、方法局限在“类”中,并对外提供公共方法让使用者操作对象。当然这一过程离不开修饰符:public、protected、private等。 GO语言如何实现封装性呢?它是通过结构体(struct)和为类型添加方法的方式实现的。 例如,封装一个矩形(Rect)类,试想调用者会对矩形类做什么操作呢?无非就是看看它的面积、周长之类的信息,那么按照面向对象的编程思想来说,只要向使用者暴露getArea()...阅读全文
Go语言入门【三】:通过一段代码学Go语法
写在前面 Golang的语法足够简单,但变化很多,刚接触只需要掌握典型的用法即可,不需要知道所有的语法糖,所以代码中并不会包含所有可能的语法形式。 并发是Golang的一大主题,后续有专门的一节,并不出现在这一节。 还有一些『约定』: 可见性。Java中有private,protect,public。Golang默认采用首字母大小写来判断:首字母大写的变量、方法为public,所有范围内可见;首字母小写的为private,本文件内可见。 简洁性。import引入的包以及定义的变量必须被使用,否则程序编译不通过。因此,代码var p ClassA不是一个声明定义,而是包含了初始化,实际上内存已经被分配了,这一点很容易忽视。 下面上代码: //一段普通的Go语言代码,用于go语言学习,作者知米无...阅读全文
【Go学习笔记】 2、Go基础知识
Go 程序的一般结构:basic_structrue.go123456789101112131415161718192021222324// 当前程序包名package main//导入其他的包import "fmt"//常量定义const PI = 3.14//全局变量的生命和赋值var name = "gopher"//一般类型声明type newType int//结构体type gopher struct{}//接口声明type golang interface{}func main(){ Println("Hello World!")} 可见性规则 Go 语言中,使用大小写来决定该常量、变量、类型、接口、结构或者函数是否可以被外部包所调用: 根据约定,函数名首字母小写即为priva...阅读全文
go 开发小结
数据互相转换 int 转string string := strconv.Itoa(int) string到int int,err := strconv.Atoi(string) string到int64 int64, err := strconv.ParseInt(string, 10, 64) int64到string string := strconv.FormatInt(int64,10) map 到json字符串 m := map[string]string{} mjson,_ :=json.Marshal(m) mString :=string(mjson) json到struct 如果是单层可以直接用interface转为map jsonStr = `{}` var jsonS...阅读全文
go语言基础
go语言是自己刚接触的。记一下经常用到的东西 1、创建一个新项目时候 ,在该目录下(D:\devtools\go\src),创建hello.go 文件。在go语言中文件以 .go命名。 2、运行代码结果时,(本人用的是sublime text3)用Ctrl+B快捷键 ,然后输入 go run hello.go 回车,得到运行结果。 3、go语言基本语法 每个go程序都是由包组成的。 程序运行的入口是包 main package main 这个程序使用并导入包 “fmt“ 和 “math/rand“ import ( "fmt" "math/rand" ) func main() { fmt.Printf("Now you have %g problems.", math.Sqrt(7)) /...阅读全文
赛车程序出租 Go语言基础01
Go程序的一般结构:basic_structure.go•赛车程序出租【企 娥:217 1793 408】• Go程序是通过 package来组织的• 只有package名称为main的包可以包含main函数• 一个可执行的程序有且仅有一个main包 • 通过import关键字来导入其他非main包• 通过const关键字来进行常量的定义• 通过在函数体外部使用var关键字来进行全局变量的声明于赋值• 通过type关键字来进行结构(struct)或接口(interface)的声明• 通过func关键字来进行 可见性规则 • Go 语言中,使用大小写来决定该 常量、变量、类型、接口、结构、或函数是否可以被外部包调用• 函数名首字母为小写即为private 函数名首字母大写即为public pa...阅读全文
golang利用gob序列化struct对象保存到本地
golang可以通过json或gob来序列化struct对象,虽然json的序列化更为通用,但利用gob编码可以 实现json所不能支持的struct的方法序列化,利用gob包序列化struct保存到本地也十分简单. gob包实现的序列化struct对象保存到本地 务必注意的是golang序列化有个小坑,就是struct里的字段必须要可导出也就是首字母大写 package main import ( "encoding/gob" "fmt" "os" ) type User struct { Id int Name string } func (this *User) Say() string { return this.Name + ` hello world ! ` } func mai...阅读全文
Go基础学习记录 - 编写Web应用程 - Web开发输入验证(二)
前面的文章分享的部分功能都能正常使用,本次分享分析下 -- 输入验证 为了保持项目的可学习性,我这里将之前分享的代码积累了下,放在github上,想要尽快入手学习的,可以直接clone我的代码,写代码不上手,都等于白搭,光看的话,对于我来说,我是不行的,没办法学会。 项目地址 https://github.com/durban89/wiki_blog tag: 1.0.2 有些同学可能看不懂,怎么就只给了这些,完全不懂呀。我把使用的命令打出来,照着操作,就应该可以解决了 git clone https://github.com/durban89/wiki_blog /local/path cd /local/path git fetch origin git checkout 1.0.2 这...阅读全文
【Golang 基础】Go 语言简介
Go 语言简介 Go 是一门开源、支持并发、垃圾回收的编译型系统编程语言,从 2007 年末由 Robert Griesemer,Rob Pike,Ken Thompson 主持开发,后来还加入了 lan Lance Taylor,Russ Cox 等人,并最终在 2009 年 11 月 开源,在 2012 年早些时候发布了 Go 1 稳定版本。 Go 语言的主要特点 类型安全 和 内存安全; 以非常直观和极低代价的方案实现高并发; 高效的垃圾回收机制(内置 runtime); 快速编译(同时解决 C 语言中头文件太多的问题); 为多核计算机提供性能提升的方案; UTF-8 编码支持; Go 语言的应用 服务器编程:处理日志、数据打包、文件系统等; 分布式系统:数据库处理器,中间件等; ...阅读全文
09.手撕Go语言-包
包是函数和数据的集合,将有相关特性的函数和数据放在统一的文件/目录进行管理,每个包都可以作为独立的单元维护并提供给其他项目进行使用 声明 Go源文件都需要在开头使用package声明所在包,包名告知编译器哪些是包的源代码用于编译库文件,其次包名用于限制包内成员对外的可见性,最后包名用于在包外对公开成员的访问 包名使用简短的小写字母,常与所在目录名保持一致,一个包中可以由多个Go源文件,但必须使用相同包名 09.01.png 声明两个包,路径分别为gpkgname/pkg01和gpkgname/pkg02 导入&调用 在使用包时需要使用import将包按路径名导入,再通过包名调用成员 可通过import每行导入一个包,也可使用括号包含所有包并使用一个import导入 09.02.png 工作目...阅读全文
mysql表结构自动生成golang struct
a lib for golang , generate mysql table schema to golang struct mysql表结构自动生成golang struct github地址 https://github.com/gohouse/converter 安装 直接下载可执行文件: 下载地址 golang源码包: go get github.com/gohouse/converter 示例表结构 CREATE TABLE `prefix_user` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Email` varchar(32) NOT NULL DEFAULT '' COMMENT '邮箱', `Password` varchar(32...阅读全文
2-基础知识
https://learnku.com/docs/go-f... 1、Go内置关键字(25个均为小写) break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 2、Go注释方法 // :单行注释/ /:多行注释 3、Go程序的一般结构:basic_structure.go Go程序是通过 package 来组织的(与python类似) 只有 package 名称为 main 的包可以包含 main 函数 一个可执行程序 有且仅有 一个 main...阅读全文
Golang字符串
3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 func lengthOfLongestSubstring(s string) int { m := map[byte]int {} res := 0 for i, j := ...阅读全文
golang语言渐入佳境[27]-其他类型转string函数
其他类型转string函数1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071package mainimport ("fmt""strconv")/*1、func Itoa(i int) stringItoa 是 FormatInt(int64(i), 10) 的缩写。2、func FormatInt(i int64, base int) stringFormatInt 返回给定基数中的i的字符串表示,对于2 <= base <= 36.结果对于数字值> = 10使用小写字母 '...阅读全文
4. golang 函数
函数基本组成: 关键字func 函数名 参数列表 返回值 函数体 返回语句 go的函数不支持重载、默认参数值,支持不定长变参、多个返回值等。 func main() { /* 定义局部变量 */ var a, b = 4, 5 s := add(a,b) fmt.Println(s) } func add(a, b int) int { return a + b } 注意:小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用。 不定参类型函数:函数传入的参数个数为不定数量 func main() { myFunc(1,2,3) } func myFunc(args ...int) { for _,arg := range args { fmt.Println(arg) } }...阅读全文
golang 基础(19)字符串
square-gopher.png 字符和字符串处理 func main(){ s := "Yes我爱Go!" fmt.Printf("%s\n",[]byte(s)) } 这样打印出是就是 "Yes我爱Go!"、打印一下(fmt.Println(len(s)))输出 s 长度为 12 。那么这个 12 是怎么来的呢。 fmt.Printf("%X\n",[]byte(s)) 可以打印出里面具体字节的数字,会使用 %X 来打印字节 596573E68891E788B1476F21 这样并不便于观察,我们可以通过 for 循环来讲字符一个一个打印出来 for _, b := range []byte(s){ fmt.Printf("%X ",b) } fmt.Println() 59 65 7...阅读全文
包相关
工作空间 Golang 工作空间 :编译工具对源码目录有严格要求,每个工作空间 (workspace) 必须由 bin、pkg、src 三个目录组成。 workspace | +--- bin // go install 安装目录。 | | | +--- learn | +--- pkg。 // go build 生成静态库 (.a) 存放目录。 | | | +--- darwin_amd64 | | | +--- mylib.a | | | +--- mylib | | | +--- sublib.a | +--- src // 项目源码目录。 | +--- learn | | | +--- main.go | +--- mylib | +--- mylib.go | +--- subli...阅读全文
Golang须知
变量的包作用域 在Golang中,同个package中的非局部变量,可以认为是package作用域,可在package中(可能有多个文件)直接访问。 包变量导出 包内变量可以导出(即其他包可通过import调用)的标志,是变量的首字母是否大写。 首字母大写的包作用域变量,可以导出。 这是Golang中比较不方便的一点:如果要更改一个变量的可导出性,就需要更改其变量名。 值传递和地址传递 Golang中所有函数参数传递都是值传递。 无论是数字、字符串,还是slice、结构体,都会在传递值复制。 如果希望进行引用传递,则可以传递变量的地址。 示例: package main import "fmt" // 测试结构体的地址传递 type A struct { val int64 } func t...阅读全文
让我们一起啃算法----最长公共前缀
最长公共前缀(Longest-Common-Prefix) 题干如下: 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1: 输入: ["flower","flow","flight"] 输出: "fl"示例 2: 输入: ["dog","racecar","car"] 输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。来源:力扣 解题思路 首先我们从题干入手,求字符串数组的公共前缀,那么什么是公共前缀呢?其实就是所有字符串都有的子串,并且这个子串的位置还比较特殊,它在字符串的开始位置。 有了这个认知之后,我们随意取两个字符串 S1 和 S2,先得出 S1 和 S2 的公共前缀,记为 P1。如果没有公共前缀,那么直接返...阅读全文
Go36-3-代码包
把代码拆分到多个文件 如果代码太复杂,就可以把代码写在多个源码文件里。或者是其他代码包中(这个后面讲) 代码示例 下面是程序的主体,但是其中调用了square()函数,这个函数并没有声明: // Go36/article03/example01/demo.go package main import ( "flag" "fmt" ) var x int func init() { flag.IntVar(&x, "x", 0, "计算平方") } func main() { flag.Parse() res := square(x) fmt.Println(x, "的平方:", res) } 上面用到的square()函数被声明在了另一个文件中: // Go36/article03/exam...阅读全文
Json and Go
Reference https://blog.go-zh.org/json-a... Encoding Encode的基本用法是 package main import ( "encoding/json" "fmt" "os" ) type Message struct { Name string Body string Time int64 } func main() { message := Message{"Tom", "Hello", 1294706395881547000} b, err := json.Marshal(message) if err != nil { fmt.Fprintf(os.Stderr, "Failed to Marshal!") os.Exit(1) }...阅读全文
Go基础语法
一、语法结构 Go语言主要有四种类型的声明语句:var, const, type 和 func, 分别对应变量, 常量, 类型和函数实体对象的声明 // 当前程序的包名(一个可执行程序只有一个 main 包) //一般建议package的名称和目录名保持一致 package main // 导入其它包 // 缺少或未使用的包,程序都无法编译通过 import "fmt" // 通过 const 关键字来进行常量的定义 const number1 = 10 // 通过 var 关键字来声明变量 var number2 = 20 // 数组 var number3 = [5]int{1, 3, 5, 7, 9} // 集合 var number4 = map[string]int{ "Age1"...阅读全文