go学习笔记(一)
1.变量需要声明再使用
2.同一作用域不支持重复声明
3.变量声明后必须使用
4.可以批量声明变量
//var 变量名 变量类型
var s string
//批量声明
var (
a string
b int
c bool
...
)
5.可以声明变量同时赋值(可类型推导,不用声明类型)
var s1 string = “hahaha”
var s2 = "hahaha" //类型推导
s3 := "hahaha" //简短变量声明,仅可用于函数内中
6.匿名变量:多重赋值时,忽略某个值,用下划线 _
表示。 不占用命名空间-不分配内存-无重复声明-不产生不使用报错的情况
package main
import "fmt"
func qqq( )(int,string){
return 1,"qqq"
}
func main() {
x,_:=qqq()
y,_:=qqq()
fmt.Println("x=",x)
fmt.Println("y=",y)
}
-------
x= 1
y= 1
注意
1.函数外语句必须以关键字开始
常量
const 常量名 = 常量值
1.在程序运行期间不会改变 2.定义了之后不能修改
批量声明
//某一行没赋值,表明同上一行
const(
a = 1
b
c
)
iota 常量计数器
1.const出现时被重置未0 2.每新增一行常量声明,iota增加1 (类似枚举)
const(
a = iota //0
b //1
c //2
)
基本数据类型
整型
分为有符号(int)和无符号(uint)
int8 // 0 ~ 255,byte型
int16 // 0 ~ 65535
int32 //
int64 //
int8 // -128 ~ 127
int16 // -32768 ~ 32767 ,对应C语言中的 short 型
int32 // -2147483648 ~ 2147483647 , 对应C语言中的 long 型
int64 // -9223372036854775808 ~ 9223372036854775807
特殊整型
int 和 uint 在不同平台时会有区别
uintptr 无符号整型,用于存放一个指针
进制转换
func main(){
var a = 100
fmt.Printf("%b\n",a) //二进制
fmt.Printf("%d\n",a) //
fmt.Printf("%o\n",a) //八进制
fmt.Printf("%x\n",a) //十六进制
}
浮点型
支持 float32 和 float64 两种,默认go语言中小数都是float64.
复数
complex64和complex128 复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位.
布尔值
bool,true(真)
和false(假)
注意: 1.布尔类型值默认false 2.不允许整型强制转换成布尔型 3.无法参与数值运算,也无法转换
字符串
go中双引号包裹字符串,单引号包裹字符
转义符 \r \n \t 等等
多行字符串,使用反引号
a := `第一行
第二行
第三行
`
fmt.Println(a)
字符串常用操作
len(str) //求长度
+ 或 fmt.Sprintf //拼接
strings.Split //分割
strings.contains //判断包含
strings.HasPrefix,strings.HasSuffix //前后缀判断
strings.Index(),strings.LastIndex() //定位
strings.Join(a[]string, sep string) //join操作
Go 语言的字符有以下两种:
-
uint8
类型,或者叫 byte 型,代表了ASCII码
的一个字符。 -
rune
类型,代表一个UTF-8字符
。
修改字符串
要先将其转换成[]rune
或[]byte
,完成后再转换为string
func main(){
A := "asd"
byte1 := []byte(A)
byte1[0] = 'a'
fmt.Println(string(byte1))
B := "好好学习天天向上"
rune1 := []rune(B)
rune1[0] = '学'
fmt.Println(string(rune1))
}
类型转换
没有隐式类型转换,仅支持强制类型转换和类型断言
强制类型转换
T(表达式)
注意:指针的强制类型转换需要用到unsafe包中的函数实现
类型断言
package main
import "fmt"
func main() {
var a interface{} =10
switch a.(type){
case int:
fmt.Println("int")
case float32:
fmt.Println("string")
}
}