Go语言学习笔记(二) 1 命令行参数 1.1 os.Args 2.Go数据类型 2.1类型简介 2.2常见类型声明 2.3 常见类型 2.3.1 布尔类型 2.3.2 数值类型 2.3.2.1 字符串类型 2.3.2.2 数组 2.4 检查变量的类型 2.5类型转换 题外话: 1 命令行参数 大部分的程序处理输入,然后产生输出,这就是关于计算的定义,数据的输入可以是程序自己产生,但大部分时候程序的输入来自于外部源:文件、网络连接、其他程序的输出、键盘、命令行参数等
1.1 os.Args Go语言中的os包提供一些函数和变量,以与平台无关的方式和操作系统打交道。命令行参数以os包中的Args名字的变量供程序访问,在os包外面,使用os.Args这个名字。
os.Args是一个字符串slice; slice是Go中的基础概念,可以理解为是一个动态容量的顺序数组。我觉得可以理解为python中的列表类型,因为他支持python中对列表的操作(分片等); os.Args第一个元素os.Args[0]是命令本身的名字;另外的元素(os.Args[1:]/os.Args[1:len(os.Args)])是程序开始时执行时的参数。 一个简单的输出Args的程序如下:
//例1 package main import ( "fmt" "os" ) func main(){ var s,seq string for i := 1; i < len(os.Args); i++ { s += seq + os.Args[i] seq = " " } fmt.Println(s) } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2.Go数据类型 2.1类型简介 正如上一篇笔记中所说,Go语言不支持数据类型的转换,是静态类型的语言,所以理解Go语言的数据类型很有必要
2.2常见类型声明 Go语言常见的声明有func、var、const、type等
var关键字声明变量,变量可以在声明的时候初始化。如果没有明确的初始化,将隐式地初始化变量为类型的空值,var b bool,此时的b的值为false,数字类型未初始化为0,字符串未初始化为空字符串。 在参考书籍[1]中,将类型分为了布尔类型和数值类型 2.3 常见类型 2.3.1 布尔类型 bool类型不像C或者别的语言一样可以用数字表示(0为false,其他为true),在Go语言中,bool类型的值只能是false或true,布尔类型的变量声明可以这样声明:
var b bool
<变量> <变量名> <变量类型>
1 2 对了这里要注意的是:Go语言不需要在语句或声明后面使用分号结尾,除非有多个语句或声明出现在同一行。
Q: 那么变量如何初始化呢? A: var <变量名> <变量类型> = <变量初值> 如下:
var b bool = true
1 因为Go语言是静态类型的语言,所以,它不支持将布尔类型的变量转换为0、1这样的数字类型
2.3.2 数值类型 Go语言中常见的数值类型如整数、浮点数、字符串和数组。 定义整数和浮点数的方式如下:
var i int = 3
//go语言的浮点数可以是32位(float32)的,也可以是64位的。现代大多数计算机使用64位
var f float64 = 0.111
1 2 3 整数类型和浮点数类型过于简单,笔记没有。
2.3.2.1 字符串类型 字符串类型变量声明如下:
var s string = "foo" var s string = "" var s string = "" s += "foo" 1 2 3 4 当+用于数字类型的操作时,是算术和逻辑操作符;当’+'用于字符串类型时,执行追加操作(类似python中的+对字符串的操作),不能对字符串执行数学运算,必须先将其转换为数字类型。
2.3.2.2 数组 数组类型变量声明如下:
var beatles [4] string
beatles[0] = "John"
…… ……
beatles[3] = "George"
1 2 3 4 2.4 检查变量的类型 在python中我们可以使用type(变量名)来得到变量的类型,在C++中有typeid(变量名).name()来获得变量的类型,Go语言也有类似的机制 我们可以使用标准库中的reflect包来实现,它能帮助我们访问变量的底层类型
package main import ( "fmt" "reflect" ) func main(){ var s string = "string" var i int = 56 var f float64 = 1.2
fmt.Println(reflect.TypeOf(s))//输出string
fmt.Println(reflect.TypeOf(i))//输出int
fmt.Println(reflect.TypeOf(f))//输出float64
} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2.5类型转换 将数据从一种类型转换成另一种类型是常见的编程任务,这通常是在从网络或数据库中读取数据时进行的。Go标准库提供了良好的类型转换支持。strconv包提供了一整套类型转换方法,可用于转换为字符串或将字符串转换为其他类型。 以下是一些简单的例子:
//字符串转布尔值
var s string = "true"
b,err := strconv.ParseBool(s)
//布尔值转字符串
s = strconv.FormatBool(true)
fmt.Println(s)
1 2 3 4 5 6 这里的:=是短变量声明 一个详细的实例如下:
package main
import ( "fmt" "reflect" "strconv" )
func main() { var s string = "true" b, err := strconv.ParseBool(s) fmt.Println(b)//输出true fmt.Println(reflect.TypeOf(b))//输出bool fmt.Println(err)//输出
s = strconv.FormatBool(true)
fmt.Println(s)//输出true
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Go中的nil相当于其他语言的Null、None等
参考书籍 [1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译 [2]: 【Go程序设计语言】黑砖 以及CSDN