1.1基础:包、变量、函数

一、包

每个Go程序都由包构成,程序从main包开始运行,使用圆括号将导入的包分为一组。

在Go中,如果一个变量名字以大写字母开头,那么它可以直接由包名导出,其他的变量在该包外均无法访问。

package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Pi)
}

二、函数

1. 参数

函数可接收零个或多个参数。

当连续两个或多个函数的已命名形参类型相同时,除最后一个类型外,其他都可以省略。如

add(x int, y int) 简写成 add(x, y int)

package main

import "fmt"

func add(x, y int) int {
	return x + y
}

func main() {
	fmt.Println(add(42, 13))
}

 2. 返回值

函数可以返回任意数量的返回值

 2.1 带名字的返回值

Go的返回值可被命名,被视为定义在函数顶部的变量。返回值的命名应当反应其含义,可作为函数内变量使用。

若函数return语句后面没有参数,则会直接返回已命名的返回值,即【裸】返回值。

裸返回语句应当仅存在短函数中,在长函数中会影响代码的可读性。

package main

import "fmt"

func split(sum int) (x, y int) {
	x = sum * 4 / 9
	y = sum - x
	return
}

func main() {
	fmt.Println(split(17))
}

三、变量

var语句用于声明变量,类型在最后。变量定义可以出现在包或者函数的层级。

 1. 变量的初始化

变量声明可以包含初始值,每个变量对应一个。如果提供了初始值,则类型可以省略;变量会从初始值中推断出类型。 

package main

import "fmt"

var i, j int = 1, 2

func main() {
	var c, python, java = true, false, "no!"
	fmt.Println(i, j, c, python, java)
}

2. 短变量声明

在函数中,短赋值语句 := 可在隐式确定类型的var声明中使用。函数外的每个语句都 必须 以关键字开始(var、func等),因此 := 结构不能使用在函数外。

package main

import "fmt"

func main() {
	var i, j int = 1, 2
	k := 3
	c, python, java := true, false, "no!"

	fmt.Println(i, j, k, c, python, java)
}

3. 基本类型

类型长度(字节)默认值说明
bool1false
byte10unit8的别名,0~255
rune40int32
int, uint4或8032位或64位
int8, uint810-128~127, 0~255
int16,uint1620-32768~32767, 0~65535
int32,uint3240-21亿~21亿,0~42亿
int64,uint6480
float3240.0
float6480.0
complex648
complex12816
uintptr4或8以存储指针的uint32或uint64整数

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

没有明确初始化的变量声明会被赋予对应类型的零值。零值是:

                                                                                数值类型为0

                                                                                布尔类型为false

                                                                                字符串为“”(空字符串)

 4. 类型转换

表达是T(v)将值v转换为类型T。Go在不同类型的项直线赋值时需要显示转换。

5. 类型推断

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

三、常量

声明方式与变量类似,但需要使用const关键字。常量可以是字符、字符串、布尔值或数值。常量不能用 := 语法声明。

1. 数值常量

数值常量是高精度的值。一个未指定类型的常量由上下文来决定其类型。

package main

import "fmt"

const (
	// 将 1 左移 100 位来创建一个非常大的数字
	// 即这个数的二进制是 1 后面跟着 100 个 0
	Big = 1 << 100
	// 再往右移 99 位,即 Small = 1 << 1,或者说 Small = 2
	Small = Big >> 99
)

func needInt(x int) int { return x*10 + 1 }
func needFloat(x float64) float64 {
	return x * 0.1
}

func main() {
	fmt.Println(needInt(Small))
	fmt.Println(needFloat(Small))
	fmt.Println(needFloat(Big))
}

  • 33
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值