【原创 笔记】Golang入门

基本结构和基本数据类型

Go 程序的基本结构和要素

四种导入方式

如果你导入了一个包却没有使用它,则会在构建程序时引发错误,如 imported and not used: os

main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init () 函数则会先执行该函数)。如果你的 main 包的源代码没有包含 main 函数,则会引发构建错误 undefined: main.main。main 函数既没有参数,也没有返回类型(与 C 家族中的其它语言恰好相反)。如果你不小心为 main 函数添加了参数或者返回类型,将会引发构建错误:

func main must have no arguments and no return values results.

只有当某个函数需要被外部包调用的时候才使用大写字母开头,并遵循 Pascal 命名法;否则就遵循骆驼命名法,即第一个单词的首字母小写,其余单词的首字母大写。

常量

常量使用关键字 const 定义

const Pi = 3.14159

还可以这样写

可以看到每当 iota 在新的一行被使用时,它的值都会自动加 1

iota=0就完事了,不要尝试过多的理解

变量

声明变量的一般形式是使用 var 关键

Go 和许多编程语言不同,它在声明变量时将变量的类型放在变量的名称之后

var a int

var a bool

var a string

当然也可以写为这种格式

var (
    a int
    b bool
    str string
)

当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil。记住,所有的内存在 Go 中都是经过初始化的

变量的命名规则遵循骆驼命名法,即首个单词小写,每个新单词的首字母大写,例如:numShipsstartDate

一般情况下,当变量 a 和变量 b 之间类型相同时,才能进行如 a = b 的赋值。

Go 编译器的智商已经高到可以根据变量的值来自动推断其类型

意思是不用对他进行定型,这和python一个意思

var (
    a = 15
    b = false
    str = "Go says hello to the world!"
    numShips = 50
    city string
)

当你在函数体内声明局部变量时,应使用简短声明语法 :=,例如:

func main() {
	a := 1
	fmt.Println(a)// 1
}

简短形式,使用 := 赋值操作符

用:=进行赋值,就不用var设置变量了

如果在相同的代码块中,我们不可以再次对于相同名称的变量使用初始化声明

这里有个知识点,print为错误输出流,所以使用有问题不适合打印,标准输出流为fm.print

而:

fmt.Println :可以打印出字符串,和变量
fmt.Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整形
fmt.Println 打印的每一项之间都会有空行,Print 没有

基本类型和运算符

布尔类型 bool

布尔型的值只可以是常量 true 或者 false

利用括号同样可以升级某个表达式的运算优先级

在格式化输出时,你可以使用 %t 来表示你要输出的值为布尔型

数字类型

在格式化输出时,你可以使用 %d 来表示你要输出的值为布尔型

运算符的优先级

由于编译器行尾自动补全分号的缘故,加号 + 必须放在第一行。

控制结构

if-else 结构

关键字 if 和 else 之后的左大括号 { 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行

if x{
}
else {  // 无效的
}
package main
import "fmt"
func main() {
    bool1 := true
    if bool1 {
        fmt.Printf("The value is true\n")
    } else {
        fmt.Printf("The value is false\n")
    }
}

当 if 结构内有 break、continue、goto 或者 return 语句时,Go 代码的常见写法是省略 else 部分(另见第 5.2 节)。无论满足哪个条件都会返回 x 或者 y 时,一般使用以下写法

if condition {
    return x
}
return y

不要同时在 if-else 结构的两个分支里都使用 return 语句,这将导致编译报错 function ends without a return statement

for 结构(for循环)

基于计数器的迭代

package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        fmt.Printf("This is the %d iteration\n", i)
    }
}

循环嵌套

for i:=0; i<5; i++ {
    for j:=0; j<10; j++ {
        println(j)
    }
}

基于条件判断的迭代

package main

import "fmt"

func main() {
    var i int = 5

    for i >= 0 {
        i = i - 1
        fmt.Printf("The variable i is now: %d\n", i)
    }
}

无限循环

package main

import "fmt"

func main() {
	var i int = 5

	for {
		i = i - 1
		fmt.Printf("The variable i is now: %d\n", i)
	}
}

fBreak 与 continue

break 语句的作用结果是跳过整个代码块,执行后续的代码

package main

func main() {
    for i:=0; i<3; i++ {
        for j:=0; j<10; j++ {
            if j>5 {
                break   
            }
            print(j)
        }
        print("  ")
    }
}

关键字 continue 忽略剩余的循环体而直接进入下一次循环的过程,但不是无条件执行下一次循环,执行之前依旧需要满足循环的判断条件

package main

func main() {
    for i := 0; i < 10; i++ {
        if i == 5 {
            continue
        }
        print(i)
        print(" ")
    }
}

标签与 goto

for、switch 或 select 语句都可以配合标签(label)形式的标识符使用,即某一行第一个以冒号(:)结尾的单词(gofmt 会将后续代码自动移至下一行)

package main

import "fmt"

func main() {

LABEL1:
    for i := 0; i <= 5; i++ {
        for j := 0; j <= 5; j++ {
            if j == 4 {
                continue LABEL1
            }
            fmt.Printf("i is: %d, and j is: %d\n", i, j)
        }
    }

}

本例中,continue 语句指向 LABEL1,当执行到该语句的时候,就会跳转到 LABEL1 标签的位置。

另外,还可以使用 goto 语句和标签配合使用来模拟循环

package main

func main() {
    i:=0
    HERE:
        print(i)
        i++
        if i==5 {
            return
        }
        goto HERE
}

特别注意 使用标签和 goto 语句是不被鼓励的:它们会很快导致非常糟糕的程序设计,而且总有更加可读的替代方案来实现相同的需求

函数

函数参数与返回值

在函数块里面,return 之后的语句都不会执行

函数定义时,它的形参一般是有名字的,不过我们也可以定义没有形参名的函数,只有相应的形参类型,就像这样:func f(int, int, float64)。

没有参数的函数通常被称为 niladic 函数(niladic function),就像 main.main()

package main

import "fmt"

func main() {
	fmt.Printf("Multiply 2 * 5 * 6 = %d\n", MultiPly3Nums(2, 5, 6))
	// var i1 int = MultiPly3Nums(2, 5, 6)
	// fmt.Printf("MultiPly 2 * 5 * 6 = %d\n", i1)
}

func MultiPly3Nums(a int, b int, c int) int {
	// var product int = a * b * c
	// return product
	return a * b * c
}

==>转载请注明来源哦<==
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇