Go语言学习笔记(二)

1 命令行参数

大部分的程序处理输入,然后产生输出,这就是关于计算的定义,数据的输入可以是程序自己产生,但大部分时候程序的输入来自于外部源:文件、网络连接、其他程序的输出、键盘、命令行参数等

1.1 os.Args

Go语言中的os包提供一些函数和变量,以与平台无关的方式和操作系统打交道。命令行参数以os包中的Args名字的变量供程序访问,在os包外面,使用os.Args这个名字。

    1. os.Args是一个字符串slice
    1. sliceGo中的基础概念,可以理解为是一个动态容量的顺序数组。我觉得可以理解为python中的列表类型,因为他支持python中对列表的操作(分片等);
    1. 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)
}

2.Go数据类型

2.1类型简介

正如上一篇笔记中所说,Go语言不支持数据类型的转换,是静态类型的语言,所以理解Go语言的数据类型很有必要

2.2常见类型声明

Go语言常见的声明有func、var、const、type等

  1. var关键字声明变量,变量可以在声明的时候初始化。如果没有明确的初始化,将隐式地初始化变量为类型的空值,var b bool,此时的b的值为false,数字类型未初始化为0,字符串未初始化为空字符串。
  2. 在参考书籍[1]中,将类型分为了布尔类型和数值类型

2.3 常见类型

2.3.1 布尔类型

bool类型不像C或者别的语言一样可以用数字表示(0为false,其他为true),在Go语言中,bool类型的值只能是falsetrue,布尔类型的变量声明可以这样声明:

	var b bool
	<变量> <变量名> <变量类型>

对了这里要注意的是:Go语言不需要在语句或声明后面使用分号结尾,除非有多个语句或声明出现在同一行。

Q: 那么变量如何初始化呢?
A: var <变量名> <变量类型> = <变量初值> 如下:

	var b bool = true

因为Go语言是静态类型的语言,所以,它不支持将布尔类型的变量转换为0、1这样的数字类型

2.3.2 数值类型

Go语言中常见的数值类型如整数、浮点数、字符串和数组。
定义整数和浮点数的方式如下:

	var i int = 3
	//go语言的浮点数可以是32位(float32)的,也可以是64位的。现代大多数计算机使用64位
	var f float64 = 0.111

整数类型和浮点数类型过于简单,笔记没有。

2.3.2.1 字符串类型

字符串类型变量声明如下:

var s string = "foo"
var s string = ""
var s string = ""
s += "foo"

+用于数字类型的操作时,是算术和逻辑操作符;当’+'用于字符串类型时,执行追加操作(类似python中的+对字符串的操作),不能对字符串执行数学运算,必须先将其转换为数字类型。

2.3.2.2 数组

数组类型变量声明如下:

	var beatles [4] string
	beatles[0] = "John"
	…… ……
	beatles[3] = "George"

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
}

2.5类型转换

将数据从一种类型转换成另一种类型是常见的编程任务,这通常是在从网络或数据库中读取数据时进行的。Go标准库提供了良好的类型转换支持。strconv包提供了一整套类型转换方法,可用于转换为字符串或将字符串转换为其他类型。
以下是一些简单的例子:

	//字符串转布尔值
	var s string = "true"
	b,err := strconv.ParseBool(s)
	//布尔值转字符串
	s = strconv.FormatBool(true)
	fmt.Println(s)

这里的:=是短变量声明
一个详细的实例如下:

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)//输出<nil>

	s = strconv.FormatBool(true)
	fmt.Println(s)//输出true
}

Go中的nil相当于其他语言的NullNone

 参考书籍
 [1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
 [2]: 【Go程序设计语言】黑砖
题外话:
  1. 我刚刚发现原来博主访问自己的文章也能算作访问量,emm,个人觉的可以把这一项删掉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是兔不是秃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值