• golang语法速记


    Golang语言中存在一个关键字type,type又有两种使用方式,一种是类型别名,一种是类型定义。

    GoLang1.9后对內建定义类型使用了新的写法:

    type NewName = Type

    这个NewName只是Type的别名。NewName和Type是一致的类型。

    而类型定义,则是会产生新的类型。虽然新类型和旧类型是一样的类型。但会被认为是不同的类型名字。

    type NewName Type

    type Student struct {
    name String
    age int
    }

    type Teacher Student

    相当于定义了一个新的Teacher类型,和下面的代码是等价的。虽然两个类型内存布局完全一样,但是从概念上来说,他们是完全不同的两个类型,不能相互兼容。
    type Teacher struct {
    name String
    age int
    }

    类型别名这个功能非常有用,鉴于go中有些类型写起来非常繁琐,比如json相关的操作中,经常用到map[string]interface {}这种类型,写起来是不是很繁琐,没关系,给它起个简单的别名!这样用起来爽多了。
    type strMap2Any = map[string]interface {}

    Go 报错:变量未使用 —— xxx declared and not used

    下面的程序,你可能注意到了一个问题:未使用的变量 n 编译会报错。

    func main() {
    var n int // “n 已声明且未使用”
    n = 5 // 这也没用,还是会编译报错
    }
    ../main.go:2:6: n 已声明且未使用
    这是 Go 语言的一个特性

    存在未使用的变量可能表明存在错误 […] 为了项目的构建速度和便利性以及程序的可读性,Go 语言拒绝使用未使用的变量和包。Go FAQ:我可以停止对未使用的变量 / 导入的投诉吗?](golang.org/doc/faq#unused_variable...)

    但是 Go 语言,允许使用未使用的全局变量和函数参数。

    解决方案:
    如果你不想删除或注释掉一个未使用的变量或者包,则可以添加一个虚拟分配。

    func main() {
    var n int
    n = 5
    _ = n // n 现在被使用了
    }

    ————————————————

    golang中数组作函数参数,默认值传递,修改的数据不会影响原始数组,如要实现,可以

    将数组以指针接受

    使用slice

    package main
    import "fmt"
    func arrayChange(a [3]int) {
        a[2]  =3
        fmt.Println(a)
    }
    func main() {
        var a  = [...]int{3,4,5}
        arrayChange(a)
        fmt.Println(a)
    }
    //输出
    [3 4 3]
    [3 4 5]
    并不会改变原数组,
    可使用指针
    func arrayChange(a *[3]int) {
        a[2]  =3
        fmt.Println(a)
    }
    func main() {
        var a  = [...]int{3,4,5}
        arrayChange(&a)
        fmt.Println(a)
    }
    或slice
    func arrayChange(a []int) {
        a[2]  =3
        fmt.Println(a)
    }
    func main() {
        var a  = []int{3,4,5}
        arrayChange(a)
        fmt.Println(a)
    }

    https://www.bbsmax.com/A/x9J2QOMKz6/

  • 相关阅读:
    第一讲 jQuery入门
    Log4j日志记录
    第四讲 Hibernate 缓存管理
    第一讲 Hibernate 简介
    第三讲 Spring 持久层封装、事务控制
    对 PInvoke 函数的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标
    善用 C# 3.0 Extensions 方法
    .net 下如何将文档文件(Word, Pdf等) 中的文本提取出来(转)
    vs2010常用快捷键 (转)
    Silverlight 视频学习札记(一)
  • 原文地址:https://www.cnblogs.com/youxin/p/16611243.html
Copyright © 2020-2023  润新知