golang基础归纳

1. hello-world

package main
import "fmt"

func main(){
fmt.Println("Hello world, Go Go!");
fmt.Printf("type of Hello is %T\n", "Hello")
}

package main--每一个Go文件都应该在开头进行package name的声明(注:只有可执行程序的包名为main)。包用于代码的封装与重用,这里包名为main。位于第一行。

import "fmt"--导入fmt包,下面代码要使用。

2. 注释

单行注释://

多行注释:/* */

3. 空白符

_在Go中被用作空白符,可以表示任何类型的任何值。

4. 类型

布尔:bool    // true,false

字符串:string

数字类型:int8,int16,int32,int64,int

uint8,uint16,uint32,uint64,uint

float32,float64

complex64,complex128

byte

rune

注:int,根据不同的底层平台,表示32或64位整型。除非对整形的大小有特定的需求,否则通常应该使用int表示整型。

注:byte是uint8的别名,rune是int32的别名。

注:+操作符用于拼接字符串。

5. 类型转换

Go有着非常严格的强类型特征,没有自动类型提升或类型转换,不允许将一种类型的变量赋值给另一种类型的变量。

若要类型转换,需要显式类型装换,如int(f)等。

i := 60.5
j := 50
sum := i + float64(j)

自声明类型也不能和相同原类型混合使用:

    var str string = "Hello"
    type myString string
    var customName myString = "world"
    customName = str  // 不允许

6. 格式说明符

%T:打印变量的类型

%v:打印变量的值

fmt.Printf("type of sum is %T\n", sum)

7. sizeof

Go的unsafe包提供一个Sizeof函数,该函数接收变量并返回它的字节大小。unsafe包应该小心使用,因为使用unsafe包可能带来可移植性问题。

8. 变量

var name type
name = initalvalue
var name type = initalvalue
var name = initalvalue  // 类型推断
var name1, name2 type = initalvalue1, initalvalue2
var (
name1 = initalvalue1
name2 = initalvalue2
)   // 一条语句声明不同类型变量
name := initalvalue   // 简短声明用:=

注:简短声明要求:=操作符左边的所有变量都要有初始值;要求:=操作符的左边至少有一个变量是尚未声明的。

注意:go语言中定义的变量必须被用到,否则会报错。

9. 常量

双引号中的任何值都是Go中的字符串常量。

无类型的常量有一个与它们相关联的默认类型,并且当且仅当一行代码需要时才提供它。在声明中 var name = "Sam"  name需要一个类型,它从字符串常量 Sam 的默认类型中获取。

const a = 5
var intVar int = a
var int32Var int32 = a
var float64Var float64 = a
var complex64Var complex64 = a
fmt.Println("intVar", intVar, "\nint32Var", int32Var, "\nfloat64Var", float64Var, "\ncomplex64Var", complex64Var)

a 的值是 5 ,a 的语法是通用的(它可以代表一个浮点数、整数甚至是一个没有虚部的复数),因此可以将其分配给任何兼容的类型。这些常量的默认类型可以被认为是根据上下文在运行中生成的。 var intVar int = a 要求 a 是 int,所以它变成一个 int 常量。 var complex64Var complex64 = a 要求 a 是 complex64,因此它变成一个复数类型。

10. 函数

func functionname(parametername1 type, parametername1 type) returntype {
    // 函数体(具体实现的功能)
}

如果有连续若干个参数,它们的类型一致,那么我们无须一一罗列,只需在最后一个参数后添加该类型。

从函数中可以返回一个命名值。一旦命名了返回值,可以认为这些值在函数第一行就被声明为变量了。

func rectProps(length, width float64)(area, perimeter float64) {
    area = length * width
    perimeter = (length + width) * 2
    return // 不需要明确指定返回值,默认返回 area, perimeter 的值
}

11. 包

包用于组织Go源代码,提供了更好的可重用性和可读性。

属于某一个包的源文件都应该放置于一个单独命名的文件夹里。按照 Go 的惯例,应该用包名命名该文件夹。

导出名字

在 Go 中,任何以大写字母开头的变量或者函数都是被导出的名字。其它包只能访问被导出的函数和变量。

init函数

所有包都可以包含一个 init 函数。init 函数不应该有任何返回值类型和参数,在我们的代码中也不能显式地调用它。init 函数的形式如下:

func init() {
}

init 函数可用于执行初始化任务,也可用于在开始执行之前验证程序的正确性。

包的初始化顺序

首先初始化包级别(Package Level)的变量

紧接着调用 init 函数。包可以有多个 init 函数(在一个文件或分布于多个文件中),它们按照编译器解析它们的顺序进行调用。

如果一个包导入了另一个包,会先初始化被导入的包。尽管一个包可能会被导入多次,但是它只会被初始化一次。

空白标识符

导入了包,却不在代码中使用它,这在 Go 中是非法的。有两种处理方法:

1)错误屏蔽器。在导入包后,用空白符引用包的变量。var _ = rectangle.Area

2)导入包语句前使用空白符。_"geometry/rectangle"

12. 条件判断

if condition {
} else if condition {
} else {
}

if statement; condition {
}

注:else 语句应该在 if 语句的大括号 } 之后的同一行中。如果不是,编译器会不通过。

13. 循环

for是Go语言中唯一的循环语句。Go中没有while和do while循环。

for initialisation; condition; post {
}

其中initialization和post可以省略,而只使用condition

for i <= 10 { //semicolons are ommitted and only condition is present
   fmt.Printf("%d ", i)
   i += 2
}

若condition也省略则表示无限循环。

14. switch

基础用法和C语言相似,包含switch…case…case…default。

通过用逗号分隔,可以在一个 case 中包含多个表达式。 case 1,2, 3, 4, 5:

switch中表达式可省略。如果省略表达式,则表示这个 switch 语句等同于 switch true,并且每个 case 表达式都被认定为有效,相应的代码块也会被执行。

    num := 75
    switch { // 表达式被省略了
    case num >= 0 && num <= 50:
        fmt.Println("num is greater than 0 and less than 50")
    case num >= 51 && num <= 100:
        fmt.Println("num is greater than 51 and less than 100")
    case num >= 101:
        fmt.Println("num is greater than 100")
    }

在 Go 中,每执行完一个 case 后,会从 switch 语句中跳出来,不再做后续 case 的判断和执行。使用 fallthrough 语句可以在已经执行完成的 case 之后,把控制权转移到下一个 case 的执行代码中。

    switch num := number(); { // num is not a constant
    case num < 50:
        fmt.Printf("%d is lesser than 50\n", num)
        fallthrough
    case num < 100:
        fmt.Printf("%d is lesser than 100\n", num)
        fallthrough
    case num < 200:
        fmt.Printf("%d is lesser than 200", num)
    }

fallthrough 语句应该是 case 子句的最后一个语句。如果它出现在了 case 语句的中间,编译器将会报错:fallthrough statement out of place

参考:

1. Go 系列教程(Golang tutorial series) go语言中文网

原文地址:https://www.cnblogs.com/embedded-linux/p/11025159.html

时间: 2024-10-08 13:11:11

golang基础归纳的相关文章

Golang基础入门

Go语言很容易上手 第一步,在你的计算机上安装Go语言环境 首先下载对应操作系统的安装包或者源文件 Windows和Mac OSX 都有安装包,可以选择直接双击安装,很简单 Ubuntu系统可以使用 apt-get 安装 sudo apt-get install golang 当然,你也可以选择使用源码包安装 获取源码: $ hg clone -u release https://code.google.com/p/go 进入到源码目录,运行安装脚本 $ cd go/src $ ./all.ba

探索篇 | C语言基础归纳 No.1

导语 本篇博客中包含了大量的C语言基础知识,可能不太全面,但无论大家用于预习或复习,都会具备较为不错的参考价值. 01. C语言与其他计算机语言的对比:C语言广泛的应用于底层开发,区别于应用开发(操作系统与软件间的开发,比如C++.Java等),C语言更擅长做操作系统与电脑之间(驱动层)的工作:C语言是面向过程的语言:C++.Java是面向对象的编程语言: 02. ASCII码表:ASCII码对照表 03.主函数我的第一个C语言代码,写代码先从主函数开始先写一个 main() 函数 //主函数-

Golang基础学习总结

1.不支持继承 重载 ,比如C++Java的接口,接口的修改会影响整个实现改接口的类行为的修改,Go 设计者认为这一特点或许根本没用. 2.必任何函数定义必须花括号跟在函数声明后面而不能换行 如 func  funca(a int){},在Go语言中 函数也是一种类型 可以被推导  使用支持匿名函数 和闭包. 函数的返回值支持多重返回类似Python , 如果不赋值  整数类型默认 0     浮点数类型默认0.0   error类型 默认是nil 3.不用的包一定不要引入,这是Go的原则,就如

[golang基础] 局部变量初始化:=

一 基础用法 操作 := 只能用于方法内部, 声明并初始化新的变量 v := 3 但是不能用于已声明变量赋值, 下面的做法编译器会报错误"no new variables on left side of :=" var v int = 0 v := 1 通过错误可以了解到, := 操作左边必须要有新变量, 那么多个变量初始化只需要满足左边至少有一个新变量即可 err := errors.New("error1") ret, err := test_fun() 这种做

golang基础数据结构

一.概述: 这里主要讨论四种类型---数组.slice.map和结构体 数组和结构体是聚合类型:它们的值都是由很多个元素或者成员字段的值组成.数组是有同构元素组成--每个数组的元素的类型相同:结构体为异构元素组成--每个结构体不一定是同类型元素构成:数组和结构体都是有固定内存大小的数据结构: slice和map则是动态的数据结构,它们需要动态增长: 需要注意的是函数中传递数组:一般而言,当调用函数时,函数的每个调用参数将会被赋值给函数内部的形式参数,所以函数参数接收的是一个复制的副本,而不是原始

Golang基础

Go语言基础 关键字 break, default, func, interface, select case, defer, go, map, struct chan, else, goto, package, switch const, fallthrough, if, range, type continue, for, import, return, var 定义变量 var variablename type = value var vname1, vname2, vname3 typ

Golang基础类型转换string

package main import ( "fmt" "strconv" "unsafe" ) func main() { //基础类型转换string var str string var a int = 10 var b float32 = 123.456 var c bool = true var d uint8 = 'a' //将上面的基础类型转换成string //第一种方式通过 fmt.sPrintf() 转换string str

golang基础练习(一)

//遍历map package main import "fmt" func main() { x := make(map[string]int) x["zhangsan"] = 3 x["lisi"] = 4 x["wangwu"] = 5 //#丢弃值 for i,_ := range x { fmt.Println(i) } } //匿名函数 package main import "fmt" fun

golang基础类型

1.变量 Go使用关键字var定义变量,类型信息放在变量名后面,初始化为零,如下: 在函数内部还有一种更简洁的:=定义方式 变量赋值,两个变量可直接交换 注意:函数内部定义的变量没使用的话编译器会报错. declared and not used 2 常量 用关键词const定义,常量值必须是编译期间能够确定的数值. 枚举iota,从0开始按行数自增,如果重新const,则从0开始再次计算. 3 类型 Go内置以下基础类型: 布尔类型:bool. 整型:int8.byte.int16.int.u