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 2024-03-07 09:02  *代码的Bug  阅读(20)  评论(0)    收藏  举报