栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

GO初学3-变量

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GO初学3-变量

 一、变量声明 1、基础变量声明
// 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]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489083.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号