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传给你的是返回匿名函数中

相关文章
|
3月前
|
程序员 Go 云计算
2023年学习Go语言是否值得?探索Go语言的魅力
2023年学习Go语言是否值得?探索Go语言的魅力
|
3月前
|
缓存 NoSQL Go
通过 SingleFlight 模式学习 Go 并发编程
通过 SingleFlight 模式学习 Go 并发编程
|
13天前
|
数据采集 监控 Java
go语言编程学习
【11月更文挑战第3天】
30 7
|
23天前
|
设计模式 测试技术 Go
学习Go语言
【10月更文挑战第25天】学习Go语言
21 4
|
2月前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
3月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
135 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
3月前
|
算法 NoSQL 中间件
go语言后端开发学习(六) ——基于雪花算法生成用户ID
本文介绍了分布式ID生成中的Snowflake(雪花)算法。为解决用户ID安全性与唯一性问题,Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位(固定为0)、41位时间戳、10位标识位(含数据中心与机器ID)及12位序列号组成。面对ID重复风险,可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID,确保不同节点产生的ID始终唯一。
102 0
go语言后端开发学习(六) ——基于雪花算法生成用户ID
|
3月前
|
Go
Go - 学习 grpc.Dial(target string, opts …DialOption) 的写法
Go - 学习 grpc.Dial(target string, opts …DialOption) 的写法
59 12
|
3月前
|
JSON 缓存 监控
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
Viper 是一个强大的 Go 语言配置管理库,适用于各类应用,包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`,Viper 支持更多配置格式如 JSON、TOML、YAML
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
|
2月前
|
Rust Linux Go
Rust/Go语言学习
Rust/Go语言学习