// var 变量名 var a = 1 fmt.Println(a) //var 变量名 类型 var b string = "var" fmt.Println(b)2、多个变量声明
//多个变量 var c,d = 1,2 fmt.Println(c) fmt.Println(d) var e,f int = 1,2 fmt.Println(e) fmt.Println(f)3、未初始化变量声明
//未初始化声明
var g int
fmt.Println(fmt.Sprintf("int 初始化 %d",g))
var h bool
fmt.Println("bool 初始化",h)
var i string
fmt.Println("string 初始化 "+i)
打印输出:
int 初始化 0
bool 初始化 false
string 初始化 (空字符串)
4、简短声明
var j = 1 k:=2 fmt.Println(j,k) := 这属于简短声明,跟 var = 是同价的,使用的话看各人选择5、赋值声明
var l string // 一般声明 var m int // 一般声明 n:=5 // 简短声明 l,m,n = "test",2,3 //赋值声明 fmt.Println(l,m,n) 赋值声明允许同时对多个不同类型字段进行赋值二、变量类型 1、布尔型(bool) 2、整型(int)
无符号:uint8、uint16、uint32、uint64 从0开始的整形数据位数上限[0,2^n) 有符号:int8、 int16、 int32 、int64 以0为分界线,两边各一半,正数多一个 (-2^(n-1)+1,2^(n-1))3、小数型
浮点类型:float32、float64 虚数类型:complex64、complex128 注意:敲黑板,在浮点运算中go和其它语言也没啥区别,所以会存在精度丢失,所幸的是go也和Java一样存在decimal计算来保证数据精确性4、字符串型(string)
一个小坑点,大家提前预警 len()函数
先看代码:
o := "你好"
p := "hello"
fmt.Println("o长度",len(o))
fmt.Println("p长度",len(p))
再看运行结果:
o长度 6
p长度 5
解释:
我们点开len函数,发现ta的注释里有这样一句 “String: the number of bytes in v.”
表明他是以字节来计算长度的,很不幸中文的字节长度与英文不一致,我们需要的是字符长度
使用utf8.RuneCountInString(o) 或者 转化成Rune切片
fmt.Println("urf8 计算长度",utf8.RuneCountInString(o))
fmt.Println("rune 计算长度",len([]rune(o)))
urf8 计算长度 2
rune 计算长度 2
rune的注释:所以能处理一切字符,只不过平时用来计算中文字符
5、数组类型([])//声明
var arr [5]
var brr [6] string
//初始化
var crr = [5]{1,2,3,4,5}
drr := [6]{1,2,3,4,5,6}
//数组长度不定 使用...替换,会自动计算并申请空间
frr := [...]int{1,2}
注意:敲黑板,数组不可越界,编程届老传统了,不可在数组后追加,追加请使用链表、堆、栈
索引下标:
var grr = [5]{1:2,3:4} m:n 表示索引m位置的数据初始化为n,未初始化的为默认值
数组切片:
var hrr = [5]{1,2,3,4,5}
irr := hrr[:] //全部切片
jrr := hrr[1,3] //从1开始到3切片
6、指针类型(*/& 罪大恶极)
var p *int // 指向整型 学C或者汇编的大概深有体会:我们都知道程序中的数据是要存在某一个地方的,就每只猫都有一个猫窝,找到猫窝就能找到猫,跟着猫就能找到猫窝;但是猫窝可能会被其它猫占了,也可能会丢了,这时候你跟踪的猫就是一个流浪猫 *取值符号 *p 表示指向p这个地址的取值 &取地址符号 &a 表示跟踪a这个数值的地址 Java不用管指针是真的爽,Java赛高7、结构化类型(struct)
结构化类型(struct):
struct 语句定义一个有一个或多个成员的结构体。type 语句设定了结构体的名称。结构体的格式如下:
type structOne struct {
name string
Age int
...
属性 类型
}
注意:敲黑板,把他理解为Java的实体类就行了,只有属性,没有动作
同样的大写字母开头表示public,小写字母开头表示private(其实跟前面的变量声明没啥区别,但是这里表名private更容易理解,因为struct自己内部不调用内部,只会被外部调用)
JSON格式化字符串根据大小写开头,值显示大写字符字段值,但是可以使用标记让其显示为小写字符,这里的标记也可以理解为Java中的json注解,解析成我们目标值
type structTwo struct{
Name string `json:"name"` //标记json名字为name
Age int `json:"age"`
Other int `json:"-"` // 标记忽略该字段
}
8、集合(Map)
跟java 的 map一样
var oneMap map[string]int
oneMap = make(map[string]int)
oneMap["a"] = 1
oneMap["b"] = 2
fmt.Println("oneMap 数据",oneMap)
var twoMap = make(map[string]int)
twoMap["a"] = 1
twoMap["b"] = 2
fmt.Println("twoMap 数据",twoMap)
threeMap := make(map[string]int)
threeMap["a"] = 1
threeMap["b"] = 2
fmt.Println("threeMap 数据",threeMap)
数据结果
oneMap 数据 map[a:1 b:2]
twoMap 数据 map[a:1 b:2]
threeMap 数据 map[a:1 b:2]



