golang学习随笔
1、统计长度(内键函数,builtin)
func len(v Type) int
内建函数len返回 v 的长度,这取决于具体类型:
数组:v中元素的数量
数组指针:*v中元素的数量(v为nil时panic)
切片、映射:v中元素的数量;若v为nil,len(v)即为零
字符串:v中字节的数量
通道:通道缓存中队列(未读取)元素的数量;若v为 nil,len(v)即为零
PS:golang的编码标准为UTF-8,在字符串中,ASCII码字符占1个字节,汉字占三个字节
2、交换字符
golang可以很方便的交换字符,比如交换byte[1]和byte[0],可以写成如下形式
byte[1] , byte[0] = byte[0] , byte[1]
多个值也能完成交换
a, b, c = b, c, a
Golang 里两个值交换的操作是依赖于等号表达式的副作用,原理是将要被赋值的值,会被存储在临时变量里,所以下例子赋值顺序对结果是无影响的
a := 1; b := 2
a, b, a = b, a, b
其结果仍然是 a = 2, b = 1。
3、string与byte数组的相互转换
golang不像cpp可以方便的对string直接进行操作,需要修改元素必须先转成byte数组修改再转回string
//string 转为[]byte
var str string = "test"
var data []byte = []byte(str)
//[]byte转为string
var data [10]byte
byte[0] = 'T'
byte[1] = 'E'
var str string = string(data[:])
4、int和[]byte的相互转换
func Int2Byte(data int) (ret []byte) {
var len uintptr = unsafe.Sizeof(data)
ret = make([]byte, len)
var tmp int = 0xff
var index uint = 0
for index = 0; index < uint(len); index++ {
ret[index] = byte((tmp << (index * 8) & data) >> (index * 8))
}
return ret
}
func Byte2Int(data []byte)int{
var ret int = 0
var len int = len(data)
var i uint = 0
for i=0; i<uint(len); i++{
ret = ret | (int(data[i]) << (i*8))
}
return ret
}
5、golang 中string和int类型相互转换
//string转成int:
int, err := strconv.Atoi(string)
//string转成int64:
int64, err := strconv.ParseInt(string, 10, 64)
//int转成string:
string := strconv.Itoa(int)
//int64转成string:
string := strconv.FormatInt(int64,10)
转载:https://blog.csdn.net/iamlihongwei/article/details/79550958
6、关于 runtime error: slice bounds out of range [1:0]
一个导致此报错的原因:
使用fmt.Scanln()时括号中间没有使用取地址符&
7、golang中的自增和自减
golang中,i++,i--是语句,它不能有接收者,相当于一条可以被编译器识别的命令,类似于break,goto这种语句,而且也不能用++i,--i
以下用法错误的:
i := 1
j := i++

浙公网安备 33010602011771号