Go- 变量
发布于: 3 小时前
Go 学习笔记,学习内容《Go入门指南》
代码示例可以直接运行,主要介绍以下内容:
变量可不显示初始化
变量的作用域
变量类型可由编译器推导
变量可使用简短声明语法
变量值类型和引用类型
变量的打印
变量的声明和赋值语法
变量赋值时的抛弃值
变量的声明位置
全局变量声明可不使用,局部变量声明必须使用
package main
import (
"fmt"
"os"
"runtime"
)
func main() {
/*
1、当声明一个变量时,系统自动赋予他该变量的零值
int 0
float 0.0
bool false
string ""
指针 nil
2、变量命名遵循小驼峰命名法
3、如果全局变量需要被外部包使用,则使用大驼峰命名法
4、函数内声明的变量为局部变量,函数外声明的变量时局部变量,代码块中声明的变量作用域在代码块中
5、变量可以在编译期间进行赋值,也可以在运行期间进行赋值
6、一般情况下,当变量a和变量b的类型相同时,才进行a=b的赋值
*/
var a int
var b bool
var c float32 // float and complex were removed. Use float32 or float64
var str string
var p *int
/*
以上代码等价于
var (
a int
b bool
str string
)
*/
fmt.Println(a, b, c, str, p) // 输出:0 false 0 <nil>
var x int = 20 // 声明时赋值
var i = 10 // 变量类型由编译器推导
/*
编译错误:syntax error: unexpected newline, expecting type
因为编译器无法推断类型
*/
//var y
var n int64 = 2 // 若自动推断类型为 int,这里需要显示指定 int64 类型
fmt.Println(x, i, n)
var (
HOME = os.Getenv("HOME")
USER = os.Getenv("USER")
GOROOT = os.Getenv("GOROOT")
)
fmt.Println(HOME, USER, GOROOT)
/*
var 方式声明的变量,主要用于声明包级别的全局变量,
当在行数内声明局部变量时,应使用简短声明语法 */
w := 1
m := "Hi"
fmt.Println(w, m)
/* 示例 */
var goos string = runtime.GOOS
fmt.Printf("The operation system is: %s\n", goos)
path := os.Getenv("PATH")
fmt.Printf("Path is %s\n", path)
/*
值类型和引用类型(即值和指针)
Go 语言中的引用类型包括:指针、map、slices、maps、channel,
被引用的变量保存在堆中,以便进行垃圾回收,并且拥有更大的内存空间
*/
/*
打印函数
%s 字符串标志符
%v 使用类型的默认输出格式标志符
*/
fmt.Sprintf("%s", "string") // 无输出?
fmt.Println("END")
fmt.Print("%s", "string") // 无换行输出:%sstring
fmt.Println("END")
fmt.Printf("%s", "string") // 无换行输出:string
fmt.Println("END")
fmt.Println("%s", "string") // 换行输出:%sstring 使用默认输出格式输出格式 %v
fmt.Println("END")
// 编译错误:undefined: num
//num = 1
// 编译错误:no new variables on left side of :=
//num := 1
//num := 2
num := 1
num = 2
fmt.Println(num) // 输出:2
/*
若声明变量,但是没有使用,编译时出错:xxx declared but not used
声明全局变量可以不使用
*/
var a1, b1, c1 int // 变量可以在同一行声明
a1, b1, c1 = 5, 6, 8 // 变量可以在同一行赋值
fmt.Println(a1, b1, c1)
// 编译错误:cannot use "abc" (type untyped string) as type int in assignment
//a1 = "abc"
// 交换两个变量的值
a1, b1 = b1, a1
fmt.Println(a1, b1)
// _ 表示抛弃值
_, d1 := 2, 1000
//fmt.Println(_) // 编译错误:cannot use _ as value
fmt.Println(d1) // 输出:1000
// 变量除了可以在全局声明中初始化,也可以在 init 函数中初始化
}
复制代码
划线
评论
复制
发布于: 3 小时前阅读数: 6
版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/778c94c7a0d9e3621d6a1725a】。文章转载请联系作者。
HelloBug
关注
还未添加个人签名 2018.09.20 加入
还未添加个人简介
评论