go学习(一)变量、常量

emm,发觉自己没有系统的学习。都是有需求来临时调研技术,从今天起每天抽出时间系统化学习Go.

类型

Go是静态类型语言,运行期间不能改变类型

定义

  1. 可以使用var 关键字
  2. 可以使用 := 让系统推导类型

example:

1var a int 2a := 0 3是一致的

但是要注意一点

1var a int 2f := func () { 3 a:=1 //此时是局部变量(没进行参数传递) 4} 5f() 6此时a的值不会变

更灵活的语法:

1var x , y ,z int 2x,y,z := 1,float64(12313),"dassad" //动态类型推导,不建议这么写,增加阅读难度

特殊占位符 _

_用于将结果忽略的位置

1func test() (int, string) { 2 return 1, "abc" 3} 4func main() { 5 _, s := test() 6 println(s) 7}

代码块定义

代码块内有新的变量生命周期

1s := "abc" 2println(&s) 3 4s, y := "hello", 20 // 重新赋值: 与前 s 在同⼀层次的代码块中,且有新的变量被定义。 5println(&s, y) // 通常函数多返回值 err 会被重复使⽤。 6 7{ 8 s, z := 1000, 30 // 定义新同名变量: 不在同⼀层次代码块。 9 println(&s, z) 10}

基本类型

类型

长度

默认值

说明

bool

1

false

byte

1

0

uint8 之间可以相互转换

rune

4

0

unicode code point,int32

int/uint

4或者8

0

32位长度4 64位长度8

int8/uint8

1

0

-128127, 0255

int16/uint16

2

0

-3276832767,065535

int32/uint32

4或者8

0

32位长度4 64位长度8, 21亿正负

int64/uint64

8

0

complex64

8

0

复数类型

complex128

16

0

复数类型

array

值类型

struct

值类型

string

""

值类型

slice

4或者8

nil

引用类型

map

4或者8

nil

引用类型

channel

4或者8

nil

引用类型

interface

nil

接口类型

function

nil

函数类型

new 和 make对引用类型的区别

引⽤类型包括 slice、map 和 channel。它们有复杂的内部结构,除了申请内存外,还需 要初始化相关属性。

new会计算引用类型大小,并为其分配初始值(默认值),并返回指针

make会被编译期编译为具体创建函数,分配内存和初始化成员结构,返回对象而非指针

1a:=[]int{0,0,0} 2a[1] = 10 3b := make([]int, 3) 4b[1] = 10 5 6c:=new([]int) //指针,但是只有头指针,可以append,但是不能直接使用 7c[1]=10

常量

golang的常量只支持编译器可确定的类型。(数字、字符串、布尔)

不能定义在方法体内部

常量值还可以是 len、cap、unsafe.Sizeof 等编译期可确定结果的函数返回值。

重点: 编译期可确定的值(因为常量是不可写的,要在编译期确定结果,放入常量内存区域)

枚举

关键字 iota 定义常量组中从 0 开始按⾏计数的⾃增枚举值。

每一个const内iota都会从0开始

1const ( 2 Sunday = iota // 0 3 Monday // 1,通常省略后续⾏表达式。 4 Tuesday // 2 5 Wednesday // 3 6 Thursday // 4 7 Friday // 5 8 Saturday // 6 9) 10 11const ( 12 Sunday1 = iota // 0 13 Monday1 // 1,通常省略后续⾏表达式。 14 Tuesday1 // 2 15 Wednesday1 // 3 16 Thursday1 // 4 17 Friday1 // 5 18 Saturday1 // 6 19)
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

皕杰报表(关于日期时间时分秒显示不出来)

在使用皕杰报表设计器时,数据据里面是日期型,但当你web预览时候,发现有日期时间类型的数据时分秒显示不出来,只有年月日能显示出来,时分秒显示为0:00:00。1.可以使用tochar解决,数据集用selecttochar(flowdate,"yyyyMMddHH:mm:ss")fromtablename2.也可以把数据库日期类型date改成timestamp

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )