Golang一些有趣的特性

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

内容简介:6、go没有字符类型(char),一般用byte类型来表示,并且go中的编码是统一使用utf8,每个字符都会有一个固定的码值12、包内变量名和函数名以及常量名,首字母大写为公开方法(相当于其他语言的public)其他包可使用,首字母小写为私有方法(相当于其他语言的private)其他包不能使用

1、变量定义的几种方式 如:

//方式一:普通定义
    var a int = 1
    fmt.Println("a = ", a)
    //方式二:类型推导
    var b = 10
    fmt.Println("b = ", b)
    //方式三:省略var
    name := "tom"
    fmt.Println("name = ", name)
    //多变量声明
    var n1, n2, n3 int
    fmt.Println("n1 = ",n1 ,"n2 = ", n2,"n3 = ",n3)

    var n4, name1, n5 = 100, "tom", 888
    fmt.Println("n4 = ",n4 ,"name1 = ", name1,"n5 = ",n5)

    n6, name2, n7 := 100, "tom", 888
    fmt.Println("n6 = ",n6 ,"name2 = ", name2,"n7 = ",n7)

2、 go 语言定义的变量或引入的包没有使用的话不能编译通过,可以使用忽略保留定义和包引入 如:

package main

  import (
    "fmt"
    _ "bytes" //忽略bytes包
    )


  func main () {

    var num1 int = 10
    _ = num1  //忽略变量
    fmt.Println("hello world")

  }

3、自动整理格式化代码指令

//自动整理格式化输出
linux~# gofmt hello.go 
package main

import "fmt"

func main() {
    fmt.Println("hello world")
}
//将整理格式化后的类容保存文件
linux~# gofmt -w hello.go

4、大括号不能换行

//正确的
func main () {
    fmt.Println("hello world")
}

//错误的
func main ()
{
    fmt.Println("hello world")
}

5、变量多值的返回与接收

package main
import (
    "fmt"
    )

func main () {
    
    var num1 int = 10
    var num2 int = 1
    
    //接收两个值
    sum , sub := getSumAndSub(num1, num2)
    fmt.Println("sum =",sum, "sub =", sub)
    
    //只接收一个值
    sum0 , _ := getSumAndSub(num1, num2)
    fmt.Println("sum =",sum0)
}

func getSumAndSub(num1 int, num2 int) (int, int) {
    sum := num1 + num2
    sub := num1 - num2
    return sum, sub
}

6、go没有字符类型(char),一般用byte类型来表示,并且go中的编码是统一使用utf8,每个字符都会有一个固定的码值

//go没有字符类型
    var c1 byte = 'a'
    var c2 byte = '1'
    //输出的都是码值
    fmt.Println("c1", c1, "c2", c2)
    //输出对应的字符
    fmt.Printf("c1=%c c2=%c", c1, c2)
    //汉字
    var c3 byte = '被'//溢出
    fmt.Printf("c3=%c c3码值=%d", c3, c3)

    var c4 int = '被'
    fmt.Printf("c4=%c c4码值=%d", c4, c4)

    //输出码值对应的字符
    var c5 int = 22269
    fmt.Printf("c5=%c", c5)

7、字符串(string)一旦赋值就不能通过下标来修改

var str2 = "hello"
    //str2[0] = 'a'  //报错

8、以字符串原生方式输出

var str string = `每个生命的方式是自然界一种力的方式。
有些人的生命像沉静的湖,有些像白云飘荡的一望无际的天空,
有些像丰腴富饶的平原,有些像断断续续的山峰。
我觉得约翰·克利斯朵夫的生命像一条河。
            ——罗曼.罗兰《约翰·克利斯朵夫》`
    fmt.Println(str)

9、字符串+号拼接

//加号放在上一行末尾
    str4 := "hello" +
        "world"
    fmt.Println("str4 = ", str4)

10、与 Java 、c相比go的不同类型数据之间转换需要强制转换(显示转换)

var i int32 = 10
    var f1 float32 = float32(i)
    fmt.Println("f1 = ", f1)
    
    var n1 int32 = 1
    var n2 int8
    var n3 int8

    n2 = int8(n1) + 127 //编译能过,但结果溢出
    //n3 = int(n1) + 128 //n3是int8 报错
    fmt.Println("n1 =", n1, "n2 =", n2," n3 =",n3)

11、string类型与其他基本类型之间的互相转换

其他基本数据类型转string

//第一种方式 fmt.Sprintf
    str = fmt.Sprintf("%d", num1)
    fmt.Printf("str type %T str=%v\n", str, str)

    str = fmt.Sprintf("%f", num2)
    fmt.Printf("str type %T str=%v\n", str, str)

    str = fmt.Sprintf("%t", b)
    fmt.Printf("str type %T str=%v\n", str, str)

    str = fmt.Sprintf("%c", ch)
    fmt.Printf("str type %T str=%v\n", str, str)

    //第二种方式 strconv
    str = strconv.FormatInt(int64(num1), 10)
    fmt.Printf("str type %T str=%v\n", str, str)

string类型转其他基本数据类型

var str1 string = "true"
    var b bool

    b, _ = strconv.ParseBool(str1)
    fmt.Printf("b type %T b=%v\n", b, b)

    var str2 string = "123456"
    var n1 int64
    n1, _ = strconv.ParseInt(str2, 10, 64)
    fmt.Printf("n1 type %T n1=%v\n", n1, n1)


    var str3 string = "123dd456"
    var n2 int64
    n2, _ = strconv.ParseInt(str3, 10, 64)
    fmt.Printf("n1 type %T n1=%v\n", n2, n2)

    var str4 string = "123"
    var n3 int64
    n3, _ = strconv.ParseInt(str4, 10, 64)
    n5 := int(n3)
    fmt.Printf("n3 type %T n1=%v\n", n3, n3)
    fmt.Printf("n5 type %T n1=%v\n", n5, n5)

    var str5 string = "123.456"
    var n4 float64
    n4, _ = strconv.ParseFloat(str5, 64)
    fmt.Printf("n1 type %T n1=%v\n", n4, n4)

12、包内变量名和函数名以及常量名,首字母大写为公开方法(相当于其他语言的public)其他包可使用,首字母小写为私有方法(相当于其他语言的private)其他包不能使用

var HeroName string = "张飞" //公共 public
var ambitiousName string = "曹操" //私有 private

13、只有i++和i--,并且只能单独使用不能赋值

//++  -- 只能独立使用
    var i = 8
    i++
    fmt.Println("i =",i)
    i--
    fmt.Println("i =",i)
    
    //错误使用
    ++i //错误
    --i //错误
    var j int;
    j = i++ //错误
    if i++ > 10 {  //错误
        return
    }

以上所述就是小编给大家介绍的《Golang一些有趣的特性》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

单元测试之道Java版

单元测试之道Java版

David Thomas、Andrew Hunt / 陈伟柱、陶文 / 电子工业 / 2005-1 / 25.00元

程序员修炼三部曲丛书包含了四本书,介绍了每个注重实效的程序员和成功团队所必备的一些工具。 注重实效的程序员都会利用反馈来指导开发,并驱动个人的开发流程。编码的时候,最有用的反馈来自于“单元测试”。 为了测试一座桥梁,不会只在晴朗的天气,开一辆汽车从桥中间穿过,就认为已经完成了对桥梁的测试。然而许多程序员却正在使用这种测试方法——把这种一次顺利通过称为“测试”。事实上,注重实效的程序员应......一起来看看 《单元测试之道Java版》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码