Go基础学习【1】

简介: Go基础学习【1】

一:基础类型

1.不能以数字 ,关键词 ,名字里不能有运算符
2.导入包不使用会报错

3.类型有int float bool string 复合型struct array slice map channel 只描述类型的行为的 iinterface
4.类型转换

类型b的值 = 类型b(l类型a的值)
5.init包常用来做调用goroutine执行
6.:=只能在自己函数内部调用 不可以用于全局变量的声明

func main() { //GOG
   a = "G"
   print(a)
   f1()
}
func f1() {
   a := "O"
   print(a)
   f2() //依旧调用的是全局变量里的a的值
}
func f2() {
   print(a)
}


7.go中没有float和double类型 只有float32和float64类型
8.格式化:%d 整数 %g 浮点数 %b二进制 %o 八进制 %x %X十六进制 大小写 %0d输出定长的整数 %n.mg / %n.mf 表示精确小数点后几位

%c character %v或%d输出该字符的整数
9. \n换行 \r 回车 \ 反斜杠 \t tab键
10.go中的len()用于获取ASCI字符串长度,对于其他字符会占有2-4个字符,
(中文字符是占3个字符位置) 而是用RuneCountlnString() 则会获得字符串的长度

func main() {
   // count number of characters:
   str1 := "asSASA ddd dsjkdsjs dk"
   fmt.Printf("The number of bytes in string str1 is %d\n", len(str1)) //22
   fmt.Printf("The number of characters in string str1 is %d\n", utf8.RuneCountInString(str1)) //22
   str2 := "asSASA ddd dsjkdsjsこん dk"
   fmt.Printf("The number of bytes in string str2 is %d\n", len(str2))  //28
   fmt.Printf("The number of characters in string str2 is %d", utf8.RuneCountInString(str2)) //24
}


11.字符串常用方法:
1.判断字符串开头结尾是否包含某个

strings.HasPrefix(s,prefix string) bool 判断orefix是否是s开头
strings.HasSuffix(s,suffix string) bool 判断suffix是否是s结尾


2.Contains Index 和 LastIndex 和 IndexRune

strings.Contains(s,substr string) bool  // 判断字符串substr是否在s
strings.Index(s,str string) int // 判断str在s中的索引位置
strings.LastIndex(s,str string) int // 返回str在s中最后出现时的索引位置
strings.IndexRune(s string,r rune) int //如果查找时候不是asci码时,使用该方法
//第四个方法例子
strings.IndexRune("chicken",'k')
strings.IndexRune("chicken",'d')


2.Contains Index 和 LastIndex 和 IndexRune

strings.Contains(s,substr string) bool  // 判断字符串substr是否在s
strings.Index(s,str string) int // 判断str在s中的索引位置
strings.LastIndex(s,str string) int // 返回str在s中最后出现时的索引位置
strings.IndexRune(s string,r rune) int //如果查找时候不是asci码时,使用该方法
//第四个方法例子
strings.IndexRune("chicken",'k')
strings.IndexRune("chicken",'d')


3.Replace 和 count 替换和统计次数

strings.Replace(str,old,new string,n int)) string //将前n个old替换成new
strings.count(s,str string) int //统计s中str的个数


4.重复 Repeat 和 修改字符串的大小写

strings.Repeat(s,count int) string //将目标字符串重复count遍
strings.Tolower(s) string  //将字符创转化为小写
strings.ToUpper(s) string  //将字符串转化为大写


5.修剪TrimSpace,分割Fields,Split,拼接slice 字符串

strings.TrimSpace(s) //用来剔除字符串开头和结尾的空呗符号
strings.TrimSpace(s,"cut") // 将开头和结尾的cut去除掉
strings.Fields(s)  //利用空呗作为分隔符
strings.split(s,sep) //自定义分隔符号
strings.join(s1,sep string) // 以sep为分隔符将s1拼接上去


6.读取内容 NewReader 和 字符串和其他类型的转化

Read() //从[]byte中读取内容
ReadByte() 和 ReadRune() //从字符串中读取下一个byte或者rune
strconv.IntSize //查看int类型所占的位数
strconv.Itoa(i int) string //返回i的字符串型的十进制数字
strconv.FormatFloat() string //将 64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 'b'、'e'、'f' 或 'g'),prec 表示精度,bitSize 则使用 32 表示 float32,用 64 表示 float64。
strconv.Atoi(s string)(i int,err error) //将字符串型转化为int类型

**7.指针:不可以用于常量

var i1 = 5 定义变量

var intP *int 调用指针p

使用 intP= &i1 将i1的地址赋予intP

要想表示5 则可以使用 *intP 则可以表示指针所指地址的值

如果 *intP 的值发生改变,表示的是指针所指地址的值发生改变 那个i1也就发生了改变,不是原来的值


二:循环结构

1.for循环两种输出形式

for xx(){

}

for 索引,值 :=range xx{

}

2.标签 对大小写敏感 要求全部大写字母**

LABEL1:
   for i := 0; i <= 5; i++ {
      for j := 0; j <= 5; j++ {
         if j == 4 {
            continue LABEL1
         }
         fmt.Printf("i is: %d, and j is: %d\n", i, j)
      }
   }

标签的作用对象为外部,所以continue跳出之后,会进入外层的下一步寻循环内


三:函数

1、slice…
如果参数被存储在一个slice类型的变量中,可以通过slice…的形式来调用变成那函数
2、defer 还可以用来 追踪进入和离开

类似于java中的finally,最后执行 当有多个deger时,类似于栈,后进先出
3.闭包
当函数作为返回值i的时时候,

func Add2() (func(b int) int) 例如这种
有 p:= Add2(2) 这个参数2传给你的是返回匿名函数中

相关文章
|
19天前
|
安全 Java 编译器
对比Java学习Go——基础理论篇
本章介绍了Java开发者学习Go语言的必要性。Go语言以简单、高效、并发为核心设计哲学,摒弃了传统的类继承和异常机制,采用组合、接口和多返回值错误处理,提升了代码清晰度与开发效率。Go直接编译为静态二进制文件,启动迅速、部署简便,其基于Goroutine和Channel的并发模型相较Java的线程与锁机制更轻量安全。此外,Go Modules简化了依赖管理,与Java的Maven/Gradle形成鲜明对比,提升了构建与部署效率。
|
9天前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
19天前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
3月前
|
Go
学习 Go并发模型
本文通过一个简单例子,讲解如何将数组数据转换为其平方值,并将其分解为三个步骤:生产信息(`producer()`)、处理信息(`square()`)和消费信息(`main()`)。进一步介绍了 FAN-OUT 和 FAN-IN 模型的优化,展示了多 goroutine 并发读写通道的实现方式。FAN-OUT 是多个 goroutine 从同一通道读取数据,而 FAN-IN 是单个 goroutine 从多个通道读取数据。最后强调了优化 FAN 模式时需根据具体场景解决瓶颈问题,并推荐使用带缓冲的通道以提高性能。
学习 Go并发模型
|
程序员 Go 云计算
2023年学习Go语言是否值得?探索Go语言的魅力
2023年学习Go语言是否值得?探索Go语言的魅力
|
缓存 NoSQL Go
通过 SingleFlight 模式学习 Go 并发编程
通过 SingleFlight 模式学习 Go 并发编程
|
10月前
|
数据采集 监控 Java
go语言编程学习
【11月更文挑战第3天】
169 7
|
10月前
|
设计模式 测试技术 Go
学习Go语言
【10月更文挑战第25天】学习Go语言
150 4
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
558 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。