< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

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"
}
posted on   撸代码的Bug  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示