标签:格式 package syntax 分解 赋值 class pre 编译器 枚举
变量
第一种,指定变量类型,声明后若不赋值,使用默认值。
var v_name v_type
v_name = value
第二种,根据值自行判定变量类型。
var v_name = value
第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。但是只能在函数体内使用,否则不报错
v_name := value // 例如 var a int = 10 var b = 10 c := 10
举例子
//声明变量 var a int =10 var b=20 var d string="mygo" //这个地方会报错:syntax error: non-declaration statement outside function body //原因在于 := 只能用于方法内,当定义全局变量时只能通过 var 关键字来定义 // c :=30 // 这种因式分解关键字的写法一般用于声明全局变量 var( e int f bool ) //类型相同多个变量, 非全局变量 //全局变量是允许声明但不使用 var v1, v2, v3= 1, 2, 3 //必须先声明,然后修改变量 var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要显示声明类型,自动推断 func main() { //局部变量声明后必须使用 c :=30 fmt.Println(a,b,d,c,d,e,f,vname3) //10 20 mygo 30 mygo 0 false }
常量:
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型
常量的定义格式:
const identifier [type] = value
你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。
const b string = "abc"
const b = "abc"
多个相同类型的声明可以简写为:
const c_name1, c_name2 = value1, value2
//常量 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型 const indentifiter int=100 //显式类型定义 const c_namme="zzy" //隐式类型定义,引号用双引号,单引号报错 const ( //常量还可以用作枚举: Unknown = 0 Female = 1 Male = 2 ) func main() { print("&&&",Unknown) //&&&0 const LENGTH int =10 const WIDTH int =5 fmt.Println(indentifiter,c_namme,LENGTH *WIDTH,Unknown,Female,Male) //100 zzy 50 0 1 2 }
常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过:
package main import "unsafe" const ( a = "abc" b = len(a) c = unsafe.Sizeof(a) ) func main(){ println(a, b, c) } //abc 3 16
iota,特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
iota 可以被用作枚举值:第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:
package main import "fmt" func main() { const ( a = iota //0 b //1 c //2 d = "ha" //独立值,iota += 1 e //"ha" iota += 1 f = 100 //iota +=1 g //100 iota +=1 h = iota //7,恢复计数 i //8 ) fmt.Println(a,b,c,d,e,f,g,h,i) } //0 1 2 ha ha 100 100 7 8
下面这种用法,没看出用处
i=1<<0 j=3<<1 k=3<<2 l=3<<3 /* - **j=3**:左移 1 位,变为二进制 110, 即 6; - **k=3**:左移 2 位,变为二进制 1100, 即 12; - **l=3**:左移 3 位,变为二进制 11000,即 24。 - **i=1**:左移 0 位,不变仍为 1; */
标签:格式 package syntax 分解 赋值 class pre 编译器 枚举
原文地址:https://www.cnblogs.com/zzy-9318/p/10191851.html