Golang学习笔记(二)

(4)变量类型

Go 的基本类型有

bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

rune // int32 的别名
     // 表示一个 Unicode 码位

float32 float64

complex64 complex128

本例展示了几种类型的变量。 和导入语句一样,变量声明也可以「分组」成一个代码块。

int、uint 和 uintptr 类型在 32-位系统上通常为 32-位宽,在 64-位系统上则为 64-位宽。当你需要一个整数值时应使用 int 类型, 除非你有特殊的理由使用固定大小或无符号的整数类型。

表达式 T(v) 将值 v 转换为类型 T。

一些数值类型的转换:

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

i := 42
f := float64(i)
u := uint(f)

与 C 不同的是,Go 在不同类型的项之间赋值时需要显式转换,否则会编译不通过。

在声明一个变量而不指定其类型时(即使用不带类型的 := 语法 var = 表达式语法),变量的类型会通过右值推断出来。
当声明的右值确定了类型时,新变量的类型与其相同:

var i int
j := i // j 也是一个 int

不过当右边包含未指明类型的数值常量时,新变量的类型就可能是 int、float64 或 complex128 了,这取决于常量的精度(只能是这三种,不能是int64)

i := 42           // int
f := 3.142        // float64
g := 0.867 + 0.5i // complex128

常量的声明与变量类似,只不过使用 const 关键字。

常量可以是字符、字符串、布尔值或数值。

常量不能用 := 语法声明

数值常量是高精度的 。(不会丢失精度)

一个未指定类型的常量由上下文来决定其类型。

在Go中,若想打印一个变量的类型,可以用fmt.Printf()的%T格式:

func main(){
    var s string = "Hello"
    fmt.Printf("Type of s : %T\n",s)
}

4.流程控制语句

(1)for循环

Go 只有一种循环结构:for 循环。
基本的 for 循环由三部分组成,它们用分号隔开:
初始化语句:在第一次迭代前执行
条件表达式:在每次迭代前求值
后置语句:在每次迭代的结尾执行
初始化语句通常为一句短变量声明,该变量声明仅在 for 语句的作用域中可见。
一旦条件表达式求值为 false,循环迭代就会终止。

Go 的 for 语句后面的三个构成部分外没有小括号, 大括号 { } 则是必须的。

func main() {
	sum := 0
	for i := 0; i < 10; i++ {
		sum += i
	}
	fmt.Println(sum)
}

初始化语句和后置语句是可选的。

func main() {
	sum := 1
	for ; sum < 1000; {
		sum += sum
	}
	fmt.Println(sum)
}

for是go中的while

func main() {
	sum := 1
	for sum < 1000 {
		sum += sum
	}
	fmt.Println(sum)
}

如果省略循环条件,该循环就不会结束,因此无限循环可以写得很紧凑。

for{

}
(2)if

Go 的 if 语句与 for 循环类似,表达式外无需小括号 ( ),而大括号 { } 则是必须的。

func sqrt(x float64) string {
	if x < 0 {
		return sqrt(-x) + "i"
	}
	return fmt.Sprint(math.Sqrt(x))
}

和 for 一样,if 语句可以在条件表达式前执行一个简短语句。

该语句声明的变量作用域仅在 if 之内。

func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n); v < lim {
		return v
	}
	return lim
}

在 if 的简短语句中声明的变量同样可以在对应的任何 else 块中使用。

func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n); v < lim {
		return v
	} else {
		fmt.Printf("%g >= %g\n", v, lim)
	}
	// can't use v here, though
	return lim
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值