精华内容
下载资源
问答
  • Golang学习

    2021-03-01 15:07:06
    GoLang学习笔记 记录自己的学习笔记——第一弹!参考资料——《Go web编程》 基础语法 变量 1.1go使用var关键字定义变量,将变量类型放于变量名后面 var variableName type ​ 例子:var name string 1.2定义...

    GoLang学习笔记

    记录自己的学习笔记——第一弹!参考资料——《Go web编程》

    基础语法

    变量

    1.1go使用var关键字定义变量,将变量类型放于变量名后面

    var variableName type
    ​
    例子:var name string

    1.2定义变量时可以定义多个一起,以及初始化他们

    定义多个变量
    var vname1,vname2,vname3 type
    定义单个变量并初始化
    var vname = value
    定义多个变量并初始化(变量类型一致时可以省略类型)
    var vname1,vname2,vname3 type = value1,value2,value3
    省略变量类型
    var vname1,vname2,vname3 = value1,value2,value3 
    终极简化——用:=符号代替var和type
    vname := value

    限制:在函数外部使用var定义变量会编译不通过,因此通常用var定义全局变量

    1.3特殊点

    (1) _下划线为一个特殊的变量名————————任何赋予它的值将被丢弃掉
    (2) go语言中对于已声明但未使用的变量会在编译期间报错

    常量

    在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值

    2.1go语言用const关键字定义常量,常量可定义为数值、布尔值或字符串等类型

    const constantName = value
    例子:
    const a = 2021
    const b = true
    const c = "golang"

    内置基础类型

    3.1布尔型

    go语言中布尔型用bool表示,值为true或false,默认为false

    3.2数值类型

    (1)整数类型分:有无符号和带符号两种。
        go同时支持int和uint,这两种类型的长度相同,但具体长度取决于不同编译器的实现。
        当前的gcc和gccgo编译器在32位和64位平台上都使用32位来表示int和uint,但未来在 64 位平台上可能增加到 64 位。
        go里面也有直接定义好位数的类型:int8, int16, int32, int64和uint8, uint16, uint32, uint64。
        另外存在rune代表int32的别称,byte代表uint8的别称
    (2)复数————默认类型是complex128 64位实数+64位虚数)
        形式:RE + IMi (RE是实数部分,IM是虚数部分,而最后的i是虚数单位)

    注意点:变量之间不允许互相赋值或操作,不然会在编译时引起编译器报错

    3.3字符串

    (1)go中的字符串都是采用UTF-8字符集编码。
    (2)字符串是用一对双引号("")或反引号(` `)括起来定义,它的类型是string

    注意点: 1.go中字符串不可变,但可进行切片操作

    2.可以使用+操作符来连接两个字符串

    3.4错误类型

    go内置有一个error类型,专门用来处理错误信息,go的package里面专门用一个包errors来处理错误

    技巧:

    定义多个常量或变量时可以进行分组定义
    ​
    例子1:
    ​
    package main
    ​
    import "fmt"
    ​
    func main() {
    ​
        const (
            a = iota
            b
            c = iota
            d
        )
        
        var(
            e = 20
            f = "golang"
            g = 200.1
        )
    ​
    ​
        fmt.Print("\n")
        fmt.Print(a)
        fmt.Print("\n")
        fmt.Print(b)
        fmt.Print("\n")
        fmt.Print(c)
        fmt.Print("\n")
        fmt.Print(d)
    ​
        fmt.Print("\n")
        fmt.Print(e)
        fmt.Print("\n")
        fmt.Print(f)
        fmt.Print("\n")
        fmt.Print(g)
    ​
    }
    输出:
    0
    1
    2
    3
    20
    golang
    200.1
    ​
    ​
    例子2:
    ​
    package main
    ​
    import "fmt"
    ​
    func main() {
        const (
            a  = 2
            b
            c = iota
            d
        )
        var(
            e = 20
            f = "golang"
            g = 200.1
        )
    ​
    ​
        fmt.Print("\n")
        fmt.Print(a)
        fmt.Print("\n")
        fmt.Print(b)
        fmt.Print("\n")
        fmt.Print(c)
        fmt.Print("\n")
        fmt.Print(d)
    ​
        fmt.Print("\n")
        fmt.Print(e)
        fmt.Print("\n")
        fmt.Print(f)
        fmt.Print("\n")
        fmt.Print(g)
    ​
    }
    输出:
    2
    2
    2
    3
    20
    golang
    200.1
    ​
    注意点:
    (1)当分组定义变量或者常量时,第一个常量或变量默认为0索引位上的值,直到遇到显式赋值或者iota,才会改变该位置上的值,否则后一个变量或者常量的值均为前一个索引位上的值
    (2)当遇到iota时因为每次调用iota会进行自增,所以尽管后一个的值仍旧等于前一位的值,但是会进行+1处理

    go语言默认设计规则

    (1)大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量;小写字母开头的就是不可导出的,是私有变量。
    (2)大写字母开头的函数也是一样,相当于class中的带public关键词的公有函数;小写字母开头的就是有private关键词的私有函数

    容器

    array

    定义:
    var arr [n]type——————在[n]type 中,n 表示数组的长度,type 表示存储元素的类型
    ​
    简写:
    arr1 := [4]int{1,2,3,4}
    ​
    arr2 := [...]int{9,9,9}——————————go会自动根据元素个数来计算数组长度
    ​
    多维数组:
    arr3 := [2][3]int{{1,2,3},{4,5,6}}
    ​
    操作:
    (1)两个数组之间的比较需要借助于reflect.DeepEqual(arr1,arr2)来进行比较
    (2)数组之间的赋值是值的赋值,即当把一个数组作为参数传入函数的时候,传入的实际上是
    该数组的副本,而不是它的指针
    (3)值得注意的是,由于数组长度及类型参与了数组的构建,所以二者只要存在其一不一致的两个数组,比较时均返回false,只有数组长度和类型一模一样时才会返回true

    slice

    概念:引用类型。slice总是指向底层array
    ​
    定义:
    var arr []type——————type表示存储元素的类型(和声明array一样,只是少了长度)
    ​
    结构:
    {   
        指针
        当前长度
        最大长度
    }
    ​
    操作:
    (1)可以从现有数组中截取
        arr := [5]int{1,2,3,4,5}
        s := arr[2:5]
    (2)便捷操作要领
        slice的默认开始位置是 0,ar[:n]等价于 ar[0:n]
        slice的第二个序列默认是数组的长度,ar[n:]等价于 ar[n:len(ar)]
        如果从一个数组里面直接获取slice,可以这样 ar[:],因为默认第一个序列是 0,第二个是数组的长度,即等价于 ar[0:len(ar)]
    ​
    内置函数:
        len获取slice的长度
        cap获取slice的最大容量
        append向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
        copy函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数
    注意:
        append函数会改变slice所引用的数组的内容,从而影响到引用同一数组的其它slice。但当slice中没有剩余空间(即(cap-len) == 0)时,此时将动态分配新的数组空间。返回的slice数组指针将指向这个空间,而原数组的内容将保持不变;其它引用此数组的slice则不受影响

    map

    概念:
        键值对
    ​
    定义并初始化:
        方法一:
        m := make(map[keyType] valueType)
        添加元素:
        m[keyType] = valueType
        
        方法二:
        var n map[keyType] valueType
        n = make(map[keyType]valueType)
        n[keyType] = valueType
        
        方法三:
        k := map[keyType] valueType{keyType:valueType,...}
    ​
    需要了解:
        map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须
    通过 key 获取
        map长度不固定,和slice一样,也是一种引用类型
        内置的len函数同样适用于map,返回map拥有的key的数量
        map的值可以很方便的修改,通过 变量名[key]=val 可以很容易的把key为新的val
        map的初始化可以通过key:val的方式初始化值,同时map内置有判断是否存在key的方
    式
    ​
    删除元素:
        delete(变量名, key) 

    new和make区别

    暂时理解不透彻,后续补进

    流程控制和函数

    if

    规范:
        go语言中if条件判断语句不需要使用括号
        条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条件逻辑块内,其他区域无作用
    ​
    例子:
    ​
    if x > 10 {
        fmt.Println("x is greater than 10")
    } else {
        fmt.Println("x is less than 10")
    }
    ​
    ​
    if x := computedValue(); x > 10 {
        fmt.Println("x is greater than 10")
    } else {
        fmt.Println("x is less than 10")
    }
    //这个地方如果这样调用就编译出错了,因为 x 是条件里面的变量
    fmt.Println(x)

    goto

     概念:
     使用goto跳转到必须在当前函数内定义的标签,标签名是大小写敏感的
     
     例子:
     func myFunc() {
        i := 0
     Here: //这行的第一个词,以冒号结束作为标签
        println(i)
        i++
        goto Here //跳转到 Here 去
    }

    for

    语法:
    for expression1; expression2; expression3 {
        //...
    }
    解析:
    1.expression1、expression2和expression3均为表达式
    2.其中expression1和expression3是变量声明或者函数调用返回值之类的
    3.expression2是用来条件判断
    4.expression1在循环开始之前调用,expression3 在每轮循环结束之时调用
    ​
    操作:
    1.循环里面有两个关键操作 break 和 continue
    ​
        break操作是跳出当前循环,continue是跳过本次循环(当嵌套过深的时候,break 可以配合标签使用,即跳转至标签所指定的位置)
    ​
    2.break和continue还可以跟着标号,用来跳到多重循环中的外层循环
    ​
    3.for配合range可以用于读取slice和map的数据
    例子:
    for k,v:=range map {
        fmt.Println("map's key:",k)
        fmt.Println("map's val:",v)
    }
    ​
    注意:
    由于go支持 “多值返回”, 而对于“声明而未被调用”的变量, 编译器会报错, 在这种较为矛盾的情况下,可以使用_来丢弃不需要的返回值
    例子:
    for _, v := range map{
        fmt.Println("map's val:", v)
    }

    switch

    语法:
    switch index {
    case expr1:
        todo something
    case expr2:
        todo something
    case expr3:
        todo something
    default:
        todo something
    }
    ​
    规则:
    (1)index和expr1、expr2、expr3的类型必须一致。
    (2)go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项;而如果switch没有表达式,它会匹配true
    (3)可以多值聚合在了一个case里面,同时,go语言中switch默认相当于每个case自带break,匹配成功后不会自动向下执行其他 case,而是跳出整个switch,但是可以使用 fallthrough 强制执行后面的 case 代码
    ​
    例子:
    i := 10
    switch i {
    case 1:
        fmt.Println("i is equal to 1")
    case 2, 3, 4:
        fmt.Println("i is equal to 2, 3 or 4")
    case 10:
        fmt.Println("i is equal to 10")
    fallthrough //继续执行default
    default:
        fmt.Println("All I know is that i is an integer")
    }

    函数

    概念:函数是go里面的核心设计,它通过关键字func来声明
    ​
    多返回值:
        关键字 func 用来声明一个函数funcName
        函数可以有一个或者多个参数,每个参数后面带有类型,通过,分隔
        函数可以返回多个值
        如果只有一个返回值且不声明返回值变量,可以省略包括返回值的括号
        如果没有返回值,那么就直接省略最后的返回信息
        如果有返回值, 那么必须在函数的外层添加 return 语句
    ​
    变参:
        类型相等的情况下变量参数数量可变
            func myfunc(arg ...int) {}
    ​
    传值和传指针:
        传值:
        当我们传一个参数值到被调用函数里面时,实际上是传了这个值的一份副本,当在被调用函数中修改参数值的时候,调用函数中相应实参不会发生任何变化,因为数值变化只作用在副本上
        传指针:
        传指针可以修改被传指针所对应的值,利于多个函数可以修改同一个对象,且传指针比较轻量级(8bytes),如果被传对象是较大的结构体时,建议直接传指针
    ​
    defer:
        当defer被声明时,其参数就会被实时解析(就是defer修饰的语句或变量不会因为后续的代码改变而改变,就是相当于临时记录板,需要在return后执行)
        defer修饰的语句或变量执行顺序为先进后出————————栈
        defer可以读取有名的返回值
    ​
    函数作为值、类型
        在go中函数也是一种变量,可以通过type来定义它,它的类型就是所有拥有相同的
    参数,相同的返回值的一种类型
        在写一些通用的接口时,较为实用
    ​
    Panic和Recover:
        panic抛异常(报告致命错误的一种方式,panic异常发生时,程序会中断运行)
        Recover能够将panic转换成可处理的错误
        例子:
        func throwsPanic(f func()) (b bool) {
            defer func() {
                if x := recover(); x != nil {
                    b = true
                }
            }()
            f() //执行函数 f,如果f中出现了panic,那么就可以恢复回来
            return
        }
    ​
    main函数和 init函数:
        下图为main函数引入包初始化流程
            简单总结就是从main函数入,通过import加载子包,在加载子包的时候根据const->var->init()的逻辑进行加载,子包加载完成之后返回上一层进行相同的流程,最后返回到main函数进行exit

    struct类型

    struct
    概念:
    声明新的类型,作为其它类型的属性或字段的容器
    语法:
        type typeName struct{
        
            attribute1 attributeName
            attribute2 attributeName
            attribute3 attributeName
            ......
        }
    ​
    struct的匿名字段
    语法:
        type typeName struct{
        
            attribute1  匿名字段,默认该结构体包含了attribute1的所有字段
            attribute2 attributeName
            attribute3 attributeName
            ......
        }
    作用:
        (1)能够实现字段的继承,以及可以以属性字段来进行访问
            typeName.attribute1 = attribute1{...}
            这样就可以进行typeName.attribute1.attribute1属性,从而进行访问
        (2)可以利用匿名字段进行访问和修改字段,较为实用
        (3)如果匿名字段的内部属性和平行属性出现重复字段,则可以通过属性字段来访问
            
    展开全文
  • Golang学习路线图

    2021-03-18 23:20:43
  • golang学习线路指南

    2020-12-20 20:22:32
    不知道是不是有同学打算开始学习 Golang,确不知道如何开始,至少我开始学习的时候就是这种感觉,为了这个,我查询了很多的帖子和问答。网上的 Golang 资料虽然不多,但是也不少,这个我的一个学习路线,从简单内容...

    不知道是不是有同学打算开始学习 Golang,确不知道如何开始,至少我开始学习的时候就是这种感觉,为了这个,我查询了很多的帖子和问答。网上的 Golang 资料虽然不多,但是也不少,这个我的一个学习路线,从简单内容开始,可以作为参考。

    第一步 Go 语言之旅

    这个是一个官方的入门教程,或者说只是一个大概了解的教程,只介绍了一些简单的东西,并且没有太多的说明。不过这个教程支持在线执行代码,还是很不错的,这个时候你都不需要有本地的开发环境。不用想太多,现在就开始,把这个教程从头到尾看一遍,练习一遍,遇到不明白的地方也不要纠结,继续向后看就行了。

    第二步 开发环境

    这里也可以忽略不看,因为每一个教程都会介绍怎么配置环境

    操作系统

    个人推荐使用 Linux,可以使用 Ubuntu 或者 Fedora ,如果条件允许(不差钱) 也可以使用 Mac,当然使用 Windows 也是可以的,慢慢的就会知道 Windows 下做开发的纠结了。

    开发环境

    Go 的安装非常的简单,没有太多的依赖,如果是 Linux 下安装基本上下载一个二进制包,解压配置上一个环境变量、GOROOT 既可以了,具体的可以查看官方的安装方法: 官网安装文档 、 中文安装文档

    开发工具

    可以选择一个自己喜欢的,个人建议要用个 IDE,我使用过 vim 、Sublime、Intellji idea ,最后发现还是 IDE 比较方便,尤其是代码追踪断点等。这个不纠结那种好,有人和我说 Sublime 和 vim 安装上插件也都可以,但是个人不推荐(我以前是 Sublime 重度用户,PHP 一直都在 Sublime 下开发)。

    主流的文本编辑器及 IDE 的配置 官方 都有介绍,选一个自己喜欢的就可以了。

    第三步 看一套视频

    有人可能喜欢看视频,有人可能喜欢看文档,这个根据个人爱好去选择,个人建议要看一套视频并且只看一套就够了,毕竟看视频的效率还是比较低的,看完视频一些基础的知识点就可以掌握,并且会知道一些专有名字的读法。我以前学 PHP 的时候就从来没看过视频,导致很多名词的发音都是错的,经常被人嘲笑……,当然如果英文非常的好的同学就不用纠结了。

    网上 Golang 的视频不是很多,不过也有好多套,推荐 无闻的Go编程基础,这个是被 golangcaff.com 的 Summer

    整理优化过的,看起来的效果会比一些其他网站好一些。

    第四步 看一篇教程

    教程也有很多,看个人的喜好吧,推荐看 Go 入门指南 ,这个也是由 无闻 翻译 的 The Way to Go ,不过社区的版本对排版进行了优化并加入了后面没有翻译完的部分。

    第五步 将标准库全部都过一遍

    至少要叫常用的全都看一遍,如 strings / strconv / http 等,如果有能力可以将它们都记住,如果记忆力不太好(像我这样)至少也要知道有什么,用到的时候通过手册可以快速找到。

    极力推荐 https://github.com/astaxie/gopkg ,可以在学习的时候看这个,有关于标准库的详细说明和示例,学习起来会容易一些,等全都明白了要使用的时候可以去查看上面的文档。

    更新:

    又发现了一个不错的学习标准库的资料: 《Go语言标准库》The Golang Standard Library by Example ,有点小遗憾就是不是很全,个别的包没有完成,不过 astaxie 的那个也不全,可以互相参考着看。

    完成

    到这个时候,你肯定已经入门了,剩下就开始写自己的东西吧,比如写一个博客,或者去学习一个框架,不知道怎么继续去深造的话就去招聘网站上看看自己喜欢的企业都要求什么,招聘要求会什么就去学什么。

    暂时就到这里,后续还会继续更新此文档,推荐一些有用的资源,欢迎收藏关注。

    展开全文
  • golang 学习

    2021-08-04 14:22:07
    感觉还可以

    感觉还可以

    展开全文
  • Golang开发新手常犯的50个错误 数据类型 连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。 golang面试题:字符串转成byte数组,会发生内存拷贝吗? golang面试题:翻转含有中文、数字、英文...
  • golang学习

    2021-06-28 15:27:22
    golang通道实现生产者、消费者 package awesomeProject1 import ( "fmt" "math/rand" "time" ) // 数据生产者 func producer(header string, channel chan<-string) { for { channel <- fmt.Sprintf(...
  • 一篇带你入门golang框架精髓的博客,图文并茂,火速三连!
  • golang学习之路----介绍

    2021-05-18 21:31:34
    大家好,我是一个golang的小白,之前从事机器学习类工作擅长python,兼做后端开发,后端开发就会django而且就会一个皮毛,因为看到了golang的兴起,所以准备学一下golang,想以后再做后端开发时候就用go。...
  • Golang学习路线图及go-starter.md

    千次阅读 2021-08-29 10:43:38
    为什么要学习golang 最早接触golang是因为对区块链感兴趣,因为golang的并发和内置的网络库还有大公司的支持,先天比较适合区块链,很多著名的框架都是golang写,比如geth 再后来,到新加坡Shopee工作,技术栈从Java...
  • 原标题:Golang学习笔记之Golang与Mysql交互原文作者:学生黄哲来源:简书Go标准库中没有数据库驱动。参见http://golang.org/s/sqldrivers获取第三方驱动。这里选择了Go-MySQL-Driver这个实现。地址是:...
  • Python程序员的Golang学习指南(I):Go 之初体验GolangGo 之初体验Go 语言简介Go,又称 golang,是Google开发的一种静态强类型,编译型,并发型,并具有垃圾回收功能的编程语言。Go 语言于2009年11月正式宣布推出,自...
  • 列表list package main import ( "container/list" "fmt" ) func showList(list1 list.List) { for it := list1.Front();it != nil;it = it.Next(){ fmt.Print(it.Value,"\t") } fmt.Println() ...
  • Golang中异常处理:异常概念、panic函数、异常处理过程、recover错误拦截。
  • golang学习如小树苗需要耐心长大

    千次阅读 2021-05-29 16:35:50
    好种子再小,你耕种时也不会担心,因为你知道,只要等到收获,它将百倍千倍地增长。漫长而伟大的农业史,让人学会耐心,从种到收的那段时间,无法减少,急了没用。 人由一粒受精卵分裂生长而成,一切都源于一粒极...
  • golang学习和校招经历

    2021-03-30 23:05:30
    如果您有时间的话好好看完 如果您还在学校的话好好看完 如果您想学golang的话好好看完 读完大概3分钟 简单介绍一下golang go语言又称golang 我喜欢叫golang golang目前最主要的是用作后端和区块链,而...
  • golang 学习环境准备

    千次阅读 2021-10-10 21:57:53
    Downloads - The Go Programming Language golang jdk 下载 在命令行 cmd 执行 go version 可以查看到结果说明安装成功; 设置环境变变量: GOROOT 还是按照上述环境变量的配置方式进入系统变量中输入变量名和...
  • 一篇带你入门golang框架精髓的博客,图文并茂,火速三连!
  • golang学习十:网络编程

    2021-05-23 21:41:14
    文章目录一、网络协议:1. 典型协议:2.分层模型:2.1 网络分层架构:2.2 层与协议:2.3 通信过程2.4 总结通信过程:二、Socket编程:1.什么是Socket:2. 网络应用程序设计模式:2.1 模式:2.2 TCP的C/S架构:2.3 简单的C/S...
  • 2021Golang技术基础知识及学习路线图

    千次阅读 2021-01-15 09:17:23
    Go 语言最主要的特性: 自动垃圾回收 更丰富的内置类型 函数多返回值 错误处理 匿名函数和闭包 类型和接口 并发编程 反射 语言交互性 下载高清图谱 点我Golang技术图谱 关注公众号 电商程序员 回复 Golang技术图谱...
  • 一篇带你入门golang框架精髓的博客,图文并茂,火速三连!
  • GoLang学习笔记(一)

    2021-09-18 11:40:32
    GoLang学习笔记(一) Go特性 静态编译行 Go的安装 编译器; Go语言的基本命令 命令的使用方式为:go commond [args] 常用命令: help:帮助 Build:编译包和依赖(提交阶段,打包) run:编译并运行go程序(开发阶段...
  • 作者:阿秀阿秀的求职笔记:https://interviewguide.cn你好,我是阿秀。这篇学习路线写完其实很久了,不过前段时间又请组内的Go后端资深研发工程师吃了一顿烤羊腿。向他请教...
  • 从今天起开始分享学习golang的过程吧。 1. 下载安装包 到https://golang.google.cn/dl/,选择Linux的版本 2. 拷贝到/usr/local解压 $ cp go1.16.linux-amd64.tar.gz /usr/local $ cd /usr/local $ tar -xvf go1.16....
  • 所有的学习记录都在 https://gitee.com/mslsy/golang_study
  • 一:简要介绍Viper Viper主要是用于处理各种格式的配置文件,简化程序配置的读取问题。 Viper 支持:(后续会详细介绍) 设置默认值 从JSON,TOML,YAML,HCL和Java属性配置文件中读取 实时观看和重新读取配置...
  • 一篇带你入门golang框架精髓的博客,图文并茂,火速三连!
  • 我在gitee.com上传了学习过程代码。需要的可以去这看https://gitee.com/mslsy/golang_study
  • func GetTree(pid int, list interface{}) []TreeList { treeList := []TreeList{} sv := reflect.ValueOf(list) svs := sv.Slice(0, sv.Len()) for i := 0; i < svs.Len(); i++ { e := svs.Index(i) ...
  • Golang学习之GORM框架

    2021-01-20 18:27:28
    基础 程序 package main ... ... "message": "hello golang", }) } func main() { r := gin.Default() r.GET("/hello", sayHello) // 启动 _ = r.Run() } 模板渲染 func sayHello(w http.R

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,772
精华内容 15,908
关键字:

golang学习