go语言学习初探(二)基础语法

栏目: Go · 发布时间: 6年前

内容简介:变量声明基本变量类型分为:int、string、数组、切片数据(动态长度数组)、结构体、指针、Map、函数等。var 简化写法,例子:

变量声明

var v1 int
var v2 string
var v3 [10]int
var v4 []int
var v5 struct {
    f int
}
var v6 *int
var v7 map[string] int
var v8 func(a int) int

   基本变量类型分为:int、string、数组、切片数据(动态长度数组)、结构体、指针、Map、函数等。

   var 简化写法,例子:

var (
    v1 int
    v2 string
)

变量初始化

var v1 int = 10
var v2 = 10
v3 := 10

   v1 为正常方式。v2 & v3 可以自动推导类型。v3的方式不能作用于全局变量。

   警告::= 左侧的变量不可以提前声明,比如 var v1 = 10; v1 := 10;该写法会导致编译器报错。

匿名变量

package helloworld

func getName() (string, string, string, string) {
    firstName := "firstName"
    lastName := "lastName"
    nickName := "nickName"
    middleName := "middleName"
    return firstName, lastName, nickName, middleName
}
package main

import (
    "fmt"
)

func main(){
    _, _, _, middle := getName()
    fmt.Println(middle)
}

// print -> "middleName"

常量

package main

import (
    "fmt"
)

func main(){
    const NAME = "name"
    fmt.Println(NAME)
}

  常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。

预定义常量

true
false
iota // 常量计数器

枚举

const (
    Sunday = iota
    Monday    
    Tuesday    
    Wednesday    
    Thursday    
    Friday    
    Saturday    
    numberOfDays        // 这个常量没有导出
)

   Go 语言中,以大写字母开头的常量在包外可见。numberOfDays 该常量只能在包内可用。

数据类型

基础数据类型

布尔类型:bool
整型:int8、byte、int16、int、uint、uintptr等
浮点类型:float32、float64
复数类型:complex64、complex128
字符串:string
字符类型:rune
错误类型:error

   int8:取值范围为 -128~127

复合数据类型

指针(pointer)
数组(array)
切片(slice)
字典(map)
通道(chan)
结构体(struct)
接口(interface)

数值运算

+
-
*
/
%

比较运算符

>
>=
<
<=
==
!=

位运算

x << y  左移    124 << 2    // 结果为496
x >> y  右移    124 >> 2    // 结果为31
x ^ y   异或    124 ^ 2     // 结果为126
x & y   与      124 & 2     // 结果为0
x | y   或      124 | 2     // 结果为126
^x      取反    ^2          // 结果为-3

遍历字符串

package main

import (
    "fmt"
)

func main() {
    str := "hello 世界!"
    for _, s := range str {
        fmt.Println(string(s))
    }
}

数组及数组切片

arr1 := [5]int{1,2,3,4,5}
arr2 := []int{}

   数组长度在定义之后,不能更改。数组切片可以。

流程控制

条件语句:if-else & else-if
选择语句:switch & case & select
循环语句:for & range
跳转语句:goto
其他关键字:break & continue & fallthrough

条件语句 if-else

package main

import (
    "fmt"
)

func main() {
    a := 1
    if a > 3 {
        fmt.Println("a > 3")
    } else {
        fmt.Println("a > 3 is fail")
    }
}

  警告:有返回值的函数中,if-else控制语句中不允许直接return

选择语句 switch

package main

import (
    "fmt"
)

func main() {
    i := 0
    switch i {
    case 0:
        fmt.Println("0")
    case 1:
        fmt.Println("1")
    case 2:
        fmt.Println("2")
    }
}
// print -> "0"

循环语句 for

package main

import (
    "fmt"
)

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}
// print -> 1 ~ 9

函数

func (参数列表)(返回值列表) {
    函数体 & 返回语句
}

不定参数

package main

import (
    "fmt"
)

func myFunc(args ...int) {
    for _, i := range args {
        fmt.Println(i)
    }
}

func main() {
    myFunc(1, 2, 3, 4)
}
// print -> 1 2 3 4

  警告:...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数

匿名函数

func(a, b int) int{}

// 执行匿名函数
func(a,b int) int{}(1, 2)

// 赋值
f := func(a ,b int) int{}

闭包

package main

import (
    "fmt"
)

func main() {
    i := 5

    f := func() func() {
        j := 10
        return func() {
            fmt.Println(i, j)
        }
    }()

    f()

    i = 10

    f()
}
// print -> 5   10
// print -> 10  10

错误处理

package main

import (
    "errors"
    "fmt"
)

func main() {
    err := errors.New("this is a bug")
    fmt.Println(err)
}
// print -> "this is a bug"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人类2.0

人类2.0

皮埃罗∙斯加鲁菲(Piero Scaruffi) / 闫景立、牛金霞 / 中信出版集团股份有限公司 / 2017-2-1 / CNY 68.00

《人类2.0:在硅谷探索科技未来》从在众多新技术中选择了他认为最有潜力塑造科技乃至人类未来的新技术进行详述,其中涉及大数据、物联网、人工智能、纳米科技、虚拟现实、生物技术、社交媒体、区块链、太空探索和3D打印。皮埃罗用一名硅谷工程师的严谨和一名历史文化学者的哲学视角,不仅在书中勾勒出这些新技术的未来演变方向和面貌,还对它们对社会和人性的影响进行了深入思考。 为了补充和佐证其观点,《人类2.0......一起来看看 《人类2.0》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具