Go 变量声明

Wesley13
• 阅读 607

变量命名

命名方法

var name type是定义单一变量的语法

package main

import "fmt"

func main(){
    var age int    //variable declaration
    fmt.Println("My age is",age)
}

该语句中var age int声明了一个名为age的int类型变量. 但是并没有进行赋值, 这种情况下该类行变量被赋予0为他的初始值.

输出:

my age is 0

一个变量可以被分配任意该类型的值. 该程序中的age变量可以被赋予一个任意的integer value

package main

import "fmt"

func main(){
    var age int //variable declaration
    fmt.Println("my age is",age)
    age = 18 //assignment
    fmt.Println("my age is ",age)
    age = 19 // assignment
    fmt.Println("next year I will be", age, "years old boy")
}

output:

my age is 0
my age is 18
next year I will be 19 years old boy

声明变量并赋初值

声明变量同时可以赋予初始值

var name type = initial_value

package main

import "fmt"

func main(){
    var age int = 18 //variable declaration with initial value;(my age is 18)
    fmt.Println("my age is", age)
}

in the above program, age被声明并赋予初值18,如果你运行above program,你会得到following output:

my age is 18

类型推断 (type inference)

如果variable具有一个initial value, 那么go会自动根据initial value to infer the type of that variable.

所以, 如果你的变量具有initial value, 则可以省略便来嗯声明中的type.

使用var name = initial_value声明变量时,go会根据initial value自动推断变量类型.

in the following example, 我们声明变量age时把type省略掉, 但是赋予了age一个初始值, go会根据这个initial value推断得到变量的类型是int

package main

import "fmt"

func main(){
    var age = 100
    fmt.Println("my age is", age)
}

定义多个变量 in a single statement

多个变量可以一起声明

var name1, name2 type = initialvalue1, initialvalue2 单次声明多个变量

package main

import "fmt"

func main(){
    var width, height int = 1920, 1080 //declaring multiple variables
    fmt.Println(width, "x", height)
}

这里声明变量中的type也可以省略, 使用go语言的特性推断出变量类型

package main

import "fmt"

func main(){
    var width, height = 1920, 1080 //type is dropped
    fmt.Println(width, "x", height)
}

out put

1920 x 1080

当然我们也可以不赋初值, 只是定义两个默认初值的变量

package main

import "fmt"

func main(){
    var width, heiht int
    fmt.Println(width, height)
    width = 1920
    height = 1080
    fmt.Println(width, height)
}

the above program will print.

output:

0 0

1920 1080

某些情况下,我们在单个语句中声明属于不同类型的变量, 语法应该是:

var(
    name1 = initial value1
    name2 = initial value2
)

下述程序使用该语法声明不同类型的变量

package main

import "fmt"

func main(){
    var(
        name = "Gee"
        age = 18
        height int
    )
    fmt.Println("My name is", name, "age is",age, "and height is", height)
}

输出My name is Gee age is 18 and height is 0

简单的声明

Go 还提供了一种简洁的变量声明方式: name := initialvalue,使用:=代替var

package main

import "fmt"

func main(){
    name, age := "Gee", 18
    fmt.Println("my name is", name, "age is", age)
}

输出:my name is Gee age is 18

这样的声明需要把左侧所有的变量都进行赋值.否则会报错cannot assign n values to m variables.

package main

import "fmt"

func main(){
    name, age := "Gee" //error
    name, age := "Gee", 18 //correctness
    fmt.Println(name, age)
}

使用该声明方法时,左侧必须有至少一个变量是新声明的,参考以下程序:

package main

import "fmt"

func main(){
    a, b := 1, 2 //declare variables a ,b
    fmt.Println(a, b)
    b, c := 3, 4//b is already declared but c is new
    fmt.Println(b, c)
    b, c = 5, 6//assign new values to already declared variables b and c
    fmt.Println(b, c)
}

在上面的程序中, 第八行中的b已经被声明过了, 但是c是新声明的; 10 行中b, c都已经存在了, 所以不能再使用:=声明, 只能使用=进行赋值. 如果line No.10 使用:= 进行声明, 则会报错no new variables on left side of :=

输出:

1 2

3 4

5 6

赋值的时候也可以为变量分配运行计算的值. for example:

package main

import "fmt","math"

func main(){
    a, b := 199.9999, 200.0000
    c := math.Min(a,b)
    fmt.Println('minimum value is',c)
}

output:`minimum value is 199.9999

最后:

Go是强类型语言, 如果我们声明了一个变量,然后再赋值给他一个其他类型的值, 那么go会抛出异常:cannot use "naveen" (type string) as type int in assignment

如图所示:

Go 变量声明

参考

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这