美文网首页
go语言基础(一)

go语言基础(一)

作者: Ukuleler | 来源:发表于2019-10-28 16:11 被阅读0次

一、变量定义
变量命名通过 var+参数名+类型即可

var a int = 1
var s string = "b"
var b true

还可以多个变量一起定义,且可以是不同的类型,只要是逗号分隔即可

var a,b,c,d :=3,4,true,"def"

甚至连var也可以省掉,依靠解释器自己分辨不同的类型

a:=1
s:="str"
b:=true

常量可以使用const关键字

const fileName = "abc.txt"
const a,b=3,4

当然所有的变量或常量都可以统一进行定义

var (
    aa = 3
    ss = "kkk"
    bb = true
)
const(
    cpp = iota
    java
    python
    golang
)

二、条件语句
以if为例,使用如下

a:=3
if a==3 {
    //dosomething
}

if里面是可以提前运行函数的,以读取文件,并判断文件是否存在为例

const filename  = "abcd.txt"
if contents, err:=ioutil.ReadFile(filename);err!=nil{
    fmt.Print(err)
}else {
    fmt.Printf("%s\n",contents)
}

三、循环
先介绍for,for没有括号,格式为for 初始;条件;遍历语句,eg:

for i:=0;i<100;i++{
    fmt.Println(i)
}

如果没有初始和遍历语句,只有条件语句,那么可以省略分号,功能就和while一致了(反正go也没有while关键字),eg:

i:=0
for i<100{
    fmt.Println(i)
    i++
}

稍微复杂一点,以扫描文件io,并读取文件内容为例

func printfile(filename string){
    file,err :=os.Open(filename)
    if err!=nil{
        panic(err)
    }
    scanner:=bufio.NewScanner(file)
    for scanner.Scan(){
        fmt.Println(scanner.Text())
    }
}

需要注意的是,如果条件也没有,直接就一个for结构,那么就是死循环,go语言支持这样的语法的,方便多线程的原因,go语言也会在很多情况用这种用法。eg:

for{
    fmt.Println("abc")
}

四、函数
go语言的函数格式为 func 函数名(参数 参数类型) 返回值{},eg:

func add(a int, b int) int {
    return a+b
}

如果没有返回值,相当于java中的返回void那么可以不写返回值,eg:

func add(a int, b int) {
    fmt.Println(a+b)
}

并且如果想要返回多个值,go语言也支持(知道这一点的时候我都惊了),eg:

func div(a int,b int) (int, int)  {
    return a/b, a%b
}

当然,多个返回值很多时候是用来返回多余的错误信息,以swich为例,eg:

func eval(a,b int, op string) (int, error) {
    switch op {
    case "+":
        return a+b, nil
    case "-":
        return a-b, nil
    case "*":
        return a*b, nil
    case "/":
        q,_:=div(a,b)
        return q, nil
    default:
        return 0, fmt.Errorf(
            "unsupported operation: %s" + op)
    }
}

如果参数格式相同,那么可以像定义变量一样(a,b int),去定义参数或者返回值,eg:

func div(a,b int) (q, r int)  {
    return a/b, a%b
}

go语言也支持函数式编程

func apply(op func(int, int) int,c,d int) int{
    p:=reflect.ValueOf(op).Pointer()
    opName:=runtime.FuncForPC(p).Name()
    fmt.Printf("Calling function %s with args (%d, %d)",opName, c, d)
    return op(c,d)
}

func pow(a,b int) int {
    return int(math.Pow(float64(a),float64(b)))
}

或者是这样写

func apply(op func(int, int) int,c,d int) int{
    p:=reflect.ValueOf(op).Pointer()
    opName:=runtime.FuncForPC(p).Name()
    fmt.Printf("Calling function %s with args (%d, %d)",opName, c, d)
    return op(c,d)
}

func main() {
    fmt.Println(apply(func(i int, i1 int) int {
        return int(math.Pow(float64(i),float64(i1)))
    },1,2))
}

五、指针
go语言支持指针,首先举个例子,下面的程序结果运行为1,2。也就是说是值传递。

func swap(a, b int){
    a,b=b,a
}

func main() {
    a,b:=1,2
    swap(a,b)
    fmt.Println(a,b)
}

如果想要使用引用传递,那就要用到指针,eg:

func swap(a, b *int){
    *a,*b=*b,*a
}
func main() {
    a,b:=1,2
    swap(&a,&b)
    fmt.Println(a,b)
}

当然,不想使用指针,使用返回值进行控制也可以,eg:

func swap(a, b int) (int,int){
    a,b=b,a
    return a,b
}
func main() {
    a,b:=1,2
    a,b=swap(a,b)
    fmt.Println(a,b)
}

相关文章

  • go语言基础

    go语言基础 go 语言接口

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • Go语言基础语法--注释、基础结构2

    章节 GO语言基础语法--注释、基础结构(重要) 1.GO语言基础语法---注释、基础结构 基础结构注意事项 源文...

  • Go语言入坑

    GO语言基础 认识并安装GO语言开发环境 Go语言简介 Go语言是谷歌2009年发布的第二款开源编程语言 go语言...

  • Golang资料整理

    视频 郝林-Go语言第一课 Go编程基础 Go Web 基础 Go名库讲解 社区 官网要翻墙 Github--Go...

  • go基础

    go 语言基础知识汇总

  • 从0开始Go语言,用Golang搭建网站

    实践是最好的学习方式 零基础通过开发Web服务学习Go语言 本文适合有一定编程基础,但是没有Go语言基础的同学。 ...

  • Go语言探索 - 3(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,我们主要学习了Go语言的编程基础。这些基础内容包括注释、分...

  • Go语言学习笔记(二)-基础语法

    Go语言结构 Go语言的基础组成有一下几个部分: 包声明 包引入 函数 变量 语句&表达式 注释 关于Go的语言组...

  • go语言基础(一)

    一、变量定义变量命名通过 var+参数名+类型即可 还可以多个变量一起定义,且可以是不同的类型,只要是逗号分隔即可...

网友评论

      本文标题:go语言基础(一)

      本文链接:https://www.haomeiwen.com/subject/jgsbvctx.html