Go学习日记
Go的数据类型
bool: true 和 false
int: int8, int16, int32(int), int64
uint: uint8, uint16, uint32(uint), uint64
float: float32, float64
byte 字节类型, 本质是uint8, 对应的操作包是bytes
Golang的数值类型明确的制定了长度、有无符号
Golang不会做类型转换, 类型不同无法编译通过, 所以string只能和string拼接, strings包用来解决string的问题.
Go语言里的字符串长度
用len(str)函数获取到的长度, 这个是字节长度, 就是字符串占了多少个字节(byte). 用utf8库的RuneCountInString(str)函数来计算字符个数.
package main import "unicode/utf8" func main() { //输出9 println(len("字符串")) //输出3 println(utf8.RuneCountInString("字符串")) //输出5 println(utf8.RuneCountInString("go字符串")) }
从以上例子可以看出, 在Go里, 要计算字符串的字节长度, 用len()函数即可; 如果要计算字符个数, 要用编码库的函数来计算.
Go语言里的字符串拼接
和其他的一些语言一样, Go字符串拼接也是用"+", 但不支持字符串和其他类型直接拼接, 需要先转成字符串.
package main import "strconv" func main() { a := "a" b := 1 //不可以这样 //println(a + b) //需要先转成字符串 println(a + strconv.Itoa(b)) //输出a1 }
一个奇怪的类型rune
package main import "fmt" func main() { var a = rune('a') //输出97 fmt.Printf("str: %v\n", a) var str = []rune{'我', '是', 'r', 'u', 'n', 'e'} //输出[25105 26159 114 117 110 101] fmt.Printf("str: %v\n", str) }
Go没有char类型, 直观上看rune就是字符, 就是Go的char类型. 但是, rune不是byte, 源码里rune=int32, 一个rune有四个字节, 这是Go的特色, 可以用来存世上所有的语言字符.
Go变量声明var
Go支持类型推断
//var a int = 1 可以简写如下 var a = 1 //局部变量(方法函数内部)还可以这样写, 省略var a := 1
变量名一般用驼峰命名法
Go没有public, private等修饰符
//变量或函数名首字母大写,全局可以访问 //全局可访问变量 var Global = "全局变量" //全局可访问函数 func GlobalFun() { //..... } //首字母小写,只能在包里使用,它的子包也不能使用 var local = "包变量" var ( FirstName string = "陈" LastName = "Bug" Age = 43 )
Go常量声明 const
常量无法修改值
package main const hello = "world" func main() { // hello = "hello world" 如再次修改值将报错,常量不可以改变值 println(hello) }
Go的函数方法声明func
语法 func 方法名(首字母是否大写决定了作用域) ([返回值类型列表])
方法可以返回多个不同类型的值, 这是一个很大的不同点
方法调用时,如需要忽略返回值可以用 _ = 方法名(...),和一些其他的语言一样,_代表舍弃
package main func main() { } //方法名PrintLine, 有一个content的字符串参数, 并返回一个int数值和一个string字符串 func PrintLine(content string) (int, string) { Println(content) return 0, "done" }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析