GO基本语法

//GO基本语法介绍

package main // 声明main包

import( // 导入包
"fmt"
)

func main(){ // 声明main主函数
fmt.Println("hello worod") // 打印输出
}

func 函数名(形式参数列表)(返回值列表){
函数体
}
// 形式参数包括形式参数名以及参数类型
// 返回值列表描述了返回值的变量名以及类型

/* 一、声明变量 */
var a, b *int // 声明,此处a,b即为指针
var(
a int
b string
c []float32
)

/*
Go语言的基本类型有:
bool
string
int、int8、int16、int32、int64
uint、uint8、uint16、uint32、uint64、uintptr
byte // uint8 的别名
rune // int32 的别名 代表一个 Unicode 码
float32、float64
complex64、complex128

当一个变量被声明之后,系统自动赋予他该类型的零值:
int 0
float 0.0
bool false
string ""
指针 nil
*/

var 变量名 类型 = 表达式 // 变量初始化标准格式
var 变量名 = 表达式 // 编译器推导类型的格式
变量名 := 表达式 // 短变量声明并初始化
i,j := 1, 2 // 简短变量声明语句,定义变量同时显示初始化
i, j = j, i // 多重赋值,交换

// 匿名变量:下划线“_”在go中称为空白标识符

/* 二、变量的作用域 /
/

全局变量,函数体外,声明全局变量必须用var关键字声明,私有变量首字母小写,公有变量首字母大写
局部变量,函数体内
形式参数,形参,函数名变量后括号中的变量
*/

/* 三、数据类型转换 */
a := 5.0
b := int(a)

/* 四、指针 pointer /
/

每个变量都拥有地址,指针的值就是地址
要明白指针,需要知道几个概念:指针地址、指针类型和指针取值
v 代表被取地址的变量,变量 v 的地址使用变量 ptr 进行接收,
ptr 的类型为T,称做 T 的指针类型,代表指针
*/

func main() {
// 准备一个字符串类型
var house = "Malibu Point 10880, 90265"
// 对字符串取地址, ptr类型为*string,称为指针
ptr := &house
// 打印ptr的类型
fmt.Printf("ptr type: %T\n", ptr) // T型数据 ptr type: string
// 打印ptr的指针地址
fmt.Printf("address: %p\n", ptr) // address: 0xc0420401b0
// 对指针进行取值操作
value := ptr
// 取值后的类型
fmt.Printf("value type: %T\n", value) // value type: string
// 指针取值后就是指向变量的值
fmt.Printf("value: %s\n", value) //value: Malibu Point 10880, 90265
}
/

1、对变量进行取地址操作使用&操作符,可以获得这个变量的指针变量
2、指针变量的值是指针地址
3、对指针变量进行取值操作使用
操作符,可以获得指针变量只想的原始变量的值
*/

// 使用指针修改值,交换函数
func swap(a, b *int) {
// 取a指针的值, 赋给临时变量t
t := *a
// 取b指针的值, 赋给a指针指向的变量
*a = *b
// 将a指针的值赋给b指针指向的变量
*b = t
}
func main() {
// 准备两个变量, 赋值1和2
x, y := 1, 2
// 交换变量值
swap(&x, &y)
// 输出变量值
fmt.Println(x, y) // 2 1
}

// 创建指针的另一种方法——new() 函数
str := new(string)
str = "Go语言教程"
fmt.Println(
str)
// new() 函数可以创建一个对应类型的指针,创建过程会分配内存,被创建的指针指向默认值。

/* --> 五、变量逃逸分析/
/

1、栈:线性表数据结构,栈只允许从线性表的同一端放入和取出数据,按照新进先出的顺序
/
func calc(a, b int) int {
var c int
c = a * b
var x int
x = c * 10
return x
}
/

上面代码会进行变量 c 和 x 的分配过程。Go语言默认情况下会将 c 和 x 分配在栈上,这两个变量在 calc()
函数退出时就不再使用,函数结束时,保存 c 和 x 的栈内存再出栈释放内存,
整个分配内存的过程通过栈的分配和回收都会非常迅速
/
/

变量逃逸--自动决定变量分配方式,提高运行效率
Go语言将这个过程整合到了编译器中,命名为“变量逃逸分析”。
通过编译器分析代码的特征和代码的生命周期,决定应该使用堆还是栈来进行内存分配。
编译器觉得变量应该分配在堆和栈上的原则是:
变量是否被取地址
变量是否发生逃逸

*/

/* --> 六、常量,*/
// 声明常量
const name [type] = value // 常量声明语句格式
const b string = "abd" // 显式类型定义
const b = "abc" // 隐式类型定义
const (
a = 1
b
c = 2
d
)
fmt.Println(a, b, c, d) // "1 1 2 2"
// iota 常量生成器
type Weekday int // 定义一个Weekday 命名类型
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)

/* --> 七、模拟枚举/
type Weapon int // 定义新的数据结构体
const (
Arrow Weapon = iota // 开始生成枚举值, 默认为0
Shuriken
SniperRifle
Rifle
Blower
)
// 输出所有枚举值,如上iota会从0依次增加
fmt.Println(Arrow, Shuriken, SniperRifle, Rifle, Blower) // 0 1 2 3 4
// 使用枚举类型并赋初值
var weapon Weapon = Blower
fmt.Println(weapon) // 4
/

1、注意:一个const声明内的每一行常量声明,将会自动套用前面的iota格式,并自动增加
/
// 声明芯片类型
type ChipType int
const (
None ChipType = iota
CPU // 中央处理器
GPU // 图形处理器
)
func (c ChipType) String() string {
switch c {
case None:
return "None"
case CPU:
return "CPU"
case GPU:
return "GPU"
}
return "N/A"
}
func main() {
// 输出CPU的值并以整型格式显示
fmt.Printf("%s %d", CPU, CPU)
}
/

String() 方法的 ChipType 在使用上和普通的常量没有区别。
当这个类型需要显示为字符串时,Go语言会自动寻找 String() 方法并进行调用。
*/

/* --> 八、类型别名*/

// 将NewInt定义为int类型
type NewInt int
// 将int取一个别名叫IntAlias
type IntAlias = int
func main() {
// 将a声明为NewInt类型
var a NewInt
// 查看a的类型名
fmt.Printf("a type: %T\n", a) // a type: main.NewInt
// 将a2声明为IntAlias类型
var a2 IntAlias
// 查看a2的类型名
fmt.Printf("a2 type: %T\n", a2) // a2 type: int
}
/*
结果显示 a 的类型是 main.NewInt,表示 main 包下定义的 NewInt 类型,
a2 类型是 int,IntAlias 类型只会在代码中存在,编译完成时,不会有 IntAlias 类型。
*/

/* --> 九、字符串和数值类型的相互转换/
ltoa() // 整型转字符串,函数签名func Itoa(i int) string
Atoi() // 字符串转整型,函数签名func Atoi(s string) (i int, err error)
ParseBool() // 字符串转换为bool类型值,函数签名func ParseBool(str string) (value bool, err error)
Parselnt() // 字符串转换为整数值(包括正负号),函数签名func ParseInt(s string, base int, bitSize int) (i int64, err error)
ParseUnit() // 字符串转换为整数值(不包括正负号),函数签名func ParseUint(s string, base int, bitSize int) (n uint64, err error)
ParseFloat() // 浮点数字符串转为float,函数签名func ParseFloat(s string, bitSize int) (f float64, err error)
FormatBool() // bool类型转换为字符串,函数签名func FormatBool(b bool) string
FormatInt() // 整型转换为字符串,函数签名func FormatInt(i int64, base int) string
FormatUint() // 整型转换为字符串(无符号的uint64类型),函数签名func FormatUint(i uint64, base int) string
FormatFloat() // 浮点转换为字符串,函数签名func FormatFloat(f float64, fmt byte, prec, bitSize int) string
AppendBool() // append系列函数和format系列函数使用方法类似,append多了将转换后结果追加到一个切片中
AppendFloat()
AppendInt()
AppendUint()
/
/
/
*/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容