当前位置: 萬仟网 > IT编程>脚本编程>Go语言 > goweb-go语言基础

goweb-go语言基础

2020年01月14日 15:01  | 萬仟网IT编程  | 我要评论

go语言基础

虽然这本书是讲goweb,但还是吧go语言基础过了一遍,由于我之前已经对go语言基础做了一遍系统的学习,这里就当简单回顾一下,不再写过多笔记了,之前的写的博客都有基础知识,o(∩_∩)o哈哈~

go是天生支持utf-8的,任何字符都可以直接输出,你甚至可以用utf-8中的任何字符作为标识符。

go使用package(和python的模块类似)来组织代码。main.main()函数(这个函数位于主包)是每一个独立的可运行程序的入口点。go使用utf-8字符串和标识符(因为utf-8的发明者也就是go的发明者之一),所以它天生支持多语言

comma-ok断言

go语言里面有一个语法,可以直接判断是否是该类型的变量: value, ok = element.(t),这里value就是变量的值,ok是一个bool类型,element是interface变量,t是断言的类型。

如果element里面确实存储了t类型的数值,那么ok返回true,否则返回false。

package main

    import (
        "fmt"
        "strconv"
    )

    type element interface{}
    type list [] element

    type person struct {
        name string
        age int
    }

    //定义了string方法,实现了fmt.stringer
    func (p person) string() string {
        return "(name: " + p.name + " - age: "+strconv.itoa(p.age)+ " years)"
    }

    func main() {
        list := make(list, 3)
        list[0] = 1 // an int
        list[1] = "hello" // a string
        list[2] = person{"dennis", 70}

        for index, element := range list {
            if value, ok := element.(int); ok {
                fmt.printf("list[%d] is an int and its value is %d\n", index, value)
            } else if value, ok := element.(string); ok {
                fmt.printf("list[%d] is a string and its value is %s\n", index, value)
            } else if value, ok := element.(person); ok {
                fmt.printf("list[%d] is a person and its value is %s\n", index, value)
            } else {
                fmt.printf("list[%d] is of a different type\n", index)
            }
        }
    }

反射

go语言实现了反射,所谓反射就是能检查程序在运行时的状态。我们一般用到的包是reflect包。如何运用reflect包,官方的这篇文章详细的讲解了reflect包的实现原理,laws of reflection

使用reflect一般分成三步,下面简要的讲解一下:要去反射是一个类型的值(这些值都实现了空interface),首先需要把它转化成reflect对象(reflect.type或者reflect.value,根据不同的情况调用不同的函数)。这两种获取方式如下:

t := reflect.typeof(i)    //得到类型的元数据,通过t我们能获取类型定义里面的所有元素
v := reflect.valueof(i)   //得到实际的值,通过v我们获取存储在里面的值,还可以去改变值

转化为reflect对象之后我们就可以进行一些操作了,也就是将reflect对象转化成相应的值,例如

tag := t.elem().field(0).tag  //获取定义在struct里面的标签
name := v.elem().field(0).string()  //获取存储在第一个字段里面的值

获取反射值能返回相应的类型和数值

var x float64 = 3.4
v := reflect.valueof(x)
fmt.println("type:", v.type())
fmt.println("kind is float64:", v.kind() == reflect.float64)
fmt.println("value:", v.float())

最后,反射的话,那么反射的字段必须是可修改的,我们前面学习过传值和传引用,这个里面也是一样的道理。反射的字段必须是可读写的意思是,如果下面这样写,那么会发生错误

var x float64 = 3.4
v := reflect.valueof(x)
v.setfloat(7.1)

如果要修改相应的值,必须这样写

var x float64 = 3.4
p := reflect.valueof(&x)
v := p.elem()
v.setfloat(7.1)

上面只是对反射的简单介绍,更深入的理解还需要自己在编程中不断的实践。

var和const参考2.2go语言基础里面的变量和常量申明
package和import已经有过短暂的接触
func 用于定义函数和方法
return 用于从函数返回
defer 用于类似析构函数
go 用于并发
select 用于选择不同类型的通讯
interface 用于定义接口,参考2.6小节
struct 用于定义抽象数据类型,参考2.5小节
break、case、continue、for、fallthrough、else、if、switch、goto、default这些参考2.3流程介绍里面
chan用于channel通讯
type用于声明自定义类型
map用于声明map类型数据
range用于读取slice、map、channel数据
上面这二十五个关键字记住了,那么go你也已经差不多学会了。

总体来说这章写的挺不错的,注释最后涉及到线程和协程时有点懵逼,对这方面接触还是少的原因。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • goweb- 国际化和本地化

    国际化和本地化 为了适应经济的全球一体化,作为开发者,我们需要开发出支持多国语言、国际化的Web应用,即同样的页面在不同的语言环境下需要显示不同的效... [阅读全文]
  • goweb-错误处理,调试和测试

    错误处理,调试和测试 我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系统,几乎都是花费... [阅读全文]
  • Golang 热编译rizla 插件

    今天在写gin接口的时候,每次添加或修改个接口都需要重启项目才能测试,感觉很麻烦。 因为beego有bee工具,bee run启动项目fsnotif... [阅读全文]
  • goweb-处理静态资源

    处理静态文件 对于 HTML 页面中的 css 以及 js 等静态文件,需要使用使用 net/http 包下的以下 方法来处理 1) StripPr... [阅读全文]
  • go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    go微服务框架kratos学习笔记六(kratos 服务发现 discovery) [toc] 除了上次的warden直连方式外,kratos有另一... [阅读全文]
  • goweb-安装go及配置go

    安装go及配置go 安装go 写这篇博客时,我的电脑的windows已经安装过了go,用的是标准包安装,不过我的linux操作系统还没安装,可以考虑... [阅读全文]
  • goweb-go语言基础

    go语言基础 虽然这本书是讲goweb,但还是吧go语言基础过了一遍,由于我之前已经对go语言基础做了一遍系统的学习,这里就当简单回顾一下,不再写过... [阅读全文]
  • goweb-goweb基础

    goweb DNS工作原理 在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用... [阅读全文]
  • goweb-表单

    表单 简单的处理一个登陆界面 request.Form是一个url.Values类型,里面存储的是对应的类似key=value的信息,下面展示了可以... [阅读全文]
  • goweb-访问数据库

    访问数据库 对许多Web应用程序而言,数据库都是其核心所在。数据库几乎可以用来存储你想查询和修改的任何信息,比如用户信息、产品目录或者新闻列表等。 ... [阅读全文]

◎已有 0 人评论

Copyright © 2020  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com